ANTLR在语法文件中重写规则

时间:2013-05-08 13:13:56

标签: parsing tree antlr

我的规则如下:

a : (b | c) d;

b : 'B';

c : 'C';

d : 'D';

使用此语法,ANTLR构建一个平面分析树。如何重写第一条规则(并保持其他两条规则不变),以便在名为A的根节点下返回匹配的内容?

如果第一个生产规则是这样的:

a : b d;

然后它可能被重写为

a : b d -> ^(A b d)

它会解决我的问题。但是,第一个语法规则为生成的解析树^(A b d)^(A c d)提供了多种可能性。

重写规则时如何表达?

1 个答案:

答案 0 :(得分:2)

您可以在重写中使用?运算符,如下所示。

a : (b | c) d -> ^(A b? c? d);