我有一个看起来像这样的规则:
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)
.
重写规则时如何表达这一点?