C++で再帰下降パーザライブラリ
再帰下降パーザを書くだけなら誰でもできることなのだが、本当に一日中悩んでやっと低機能なものが動くようになった。
最終的にはPEGをサポートしたいところである。
たとえば
<hoge> ::= alpha alpha digit <foo> <foo> ::= digit
なんて文法があったら
#include <iostream> #include "peg.hpp" struct Foo { char v; void action(digit x) { v = x.v; } }; struct Hoge { string v; void action(alpha x, alpha y, digit z, const Foo& f) { v += x.v; v += y.v; v += z.v; v += f.v; } }; int main() { parser<Hoge> parser; bool failed; Hoge h = parser.parse(&failed, "ya1234"); std::cout << h.v << std::endl; return 0; }
って書くだけで、カスタムアクションとASTつきのパーザがなぜか出来上がるという謎実装。
そして、異様にコンパイルに時間がかかる。
さらにちょっと書き間違えただけで、大量の謎エラーメッセージ