繁体   English   中英

语法文件中的ANTLR重写规则

[英]ANTLR rewrite rules in grammar file

我有一个看起来像这样的规则:

a : (b | c) d;

b : 'B';

c : 'C';

d : 'D';

ANTLR使用此语法构建一个平面解析树。 我该如何重写第一条规则(其余两个保持不变),以便将匹配的任何内容返回到称为A的根节点下?

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

a : b d;

那么它可能会被重写为

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

这样就解决了我的问题。 但是,第一个语法规则对于生成的解析树^(A bd)^(A cd)产生不止一种可能性。

重写规则时该如何表达?

您可以使用? 运算符中的重写如下。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM