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

Parsec - run

今、Parsec, a fast combinator parser を読んでいる。一気に読んでもなかなか分かりづらいのでわかった部分を細切れにして記事にしてみることにした。

まずは、parse 関数の使い方で run という短い関数が紹介されていた。やっていることは、parse 関数に、パーサ関数と入力文字列を渡し、戻ってきた戻り値のモナドからフィールドの値を取り出す作業だ。モナドから値を取り出す方法は、パターンマッチを利用している。この関数に、Parsec を実用的に使う使うときのエッセンスが含まれているような気がする。

import Text.ParserCombinators.Parsec

simple :: Parser Char
simple = letter

run :: Show a => Parser a -> String -> IO ()
run p input
  = case (parse p "" input) of
    Left err -> do putStr "parse error at "
                   print err
    Right x -> print x

実行例:
Main> run simple "abc"
'a'

run と同じ動作をする関数は、Parsec モジュールに parseTest というなまえで定義済みなので、プログラムを書かなくてもパーサ関数をテストできる。

Main> parseTest digit "123"
'1'

コンピュータネタが続くが、Parsec だけはやっておきたい気がする。
by tnomura9 | 2009-09-28 13:17 | Haskell | Comments(0)
<< Parsec 連接と選択 Parsec パーサコンビネー... >>