Migration 将语法文件升级到Antlr4
我正在将我的Antlr语法文件升级到最新的Antlr4 我已经转换了文件的大部分内容,但仍然存在语法上的差异,我无法理解。这三个区别是:Migration 将语法文件升级到Antlr4,migration,grammar,antlr4,Migration,Grammar,Antlr4,我正在将我的Antlr语法文件升级到最新的Antlr4 我已经转换了文件的大部分内容,但仍然存在语法上的差异,我无法理解。这三个区别是: equationset: equation* EOF!; equation: variable ASSIGN expression -> ^(EQUATION variable expression) ; orExpression : andExpression ( OR^ andExpression )* ; 在第一个示例中,错误是由
equationset: equation* EOF!;
equation: variable ASSIGN expression -> ^(EQUATION variable expression)
;
orExpression
: andExpression ( OR^ andExpression )*
;
在第一个示例中,错误是由于!。我不确定是否EOF和EOF!两者是否相同。移除!解决了错误,但我想确定这是正确的修复
在第二条规则中,->和^给出了错误。我不确定什么是Antlr4等效物
在第三条规则中,^给出了错误。删除它可以修复错误,但我找不到任何迁移指南来解释应该等效于什么
你能给我这3条规则的ANTR4等价物,并简单解释一下区别是什么吗?如果你可以参考任何其他资源,我可以找到答案是好的
提前感谢。许多ANTLR3语法包含ANTLR4不再支持的语法树操作(现在我们得到的是解析树而不是语法树)。你在这里看到的正是这个
EOF代码>表示EOF应匹配,但不出现在AST中。因为已经没有AST了,所以您无法更改它,所以请删除感叹号
- 构造
重写由->^(等式变量表达式)
规则创建的AST。因为已经没有AST了,所以你不能改变它,所以移除那个部分等式
最终确定或^
运算符应成为生成的AST的根。因为已经没有AST了…,你现在明白了:-)或