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