如何使规则在antlr2中返回多个值。例如:
declSpecifiers returns [int mods]
: ( storageClassSpecifier
| typeQualifier
| typeSpecifier)+
;
除了'mods'之外我还有其他一些信息要回来。我该怎么办?
答案 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(我知道这并不总是一个选择......但仍然如此)。