Parsecでparserの自動生成
Parsecでparserの自動生成をする
型視点での上の手順
後述する「手順」を型と関数で簡潔に示す
code:型視点
GenLanguageDef -- 記号、予約後などの設定
↓ makeTokenParser
GenTokenParser -- Tokenレベルのpaser
↓ buildExpressionParser
-- 式レベルのparser
手順
予約語や記号を定義
GenLanguageDefという型の設定ファイルを作る
lexerを生成
上で作ったGenLanguageDefをmakeTokenParserに適用してGenTokenParserを得る
Tokenレベルのparserの完成
これのことをGenTokenParserと呼ぶ
感覚としてはlexerに近い
式レベルのパーサーを作っていく
buildExpressionParserを使う
文レベルのパーサーを作っていく
再帰下降なものを作る
例
C言語を拡張しているもの
http://guppy.eng.kagawa-u.ac.jp/Seminar/Haskell/parsec.html
https://hackage.haskell.org/package/language-c
昔書いたやつ
github
これ見るのが一番早い
この記事を参考にしている
Parsecライブラリでパーサをつくる - M12i.
http://guppy.eng.kagawa-u.ac.jp/Seminar/Haskell/parsec.html
https://tyfkda.github.io/blog/2015/11/15/parsec-ast.html
https://wiki.haskell.org/Parsing_expressions_and_statements