开始使用ANTLR并避免常见错误

pet*_*ust 9 antlr

我已经开始学习ANTLR并拥有2007年的书"The Definitive ANTLR Reference"和ANTLRWorks(一种用于创建语法的交互式工具).而且,作为那种人,我从第3章开始.("快速游览不耐烦").

这是一个相当痛苦的过程,特别是因为一些错误是相当难以理解的(例如ANTLR:"缺少对规则范围的属性访问"问题,这对我来说意味着"你有错误").另外,我有一些非常简单的语法(仅限3-4个制作)和简单的输入(2行),在运行时会出现"OutOfMemory"错误.

ANTLR网站很有用,但有点零散,一些SO用户已经评论(/sf/ask/19493631/)本书和教程期望高入门级别.因此,我一直不愿意接近ANTLR讨论列表.

以后我们开始掌握它.拥有可以轻柔扩展的简单可靠的示例将是有用的.这当然值得掌握,因为我们根据ANTLR改造了很多我们的想法.

一个问题是ANTLR V3与V2有显着的变化.SO(以及ANTLR页面)上的一个答案是指不再可用的V2语法.

一些关于SO的ANTLR问题给了我很多帮助,但找到它们有点特别.所以我想知道SO用户如何帮助减少学习过程中的痛苦.(如果您参考参考书,那么指向特定页面会很有用).

编辑.@duffymo和@JamesAnderson已经确认ANTLR很难 - 主要是因为解析器很难.(FWIW我已经通过LEX/YACC等,毫无疑问,ANTLR更强大,更容易使用.)我认为有可能避免结垢的区域仍然是有用的,例如:

  • 确保变量名称的大写正确
  • 将包名添加到词法分析器和解析器
  • 注意规则的顺序,因为它会影响优先级

而且更多这些将是有用的.

duf*_*ymo 7

我同意 - ANTLR不适合胆小的人.它确实期望高入门级别,因为语法和解析器并不是微不足道的.

话虽如此,这里有一些建议:

  1. 忘记v2.版本3是标准; 考虑到早期版本或其文档,甚至不要浪费时间.
  2. OutOfMemoryError告诉你,你定义的语法中有一些循环.
  3. IntelliJ有一个很棒的IDE用于处理ANTLR v3.它将为您提供语法的图形表示,逐步调试等.如果您要使用ANTLR进行大量工作,那么购买许可证需要花费几美元.

ANTLR不容易掌握.这本书很好,但很密集.正如您所指出的那样,错误消息是神秘的.如果有人能让这件事变得简单,我会感到惊讶.


Jam*_*son 5

抱歉,我对ANTLR(实际上是javacc,bison或任何全功能解析器)的体验是,你的大部分学习都是通过修复自己的错误来实现的!

获得其他人的代码的好例子将有所减少,最好的例子看起来非常简单 - 但你缺少所有的汗水和头发拉动它让他们看起来那么容易.

  • 我刚刚开始使用它,"拔毛"确实是与ANTLR相关的学习曲线的正确技术术语.虽然我有一种感觉,一旦你到达ANTLR山的顶峰,从顶部的景色是壮观的. (5认同)