在 antlr 中使用“* +”的AST rewrite rule with devide group 技术的 AST rewrite rule 问题之后。
我在 ANTLR 中生成 AST 时遇到了麻烦,再次 :)。这是我的 antlr 代码:
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”,我得到了以下意想不到的AST:
与 ANLRwork 中的“解析树”比较:
我认为$noun3变量包含“COMMA noun3+=n”中所有“n”的列表。因此,AST 解析器 ^(NOUN $noun3)* 将绘制所有“n”,而不会区分哪个“n”实际上属于“prep”。
有什么方法可以在"(^(PREP prep) ^(NOUN $noun2) ^(NOUN $noun3) ) "中进行分离。我想要做的就是 AST 必须在 ANTLRwork 中使用“解析树”准确地绘制,没有标记 COMMA。
感谢帮助 !