ANTLR中复杂的AST重写规则
在使用Device group技术解决AST重写规则的问题之后 我在ANTLR中生成AST时遇到问题,再次:)。以下是我的ANTLR代码:ANTLR中复杂的AST重写规则,antlr,antlrworks,Antlr,Antlrworks,在使用Device group技术解决AST重写规则的问题之后 我在ANTLR中生成AST时遇到问题,再次:)。以下是我的ANTLR代码: start : noun1+=n (prep noun2+=n (COMMA noun3+=n)*)* -> ^(NOUN $noun1) (^(PREP prep) ^(NOUN $noun2) ^(NOUN $noun3)*)* ; n : 'noun1'|'noun2'|'noun3'|'nou
start : noun1+=n (prep noun2+=n (COMMA noun3+=n)*)*
-> ^(NOUN $noun1) (^(PREP prep) ^(NOUN $noun2) ^(NOUN $noun3)*)*
;
n : 'noun1'|'noun2'|'noun3'|'noun4'|'noun5';
prep : 'and'|'in';
COMMA : ',';
现在,通过输入:“名词1和名词2,名词4中的名词3,名词5”,我得到了以下意想不到的结果:
与AnlWork中的“解析树”进行比较:
我认为,$noun3变量包含“逗号noun3+=n”中所有“n”的列表。因此,AST解析器^(NOUN$noun3)*将绘制所有“n”,而不指定哪个“n”实际上属于“prep”s
是否有任何方法可以在“”(^(PREP-PREP)^(NOUN$noun2)^(NOUN$noun3))中进行分离“。我想做的就是AST必须在AntlWork中使用“Parse Tree”准确地绘制,不带标记逗号
谢谢你的帮助 如果您打破
start
规则,则最容易获得您想要的分离。下面是一个示例(不向AST写入COMMA
s):
一个前置词组
是一个名词,后面可以跟一个介词和另一个名词。start
规则查找逗号分隔的prepPhase
s
输出看起来像解析树图像,但没有逗号
如果您喜欢使用
->
显式写出AST,或者如果您不喜欢逗号之类的语法
,您可以这样编写开始
规则。这两种不同的形式在功能上是等价的
start : prepphrase //one prepphrase is required.
(COMMA prepphrase)*
-> prepphrase+ //write each prepphrase, which doesn't include commas
;
非常感谢!这真的很健康
start : prepphrase //one prepphrase is required.
(COMMA prepphrase)*
-> prepphrase+ //write each prepphrase, which doesn't include commas
;