パーサ

昨日に引き続いて構文解析のほうも書き換えようと思ったのだけど、ここで、止まる。
今、ILogで前提としているのは、「再帰下降 + 演算子優先順位」という方法だ。これを簡単に行うために、トークンの並びによって分岐を行うseq_match文を作ったのだし、演算子優先順位用のライブラリを用意したわけだ。


けど、再帰下降で色々と書いてみたところ、やっぱり、yaccみたいに「文法を書くとパーサになる」、という方法のほうが、いいような気がしてきた。と、いうよりも、seq_match文は全然使えない、ということに気付いた…
まあ、ちょろっとパーサを書きたい時なんかはyacc記法というのは非常に便利だと思うし、ILogが目指すところは、「ちょろっとコンパイラを書きたいときに使える言語」なので、yacc記法はまさに適材適所、と、思うのだ。
yacc記法は見にくい、と思ってたんだけど、それは、yacc記法が悪いというよりは、GCCの"c-parse.y"が見にくい、といったほうが正しいような気もしてきたし。


えーと、だから、なんだ、「どうしようか迷ってる」という話。
今のままでいくのか、それともILog自身にyacc記法みたいなのを入力できる文法、もしくはライブラリを用意するのか。文法を用意するとしたらどんなのか、ライブラリにするとしたらどんなインターフェースにするのか。とか、そんな感じで。
あと、LRパーサジェネレータを作ってみるのも面白いかも…、とも思う。


実行時に文法を読んでパーサを作る、みたいなライブラリって無いかな?