我的规则如下:
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)
提供了多种可能性。
重写规则时如何表达?
答案 0 :(得分:2)
您可以在重写中使用?
运算符,如下所示。
a : (b | c) d -> ^(A b? c? d);