将语法文件升级到Antlr4
问题描述:
我正在将Antlr语法文件升级到最新的Antlr4。将语法文件升级到Antlr4
我已经转换了大部分的文件,但坚持语法差异,我无法弄清楚。 3这样的区别是:
equationset: equation* EOF!;
equation: variable ASSIGN expression -> ^(EQUATION variable expression)
;
orExpression
: andExpression (OR^ andExpression)*
;
在第一个错误是由于!我不确定是否EOF和EOF!是否相同。删除!解决了错误,但我想确保这是正确的修复。
在第二条规则中, - >和^给出错误。我不确定什么是Antlr4等价物。
在第3条规则中,^给出错误。删除它可以修复错误,但是我找不到任何迁移指南来解释什么应该与此等效。
可以请你给我这3条规则的Antrl4等价物,并给出一些简单的解释是什么区别?如果您可以参考任何其他资源,我可以找到答案也可以。
在此先感谢。
答
许多ANTLR3语法包含ANTLR4不再支持的语法树操作(现在我们得到一个分析树而不是语法树)。你在这里看到的就是这个。
-
EOF!
表示EOF应该匹配,但不会出现在AST中。既然没有AST了,你不能改变它,所以删除感叹号。 - 构造
-> ^(EQUATION variable expression)
重写由equation
规则创建的AST。既然没有AST,你不能改变它,所以删除那部分。 -
OR^
最终确定OR
运算符应该成为生成的AST的根。因为没有AST了...,你现在得到了这一点:-)
在v4中,如果你需要一个AST,你必须自己生成它(这并不坏,我会争辩它给你更多的*),我写了一个如何做到这个[这里](http://*.com/a/29996191/3764814)的例子。 –