将语法文件升级到 Antlr4

Upgrading Grammar file to Antlr4

我正在将我的 Antlr 语法文件升级到最新的 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 ...,您现在明白了:-)