我已经开始学习 ANTLR,并且拥有 2007 年出版的《The Definitive ANTLR Reference》一书和 ANTLRWorks(一种用于创建语法的交互式工具)。而且,作为那种人,我从第 3 章开始。(“不耐烦的快速浏览”)。
这是一个相当痛苦的过程,特别是因为一些错误是相当难以理解的(例如,ANTLR:“规则范围内缺少属性访问”问题,这对我来说意味着“你搞错了”)。我还有一些非常简单的语法(仅限 3-4 个产品)和简单的输入(2 行),运行时会出现“OutOfMemory”错误。
ANTLR 站点很有用,但有些零散,一些 SO 用户评论 ( https://stackoverflow.com/questions/278480/good-tutorial-for-antlr ) 本书和教程期望入门级别很高。因此,我一直不愿意接近 ANTLR 讨论列表。
稍后我们开始掌握它。拥有可以轻轻扩展的简单可靠示例将很有用。这当然值得掌握,因为我们已经基于 ANTLR 改造了很多我们的思想。
一个问题是 ANTLR V3 与 V2 相比有显着的变化。SO(以及 ANTLR 页面上)的一个答案是指不再可用的 V2 语法。
一些关于 SO 的 ANTLR 问题对我有很大帮助,但找到它们有点临时。所以我想知道 SO 用户如何帮助减少学习过程的痛苦。(如果您参考参考书,指向特定页面会很有用)。
编辑。@duffymo 和 @JamesAnderson 已经证实 ANTLR 是一项艰苦的工作——主要是因为解析器很困难。(FWIW 我已经通过 LEX/YACC 等,毫无疑问 ANTLR 更强大且更易于使用。)我认为拥有可以避免污染的区域仍然很有用,例如:
- 确保变量名的正确大写
- 将包名称添加到词法分析器以及解析器
- 注意规则的顺序,因为它会影响优先级
更多这样的东西会很有用。