2009-11-02 101 views
9

我已经开始学习ANTLR,并同时拥有2007年的书籍“ANTLR参考”和ANTLRWorks(一种用于创建语法的交互式工具)。而且,作为那种人,我从第3章开始(“不耐烦的快速浏览”)。ANTLR入门和避免常见错误

这是一个相当痛苦的过程,特别是因为一些错误是相当困难的(例如ANTLR: "missing attribute access on rule scope" problem这只是对我意味着“你有什么问题”)。另外我有一些非常简单的语法(只有3-4个产品)和简单的输入(2行),当运行时出现“OutOfMemory”错误。

ANTLR网站很有用,但有些分散,有些SO用户评论说(https://stackoverflow.com/questions/278480/good-tutorial-for-antlr)这本书和教程期望很高的入门级。正因为如此,我一直不愿意接近ANTLR的讨论名单。

LATER我们开始接触它了。简单可靠的例子可以轻松扩展,这将是有用的。这是值得精通的,因为我们改变了很多基于ANTLR的想法。

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

SO上的一些ANTLR问题对我有很大帮助,但发现它们有点特别。所以我想知道SO用户如何帮助学习过程减轻痛苦。 (如果您参考参考书,指向特定页面将会很有用)。

编辑。 @duffymo和@JamesAnderson已经证实ANTLR很努力 - 主要是因为解析器很困难。 (FWIW我已经通过LEX/YACC等,毫无疑问ANTLR更强大,更容易处理。)我认为在有可能避免污染的领域仍然有用,例如:

  • 确保变量名
  • 加包名词法分析器的正确大小写以及解析器
  • 照顾过的规则顺序,因为它会影响优先

多的这些排序将是有益的。

+0

虽然没有具体关于ANTLR,泰尔写道称为语言实现模式以后的书。这是一个*优秀*与新手和兽医都相关的工作。我| MVHO绝对必须为任何人解析工作。 – 2011-03-02 12:10:39

回答

7

我同意 - ANTLR不适合心脏病。它确实期望很高的入门级,因为语法和解析器不是微不足道的。

随着中说,这里有几个建议:

  1. 忘了约1/2。版本3是标准;考虑到早期版本或其文档,甚至不会浪费时间。
  2. OutOfMemoryError告诉你,在你定义的语法中有一些循环。
  3. IntelliJ拥有与ANTLR v3一起使用的美妙IDE。它会给你一个你的语法的图形化表示,一步一步的调试等等。如果你要在ANTLR上做很多工作,购买许可证是值得的。

ANTLR不容易掌握。这本书很好,但很密集。正如你所指出的那样,错误信息是神秘的。如果有人在这里可以轻松一下,我会很惊讶。

+0

需要指出的是,ANTLRWorks对于构建语法也非常棒,它的功能与您在IntelliJ中列出的非常相似。 – RCIX 2009-12-10 02:24:13

+0

ANTLRWorks是的IntelliJ插件。我没有在IDE之外使用它。 – duffymo 2009-12-10 04:21:39

5

很抱歉,但我ANTLR的经验(事实上的JavaCC,野牛或任何全功能的解析器)是大部分的学习将是通过固定自己的错误!

获得其他民族代码的好例子会减少这种情况,最好的例子看起来非常简单 - 但你失去了所有的汗水和头发拉动它让他们看起来很容易。

+0

+1这真的很有用。 – 2009-11-02 12:55:20

+5

我刚刚开始使用它,“拔毛”确实是与ANTLR相关的学习曲线的正确技术术语。尽管我有这样的感觉,即一旦到达ANTLR山的顶峰,顶上的景色就非常壮观。 – 2009-11-16 19:47:56

2

即使你喜欢命令行,它使用AntlrWorks当你有问题,是值得的。图示可以使我更容易看到我错在哪里。

一张图片胜过一千个错误消息。