人気ブログランキング | 話題のタグを見る

Parsec 意味論

パーサでパターンを検知したときは普通同時にアクションを伴う。Parsec ではアクションは do 記法の中に記述する。

Text.ParserCombinators.Parsec> parseTest (do {string "abc"; return "hello, there"}) "abcdefg"
"hello, there"

Text.ParserCombinators.Parsec> parseTest (do {string "abc"; return "hello, there"}) "bacdefg"
parse error at (line 1, column 1):
unexpected "b"
expecting "abc"

これで、プライマリーのパーサ関数(char, letter, digit, string など)、プライマリーのパーサ関数を組み合わせる関数または演算子(do, <|>)、パーサ関数を文字列に適用する parser 関数、そして、パターンがマッチしたときのアクションの記述という4種類の道具が揃った。

入力列からパーサでパターンを検出し、マッチしたときはアクションを起こすというのがパーサの役目だから、Parsec の基本的な骨組みは分かった気がする。
by tnomura9 | 2009-09-29 16:08 | Haskell | Comments(0)
<< Parsec パターンの再帰的定義 Parsec try >>