タグ

ブックマーク / pocketberserker.hatenablog.com (3)

  • パーサコンビネータを使って簡単なNGワードフィルタリング機能を作る - pocketberserkerの爆走

    昔、 RSpec の入門とその一歩先へ - t-wadaの日記 を読んで「自分だったらどうつくるかなー」と考えていた。 そして時が経ち、パーサコンビネータを知った今となっては、簡単なものであればこれでいいんじゃないかと思っている。 というわけで、以下は F# の ParsecClone というライブラリを使った例。 フィルタリング対象の文字列を発見する 利用者が指定したワードにマッチするようにすればよい。 // cutting : string -> string // word: NGワード let dirtyToTurn cutting word = matchStr word |>> cutting マッチしたら伏せ字に入れ替える関数を適用すれば、それらしいものになる。 NGワードを複数登録できるようにする NGワードリスト内のどれかにマッチするようにする。 // words: NG

    パーサコンビネータを使って簡単なNGワードフィルタリング機能を作る - pocketberserkerの爆走
    somemo
    somemo 2014/03/26
  • JavaCC,ANTLR,パーサコンビネータを触ってみた - pocketberserkerの爆走

    某場所にて以下のような課題が出た。 いわゆるΣ計算の構文を解析するParserと解析結果にあわせた処理を行うVisitorの作成 書式は sum i : NUMBER .. NUMBER of expression 変数はiで固定、iを1つ目のNUMBERから2つ目のNUMBERまで変化させながらexpressionを計算 expressionは四則演算を行う。括弧を使用できること。 jjtreeを用いて実装せよ たとえば"sum i : 3 .. 5 of 1 + 2 * i"が27になる、みたいな形ですね。 でまぁ、jjtreeというかJavaCCだけだと 戦略というか方向性というか 時間短縮のため変数iはキーワードとしておく 変数が1つしかない仕様なので記号表は作らない Visitorのフィールドでiの当該値を記憶する あとはその場の勢いで追加実装したりしています。 JavaCC,j

    JavaCC,ANTLR,パーサコンビネータを触ってみた - pocketberserkerの爆走
  • HaskellのDocTestでTDDしてみる+α - pocketberserkerの爆走

    (注意)この記事はお試しでやってみたよ的な記事です。 Haskell界隈で面白そうな話をみた。 『プログラミング Haskell』『すごい Haskell 楽しく学ぼう!』の次に何を読む? - Togetterまとめ こういう話を見ていると自分でも試したくなりますよね。 というわけで、例によってFizzBuzzをお題にしてやってみました。まぁ、Haskellはじめて間もないのでこれくらいのお題がちょうどよさそうですし・・・コードひどかったりしたらご指摘ください。 環境準備 どうせだからディレクトリ構成からきちんと考えたいですよね、ということでGItHubに置かれているHaskellライブラリのディレクトリ構成を参考に作ってみました。 fizzbuzz |- Setup.hs |- fizzbuzz.cabal |- src |- FizzBuzz.hs |- dist |- ビルドやテスト

    HaskellのDocTestでTDDしてみる+α - pocketberserkerの爆走
    somemo
    somemo 2013/01/20
    ちょっと修正したら動いた [haskell][hspec][QuickCheck][doctest]
  • 1