Return value 在ANTLR中处理多个返回值
我在ANTLR中有一个简单的规则:Return value 在ANTLR中处理多个返回值,return-value,antlr,Return Value,Antlr,我在ANTLR中有一个简单的规则: title returns [ElementVector<Element> v] @init{ $v = new ElementVector<Element>() ; } : '[]' | '[' title_args {$v.add($title_args.ele);} (',' title_args {$v = $title_args.ele ;})* ']' ; 试图编译时,
title returns [ElementVector<Element> v]
@init{
$v = new ElementVector<Element>() ;
}
: '[]'
| '[' title_args {$v.add($title_args.ele);} (',' title_args {$v = $title_args.ele ;})* ']'
;
试图编译时,我遇到了标题规则中的127个错误:title_args是一个非唯一引用
我遵循了这个网站上另一个类似问题的解决方案(),但它似乎只适用于词汇规则
有没有具体的解决办法
谢谢,,
Christos我认为问题在于重复使用
title\u args
var。请尝试更改其中一个变量名。表达式中有两个title\u args,需要为它们设置别名。试试这个:
| '[' t1=title_args {$v.add($t1.ele);} (',' t2=title_args {$v = $t2.ele ;})* ']'
t1和t2是任意别名,只要它们匹配,您可以选择任何您想要的 是的,我也有同样的问题。 您需要更改其中一个变量名;例如,请执行以下操作:
title_args
title_args1
在代码中,而不是两次使用title_参数
如果title_args是一个解析器规则,那么只需创建名称为title_args1的相同规则。
因此,基本上会有两个具有相同功能的规则。这是一个错误的建议。正确的答案是上面的答案,使用=为每个产品声明一个变量名,然后引用它。
title_args
title_args1