我已经开始学习 ANTLR,并且拥有 2007 年的书《The Definitive ANTLR Reference》和 ANTLRWorks(用于创建语法的交互式工具)。而且,作为这样的人,我从第三章开始。(“针对不耐烦的人的快速浏览”)。
这是一个相当痛苦的过程,特别是因为有些错误是相当难以理解的(例如ANTLR:“规则范围内缺少属性访问”问题 https://stackoverflow.com/questions/1658869/antlr-missing-attribute-access-on-rule-scope-problem这对我来说只是意味着“你出了问题”)。另外,我有一些非常简单的语法(仅限 3-4 个产生式)和简单的输入(2 行),运行时会出现“OutOfMemory”错误。
ANTLR 网站很有用,但有些碎片化,一些 SO 用户评论道(https://stackoverflow.com/questions/278480/good-tutorial-for-antlr https://stackoverflow.com/questions/278480/good-tutorial-for-antlr)这本书和教程期望具有较高的入门水平。因此,我一直不愿意接近 ANTLR 讨论列表。
LATER我们正在开始应对它。拥有可以逐渐扩展的简单可靠的示例将很有用。它当然值得掌握,因为我们基于 ANTLR 重塑了相当多的思维。
问题之一是ANTLR V3较V2有重大变化。 SO(以及 ANTLR 页面)上的一个答案提到了不再可用的 V2 语法。
SO 上的一些 ANTLR 问题对我帮助很大,但找到它们有点临时。所以我想知道 SO 用户如何帮助减轻学习过程的痛苦。 (如果您参考参考书,指出特定页面会很有用)。
EDIT。 @duffymo 和 @JamesAnderson 已经证实 ANTLR 是一项艰苦的工作 - 主要是因为解析器很困难。 (FWIW 我已经通过了 LEX/YACC 等,毫无疑问 ANTLR 更强大并且更容易使用。)我认为有可能避免弄脏的区域仍然很有用,例如:
- 确保变量名大小写正确
- 将包名称添加到词法分析器和解析器
- 注意规则的顺序,因为它会影响优先级
更多类似的内容将会很有用。
我同意 - ANTLR 不适合胆小的人。它确实需要较高的入门水平,因为语法和解析器并不简单。
话虽如此,这里有一些建议:
- 忘记 v2 吧。版本 3 为标准;甚至不要浪费时间考虑早期版本或其文档。
- OutOfMemoryError 告诉您您定义的语法中有一些循环。
- IntelliJ 有一个很棒的 IDE 可以与 ANTLR v3 配合使用。它将为您提供语法的图形表示、逐步调试等。如果您要使用 ANTLR 进行大量工作,那么花几美元购买许可证是值得的。
ANTLR 并不容易掌握。书很好,但是很厚重。正如您所指出的,错误消息很神秘。如果这里有人能让这件事变得简单,我会感到惊讶。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)