2017-04-14 70 views
0

我正在将Antlr语法文件升级到最新的Antlr4。将语法文件升级到Antlr4

我已经转换了大部分的文件,但坚持语法差异,我无法弄清楚。 3这样的区别是:

equationset: equation* EOF!; 
equation: variable ASSIGN expression -> ^(EQUATION variable expression) 
; 
orExpression 
: andExpression (OR^ andExpression)* 
; 

在第一个错误是由于!我不确定是否EOF和EOF!是否相同。删除!解决了错误,但我想确保这是正确的修复。

在第二条规则中, - >和^给出错误。我不确定什么是Antlr4等价物。

在第3条规则中,^给出错误。删除它可以修复错误,但是我找不到任何迁移指南来解释什么应该与此等效。

可以请你给我这3条规则的Antrl4等价物,并给出一些简单的解释是什么区别?如果您可以参考任何其他资源,我可以找到答案也可以。

在此先感谢。

回答

1

许多ANTLR3语法包含ANTLR4不再支持的语法树操作(现在我们得到一个分析树而不是语法树)。你在这里看到的就是这个。

  • EOF!表示EOF应该匹配,但不会出现在AST中。既然没有AST了,你不能改变它,所以删除感叹号。
  • 构造-> ^(EQUATION variable expression)重写由equation规则创建的AST。既然没有AST,你不能改变它,所以删除那部分。
  • OR^最终确定OR运算符应该成为生成的AST的根。因为没有AST了...,你现在得到了这一点:-)
+0

在v4中,如果你需要一个AST,你必须自己生成它(这并不坏,我会争辩它给你更多的自由),我写了一个如何做到这个[这里](http://stackoverflow.com/a/29996191/3764814)的例子。 –