1

次のようなルールがあります。

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)

ルールを書き直すとき、これをどのように表現すればよいでしょうか。

4

1 に答える 1

2

?次のように書き換えで演算子を使用できます。

a : (b | c) d -> ^(A b? c? d);
于 2013-05-08T13:54:26.823 に答える