代码之家  ›  专栏  ›  技术社区  ›  Isaac

为标记语言编写解析器:理论与实践

  •  14
  • Isaac  · 技术社区  · 16 年前

    我想做一些既强大又地道的Clojure

    我已经开始了一些不同的尝试(主要是纸上谈兵),但我对它们非常满意,因为我觉得我只是在即兴发挥。那很好,但在过去一两个月里,我已经用Clojure的语言做了大量的探索,并且希望,至少部分地,跟随巨人的道路。

    我想要一些指点,或者建议,或者资源(来自O'Reilly的书会很棒爱我一些电子书但是亚马逊或者 无论什么地方

    编辑 布莱恩·卡珀在网上有一篇有趣的文章 using ANTLR from Clojure .

    clojure-pg 和 fnparse ,它们是Clojure解析器生成器。FNPrase甚至看起来有一些像样的文档。

    4 回复  |  直到 13 年前
        1
  •  5
  •   Alex Ott    16 年前

    还有 clj-peg 项目,它允许指定用于解析数据的PEG语法

        2
  •  6
  •   Steve Cooper    16 年前

    ANTLR parser generator here . 不管怎样,这里有一些源代码可以看。

        3
  •  4
  •   Alex Miller    16 年前

    另一个尚未提及的是 clarsec

    我最近也在进行一个非常类似的任务,在Clojure中构建一个解析器。我沿着fnparse的路径走了很长一段路,特别是使用了(尚未发布的)fnparse 3,您可以在 develop github上的分支。它分为两种形式:hound(专门用于LL(1)个单独的lookahead解析器)和cat,后者是packrat解析器。两者都是基于monad(比如clarsec)构建的函数解析器。fnparse做了一些令人印象深刻的工作——记录解析器、构建错误消息等的能力非常出色。关于develope分支的文档是不存在的,尽管除了函数docstring之外,它实际上相当不错。最后,我遇到了一些障碍,试图使LL(k)工作。我认为这是可能的,只是很难没有一个像样的例子,如何使回溯工作良好。我也非常熟悉分词和分词的解析器,所以我很难这样想。我仍然对这是一个很好的解决方案在未来非常感兴趣。

    Antlr ,这是非常健壮的,有很好的旅行,有很好的文档(在2本书中),等等。它没有Clojure后端,但我希望它在将来会,这将使它非常适合解析器的工作。我正在使用它来进行词法分析、解析、树转换,以及通过StringTemplate进行模板化。它并不是完全无障碍的,但到目前为止,我已经找到了所有问题的可行解决方案。Antlr独特的LL(*)解析算法允许您编写真正可读的语法,但仍然使它们相当有效(如果不可读,则逐渐调整)。

        4
  •  2
  •   Steve Cooper    16 年前

    两个功能性标记转换器是:;