语法文件 .g 与 Antlr 2.7 到 4 的兼容性?

grammar files .g compatibility frome Antlr 2.7 to 4?

情况:我们正在移植我们的旧模拟平台以math/physics/CS普及MobiNet来自C++上线JS。 当时MobiNet语言使用Antlr 2.7.3.

处理

注意:我们没有精力重新设计,只是移植,已经有很多方面要处理了。

答案是否定的。您将必须手动升级语法文件。

Q1: 正如 Lex 也指出的那样,不,原来的语法是行不通的。

Q2: 从 ANTLR 2 升级到 ANTLR 4 可能是一项繁琐的任务,具体取决于许多小细节。在你的calc.g中,解析器规则似乎没有那么复杂,但是你要知道解析技术的概念从ANTLR 2变成了ANTLR 3LL(k)LL(*),详见 here) and also from ANTLR 3 to ANTLR 4 (LL(*) to AdaptiveLL(*), details here)。如果使用 AST 生成,它也发生了很大变化。 此外,您必须从 C++ 更改目标并重写操作。

Q3: 从 ANTLR 2 升级到 ANTLR 3 可能更容易,并且可能会解决您的迁移问题。但这是另一个问题,是否真的值得花时间升级到 ANTLR 3(然后,也许,稍后升级到另一个版本),或者花一些(可能更多)时间直接升级到 ANTLR 4.

谢谢大家!

  • 更改目标是比较容易的部分(我们知道如何将旧 C++ 引擎的变量映射到新的 JS 引擎)。
  • 对于我们可怜的年轻工程师来说,升级语法可能是遥不可及的,因为他已经有很多方面需要学习和处理,所以我将不得不预取和仲裁如何做才能减轻他的工作。
  • 迁移更多的是 C++ 到 JS,Antlr 的版本只是它的一个副作用:版本已经改变,甚至不支持 JS。如果使用 Antlr3 迁移更容易,这是一个严肃的选择,但是支持 JS 在 v3 中正常工作吗? (论坛和网页在这里有点矛盾)。
  • 阅读您提供的 2 个链接,我看到了许多改进和新的可能性,但不清楚哪些不再有效。或者你的意思是至少对于 3 到 4,语法已经完全改变了?
  • 以防万一:没有人写 .g 到 .g4 翻译器吗?