代码之家  ›  专栏  ›  技术社区  ›  Eamon Nerbonne

CoCo/R对Antlr

  •  6
  • Eamon Nerbonne  · 技术社区  · 14 年前

    我正在评估使用 Coco/R VS ANTLR 作为基本上可编写脚本的邮件合并功能的一部分,在c项目中使用。要解析(简单的)脚本,我需要 语法分析器 .

    我把重点放在Coco/R和Antlr上,因为它们看起来都很公平 成熟且保养良好 并且能够生成合适的C解析器。

    不过,使用这两种方法似乎都不容易,而且 简单 是我会感激的-尤其是 可维护性 其他人。

    有人有什么建议吗?对一种小语言进行语法分析的优缺点是什么?或者我完全是在找错地方吗?这些集成到典型的连续集成设置中的效果如何?有哪些陷阱?

    相关:嗯,很多问题,比如 1 , 2 , 3 , 4 , 5 .

    4 回复  |  直到 7 年前
        1
  •  2
  •   Corbin March    14 年前

    如果您只是将数据合并到一个复杂的模板中,请考虑terence parr的 StringTemplate engine . 他是安特尔背后的人。stringtemplate可能比完整的解析器生成器更适合和更易于使用。这是一个功能非常丰富的模板引擎。

    downloads .

        2
  •  4
  •   Thomas Visel    10 年前

    我们用椰子代替以前用的鹿角已经两年了。对于典型的大数据查询(我们的应用程序),我们的经验是这样的。Caveat:我们依赖于完整的UTF-8处理,在C++中实现了解析器。这些数字是针对一种拥有200个ebnf产品的语言。

    • antler:260个usecs/query,生成的解析器/lexer占用108MB内存
    • coco:220 usecs/query和70kbyte内存,用于解析器/扫描仪

    最初,coco有1.2毫秒的启动时间,并生成了几个60kbyte的表来映射utf-8。我们对coco做了很多本地增强,比如消除了大表,消除了1.2msec的启动时间,极大地增强了内部文档(以及生成的代码中的文档)。

    我们的(开源)coco版本与antlr相比占地面积很小,速度非常快,没有启动延迟,只是……作品。它没有鹿角般漂亮的用户界面,但一旦我们开始使用coco,我们就再也没有想过这会成为一个问题。

        3
  •  3
  •   Terence Parr    14 年前

    antlr是ll(*),它和peg一样强大,尽管通常效率和灵活性都要高得多。ll(*)退化为k的ll(k)>1不需要一个任意展望。

        4
  •  2
  •   500 - Internal Server Error    7 年前

    基本上,coco/r生成递归下降解析器,只支持ll(1)文法,而antlr使用回溯(以及其他技术),这使得它能够处理更复杂的文法。语法分析器更轻,更容易理解和部署,但有时把语法转换成一种形式,使它理解它的一种前瞻性约束——对于许多常见的编程语言语法(如C++、SQL)来说,这是不可能的。