次の単純な「電卓式」文法(BNF)は、予測LL(1)である簡単な再帰下降パーサーを使用して簡単に解析できます。
<expr> := <term> + <term>
| <term> - <term>
| <term>
<term> := <factor> * <factor>
<factor> / <factor>
<factor>
<factor> := <number>
| <id>
| ( <expr> )
<number> := \d+
<id> := [a-zA-Z_]\w+
選択するルールを知るには、次のトークンを確認するだけで常に十分だからです。ただし、次のルールを追加するとします。
<command> := <expr>
| <id> = <expr>
次のような変数を使用して、コマンドラインで電卓を操作するために:
calc> 5+5
=> 10
calc> x = 8
calc> 6 * x + 1
=> 49
<command>
単純なLL(1)予測パーサーを使用してルールを解析できないというのは本当ですか?そのためのパーサーを作成しようとしましたが、今後さらにトークンを知る必要があるようです。バックトラッキングを使用するソリューションですか、それともLL(2)を実装して、常に2つのトークンを先読みすることができますか?
RDパーサジェネレータがこの問題を処理する方法(たとえば、ANTLR)?