C++における文法解析ライブラリとしてboost::spiritというものがある。BNF記法に非常に近い見た目の(しかもちゃんと動く) c++のコードとして文法を書き下せるという、c++の限界に挑戦している感のあるライブラリである。マニュアルを読む(ほぼqiのところしか読んでないけど)のに大分時間をかけてしまったので備忘録を兼ねて記事にしてみる。 boost::spiritは大きく3つのモジュールに分かれていて、定義した文法に沿って文字列をデータに変換するqi、逆にデータから文字列をつくるkarma、また字句解析に特化したlexからなっている。今回はその中のqiを触ってみる。 BNF記法とspirit BNF記法(あるいはEBNF記法)というのは、 group ::= '(' expression ')' factor ::= integer | group term ::= factor