语法文件 .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.
处理
- 我们可以期待我们的
calc.g
直接在 Antlr4 中工作吗? (恐怕被后缀改名为.g4)。
- 如果不直接升级的话,升级起来有多难?
- 如果这会很困难,有没有什么办法可以简化工作(例如使用较旧的 Antlr 版本,只要 JS 目标作品)?
注意:我们没有精力重新设计,只是移植,已经有很多方面要处理了。
答案是否定的。您将必须手动升级语法文件。
Q1:
正如 Lex 也指出的那样,不,原来的语法是行不通的。
Q2:
从 ANTLR 2 升级到 ANTLR 4 可能是一项繁琐的任务,具体取决于许多小细节。在你的calc.g
中,解析器规则似乎没有那么复杂,但是你要知道解析技术的概念从ANTLR 2变成了ANTLR 3(LL(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 翻译器吗?
情况:我们正在移植我们的旧模拟平台以math/physics/CS普及MobiNet来自C++上线JS。 当时MobiNet语言使用Antlr 2.7.3.
处理- 我们可以期待我们的
calc.g
直接在 Antlr4 中工作吗? (恐怕被后缀改名为.g4)。 - 如果不直接升级的话,升级起来有多难?
- 如果这会很困难,有没有什么办法可以简化工作(例如使用较旧的 Antlr 版本,只要 JS 目标作品)?
注意:我们没有精力重新设计,只是移植,已经有很多方面要处理了。
答案是否定的。您将必须手动升级语法文件。
Q1: 正如 Lex 也指出的那样,不,原来的语法是行不通的。
Q2:
从 ANTLR 2 升级到 ANTLR 4 可能是一项繁琐的任务,具体取决于许多小细节。在你的calc.g
中,解析器规则似乎没有那么复杂,但是你要知道解析技术的概念从ANTLR 2变成了ANTLR 3(LL(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 翻译器吗?