Parsec はパーサコンビネータだ。それでは、パーサコンビネータとは何かということになるが、どうも基本的なパーサの関数を組み合わせて複雑なパーサを作り上げる仕組みらしい。Hugs のプロンプトから Parsec を load して、いろいろ試してみた。
Main> :l Text.ParserCombinators.Parsec Text.ParserCombinators.Parsec> 次の例のように、char 'a' というパーサ関数は 'a' 一文字にマッチするが、 Text.ParserCombinators.Parsec> parse (char 'a') "" "aaabc" Right 'a' これに many1 関数を加えると 'a' の繰り返しにマッチする。 Text.ParserCombinators.Parsec> parse (many1 (char 'a')) "" "aaabc" Right "aaa" また、string "hi" というパーサ関数は、"hi" という文字列にマッチするが、 Text.ParserCombinators.Parsec> parse (string "hi") "" "hihihi" Right "hi" これに、many 関数を組み合わせると、"hi" の繰り返しにマッチしそれを配列として戻す。 Text.ParserCombinators.Parsec> parse (many (string "hi")) "" "hihihi" Right ["hi","hi","hi"] このほかにも、基本的なパーサ関数や、それらを組み合わせるための高階関数が Parsec には揃っているようだ。それらを組み合わせることで BNF 記法で表すような複雑なパーサも簡単に作ることができるらしい。Parsec の使い方のようなものが見えてきたが、残念なのはドキュメントがないことだ。Haskell も日本語の本がもっと出てくれば爆発的に流行するような気がする。
by tnomura9
| 2009-09-27 22:40
| Haskell
|
Comments(0)
|
カテゴリ
新型コロナウイルス 主インデックス Haskell 記事リスト 圏論記事リスト 考えるということのリスト 考えるということ ラッセルのパラドックス Haskell Prelude Ocaml ボーカロイド 圏論 jQuery デモ HTML Python ツールボックス XAMPP Ruby ubuntu WordPress 脳の話 話のネタ リンク 幸福論 キリスト教 心の話 メモ 電子カルテ Dojo JavaScript C# NetWalker ed と sed HTML Raspberry Pi C 言語 命題論理 以前の記事
最新のトラックバック
最新のコメント
ファン
記事ランキング
ブログジャンル
画像一覧
|
ファン申請 |
||