gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 11:05:14 24 4
gpt4 key购买 nike

我想以某种方式在匹配的规则中存储一个预先确定类型的变量(甚至是一个对象),就像在 GNU Bison 中一样,您可以在其中定义每个规则具有的类型以及构造函数和字段与他们相关。

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

varAssign: id '=' expr {$$ = new TokenVarAssign(); $$.id = $1; $$.expr = $3;}

其中 $$ 表示当前匹配的标记(在本例中为 varAssign 之一),$n 表示匹配中的第 n 个标记规则。

是否有可能使用 ANTLR4 实现相同(或类似)的效果?到目前为止,我一直在解析文件后遍历 ParserRuleContext 对象树,并以这种方式构建我的 Token 对象,事实证明这种方式的多态性和动态性要差得多。

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

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

最佳答案

您可以定义和分配 attributes on parse tree nodes .您可以访问访问者和语法文件中的属性。

关于java - ANTLR4 - 是否可以在匹配规则中存储特定数据类型的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29716073/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com