BNF
- バッカスナウア記法。パーサジェネレータを使うときによく書く。
- 自分がよく使っていたのはBisonのそれで、EBNFである
racc
- Rubyでbison的なことをする際に使う
raccとEBNFの比較
しかしながらRaccはBNFに近い形式のみでEBNFをそのまま受け付けてくれるわけではありません。
特に問題となるのが、EBNFのみで可能なブレース('[', ']')やブラケット('{', '}')を使った省略可能及び繰り返しの表記で、
これをBNFでも表記可能な再帰定義で書き換えなければなりません。
EBNFをRacc形式に変換する
hoge_def ::= { ada_def [ basha_def ] } hoge_def ::= hoge_def_loop hoge_def_loop ::= ada_def basha_def hoge_def_loop | ada_def hoge_def_loop |