Java ANTLR4-是否可以在匹配规则中存储特定数据类型的变量?

Java ANTLR4-是否可以在匹配规则中存储特定数据类型的变量?,java,parsing,antlr4,Java,Parsing,Antlr4,我希望以某种方式在匹配规则中存储一个预定义类型的变量(甚至是一个对象),就像在GNU Bison中一样,在GNU Bison中,您将定义每个规则所具有的类型,从而定义与其关联的构造函数和字段 例如(在GNU Bison中),如果我预先确定varAssign规则的实例将是TokenVarAssign类型,它有一个构造函数和两个字段(变量标识符和赋值表达式),我可以执行以下操作: varAssign: id '=' expr {$$ = new TokenVarAssign(); $$.id = $

我希望以某种方式在匹配规则中存储一个预定义类型的变量(甚至是一个对象),就像在GNU Bison中一样,在GNU Bison中,您将定义每个规则所具有的类型,从而定义与其关联的构造函数和字段

例如(在GNU Bison中),如果我预先确定varAssign规则的实例将是
TokenVarAssign
类型,它有一个构造函数和两个字段(变量标识符和赋值表达式),我可以执行以下操作:

varAssign: id '=' expr {$$ = new TokenVarAssign(); $$.id = $1; $$.expr = $3;}
其中,$$表示匹配的当前令牌(在本例中,varAssign中的一个),而$n表示规则中的第n个令牌

是否有可能实现与ANTLR4相同(或类似)的功能。 到目前为止,我一直在遍历
ParserRuleContext
对象树,然后解析文件并以这种方式构造我的令牌对象,结果证明它的多态性和动态性要小得多

编辑以响应回答:使用以下语法文件,我得到以下错误:

grammar Test ;

INT: '0' .. '9' ;
add [int x] returns [int result] : '+=' INT {$result = $x + $INT.int;} ;
错误:

$ antlr4 Test.g4
error(50): Test.g4:4:4: syntax error: '[int x]' came as a complete surprise to me while matching rule preamble

您可以定义和分配。您可以访问访问者和语法文件中的属性。

谢谢!我查看了您附加的链接,但Antler无法识别该属性。我甚至复制了提供的示例规则,但仍然得到以下错误:语法错误:“[int x]”在匹配规则序言时完全出乎我的意料。您可以在上面的帖子中附加失败的规则吗?我不再能够编辑注释,但以下规则是:添加[int x]返回[int result]:“+=”int{$result=$x+$INT.INT;};我直接从文档中的示例中获取它,我有一个有效的规则,名为INT。你确定你使用ANTLR4吗?我用ANTLR4测试了它,它还可以。但是一个完整的语法将允许进行更详细的分析。它可以是一个小语法,只要它再现了你不理解的行为。最好附上这个grammar回复你的问题(而不是评论)-那会更可读。编辑了原始帖子,谢谢你的额外帮助!