如何让一个规则在antlr2中返回多个值。例如:
declSpecifiers returns [int mods]
: ( storageClassSpecifier
| typeQualifier
| typeSpecifier)+
;除了'mods‘到return.What之外,我还有其他一些信息,我应该怎么做?
发布于 2011-12-13 23:14:53
在ANTLR v3.x中,可以通过在括号中列出多个返回值来包含这些返回值。
declSpecifiers returns [int mods, Object otherInfo]
: ( storageClassSpecifier
| typeQualifier
| typeSpecifier)+
;生成的代码将返回一个生成的类,其中包含所有返回值的字段,使用您提供的名称。
发布于 2011-12-14 00:12:44
在ANTLR v2.x中,您只能返回单个值,这与ANTLR v3.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是相当旧的:如果你可以,迁移到v3 (我知道这并不总是一个选择...但仍然如此)。
https://stackoverflow.com/questions/8491388
复制相似问题