0

antlr2中如何让一个规则返回多个值。例如:

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

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

4

2 回答 2

1

在 ANTLR v3.x 中,您可以通过在括号中列出多个返回值来包含它们。

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

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

于 2011-12-13T15:14:53.100 回答
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(我知道这并不总是一种选择……但仍然如此)。

于 2011-12-13T16:12:44.017 回答