Return value 在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 ;})* ']' ; 试图编译时,

我在ANTLR中有一个简单的规则:

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