次のセットをAND
とOR
でシンプルな文法をdescribleが、次のエラーで失敗しようとしています
があります相互左再帰
文法は以下の通りです:
expr:
NAME |
and |
or;
and:
expr AND expr;
or:
expr OR expr;
NAME : 'A' .. 'B' + ;
OR: 'OR' | '|';
AND: 'AND' | '&';
を同時に、次の文法
expr:
NAME |
expr AND expr |
expr OR expr;
NAME : 'A' .. 'B' + ;
OR: 'OR' | '|';
AND: 'AND' | '&';
をコンパイルします。
なぜですか?
しかし、私は、ANDやORのような各演算に適切なノードを持つ必要があります。 1つのルールがすべてのルールを解析する場合、これはどのように可能ですか? – Dims
既存の文法(例:https://github.com/antlr/grammars-v4)を見ることで、多くのことを学ぶことができます。左の再帰的なパーツが単一のルールになるようにルールを定義することも、非再帰的な方法で行うこともできます。 –