代码之家  ›  专栏  ›  技术社区  ›  peter.murray.rust

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

  •  9
  • peter.murray.rust  · 技术社区  · 16 年前

    我已经开始学习ANTLR,并拥有2007年出版的《权威ANTLR参考》一书和ANTLRWorks(一种用于创建语法的交互式工具)。作为这样的人,我从第三章开始(《不耐烦的人的快速旅行》)。

    这是一个相当痛苦的过程,尤其是因为有些错误是无法穿透的(例如。 ANTLR: "missing attribute access on rule scope" problem 这对我来说意味着“你做错了什么”)。此外,我还有一些非常简单的语法(仅3-4个产品)和简单的输入(2行),运行时会出现“OutOfMemory”错误。

    ANTLR站点很有用,但有些零碎,一些用户对此发表了评论( https://stackoverflow.com/questions/278480/good-tutorial-for-antlr )这本书和教程的入门水平很高。因为这个原因,我一直不愿意接触ANTLR讨论列表。

    后来 我们正开始着手解决这个问题。有一些简单可靠的例子,可以轻轻地加以扩展,这将是有益的。这当然值得掌握,因为我们已经基于ANTLR重塑了很多想法。

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

    . @duffymo和@JamesAnderson已经证实,ANTLR是一项艰苦的工作——主要是因为解析器很困难(FWIW我已经通过了LEX/YACC等,毫无疑问,ANTLR更强大,更容易使用。)我认为,在可能避免污染的领域,如:

    • 确保变量名的大小写正确
    • 注意规则的顺序,因为它会影响优先级

    3 回复  |  直到 9 年前
        1
  •  7
  •   duffymo    16 年前

    我同意——ANTLR不适合胆小的人。它确实希望有一个高的入门级,因为语法和解析器并不简单。

    尽管如此,以下是一些建议:

    1. OutOfMemoryError告诉您在您定义的语法中有一些循环。
    2. IntelliJ有一个很好的IDE用于与ANTLR v3一起工作。它会给你一个语法的图形化表示,一步一步地调试,等等。如果你打算用ANTLR做很多工作,那么买一个许可证是值得的。

    ANTLR不容易掌握。这本书很好,但很难理解。正如您所注意到的,错误消息是神秘的。如果这里有人能让事情变得简单,我会感到惊讶。

        2
  •  5
  •   James Anderson    16 年前

        3
  •  2
  •   Mawg says reinstate Monica    16 年前

    即使您更喜欢命令行,当您遇到问题时也值得使用AntlrWorks。诊断表示法可以更容易地看出我做错了什么。

    推荐文章