antlr2返回多个值

时间:2011-12-13 15:06:02

标签: antlr antlr2

如何使规则在antlr2中返回多个值。例如:

declSpecifiers returns [int mods]
        : ( storageClassSpecifier    
        | typeQualifier       
        | typeSpecifier)+
        ;

除了'mods'之外我还有其他一些信息要回来。我该怎么办?

2 个答案:

答案 0 :(得分:1)

在ANTLR v3.x中,您可以在括号中列出多个返回值。

declSpecifiers returns [int mods, Object otherInfo]
        : ( storageClassSpecifier    
        | typeQualifier       
        | typeSpecifier)+
        ;

生成的代码将使用您提供的名称返回包含所有返回值字段的生成类。

答案 1 :(得分:1)

在ANTLR v2.x中,您只能返回单个值,这与ANTLR v3.x不同,其中多个返回值由包含多个返回值的容器自动包装。

您必须返回某种集合或自定义对象:

declSpecifiers returns [Map map]
{map = new HashMap();}
  : ( storageClassSpecifier { /* populate your map here */ }
    | typeQualifier         { /* populate your map here */ }
    | typeSpecifier         { /* populate your map here */ }
    )+
  ;

我认为你知道ANTLR v2已经过时了:如果可以的话,请迁移到v3(我知道这并不总是一个选择......但仍然如此)。