次のようなルールがあります。
a : (b | c) d;
b : 'B';
c : 'C';
d : 'D';
この文法を使用して、ANTLR はフラットな解析ツリーを構築します。最初のルールを書き直して (残りの 2 つを変更せずに)、一致したものが A というルート ノードの下に返されるようにするにはどうすればよいでしょうか?
最初のプロダクション ルールが次のような場合:
a : b d;
それからそれは次のように書き換えられた可能性があります
a : b d -> ^(A b d)
そしてそれは私の問題を解決したでしょう。^(A b d)
ただし、最初の文法規則は、結果の構文木orに対して複数の可能性をもたらします^(A c d)
。
ルールを書き直すとき、これをどのように表現すればよいでしょうか。