2009-01-01から1ヶ月間の記事一覧

PEGパーサーを書いてみる:後半

前回、シグネチャだけで終わっていたパーサーを実装してみました。 seqP :: Parser i o -> Parser i o -> Parser i o seqP p q = do v ([o] -> Parser i o) -> Parser i o -> Parser i o ifP p ps pf = Parser $ \i -> case (runParser p i) of Nothing -> r…

PEGパーサーを書いてみる

PEGで文法を表現してみて、ルールのそれぞれの使い方動きにもなじみが出てきました。ここで、PEGパーサーをちょっと書いてみたいと思います。PappyやFrisbyのようにO(N)というわけに行くかどうかはわかりませんが…方針としては、Parsecのまねということで、…

PEGで四則演算を表現してみる

前回PEGで整数をパースするパターンをやってみました: NUMBER = (ZERO/NONZERO) NONZERO = (DIGIT, DIGIT0*) ZERO = 0!(DIGIT0) DIGIT = (1/2/3/4/5/6/7/8/9) DIGIT0 = (0/DIGIT) これに加減乗除を追加して四則演算をパースするPEGを書いてみます。まずは整…

PEGのボキャブラリー

前回に引き続き、解析表現文法(PEG)を見ていきたいと思います。あいまい性が無かったり、再帰降下型パーサーと相性が良いなどの特徴があるPEGなんですが、どうゆう中身になっているのでしょうか。PEGは次のような要素で構成されます。各要素の英語名の後に…

2009年

えー、あけましておめでとうございます。昨年中は色々な方にコメントをいただき、大変ありがとうございました。更新のペースが鈍ってきてはいるのですが、Haskellを通して学んでいることに対する興味は尽きる様子はありません。今年もよろしくどうぞ。