Antlr2返回多个值



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

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

除了"mod"之外,我还有一些其他信息要返回。我该怎么办?

在X中,可以通过在括号中列出多个返回值来包含它们。

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

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

在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(我知道这并不总是一个选择…但仍然)。

最新更新