Coco / R与ANTLR

时间:2010-04-27 15:04:00

标签: c# parsing antlr cocor

我正在使用Coco/RANTLR进行评估,以便在C#项目中使用,作为本质上可编写脚本的邮件合并功能的一部分。要解析(简单)脚本,我需要一个解析器

我专注于Coco / R和ANTLR,因为它们看起来相当成熟且维护良好并且能够生成像样的C#解析器。

然而,使用其中任何一项似乎都无足轻重,简单是我所欣赏的 - 特别是可维护性

有没有人有任何建议?解析一种小语言的优点/缺点是什么 - 或者我是否完全看错了?这些如何集成到典型的持续集成设置中?有什么陷阱?

相关:很多问题,例如12345

4 个答案:

答案 0 :(得分:4)

我们已经使用Coco 2年了,取代了我们以前使用过的Antler。对于典型的大数据查询(我们的应用程序),我们的经验就是这样。警告:我们依赖于完整的Utf-8处理,解析器是用C ++实现的。这些数字适用于具有约200个EBNF制作的语言。

  • Antler:为生成的解析器/词法分析器提供260个usecs / query和108 MEGABYTE内存占用
  • Coco:220个usecs / query和70 KBYTE内存占用解析器/扫描器

最初,Coco的启动时间为1.2毫秒,并为映射Utf-8生成了几个60 KBYTE表。我们对Coco进行了许多本地增强,例如消除大表,消除了1.2毫秒的启动时间,大大增强了内部文档(以及生成的代码中的文档)。

与Antlr相比,我们的(开源)Coco版本占用空间很小,速度非常快,没有启动延迟,只是......有效。它没有Antler的优秀用户界面,但是一旦我们开始使用Coco,它们从未进入我们的脑海。

答案 1 :(得分:3)

ANTLR是LL(*),它与PEG一样强大,但通常效率更高,更灵活。 LL(*)退化为LL(k),k> 1,不需要任意前瞻。

答案 2 :(得分:2)

如果您只是将数据合并到一个复杂的模板中,请考虑Terence Parr的StringTemplate engine。他是ANTLR背后的男人。 StringTemplate可能比完整的解析器生成器更适合和更容易使用。它是一个功能丰富的模板引擎。

downloads中有一个C#端口。

答案 3 :(得分:2)

基本上,coco / r生成递归下降解析器并且仅支持LL(1)语法,而ANTLR使用反向跟踪(以及其他技术),这允许它处理更复杂的语法。 coco / r解析器更轻量级,更易于理解和部署,但有时很难将语法转换为coco / r理解的形式,因为它具有一个前瞻性约束 - 对于许多常见的编程语言语法(例如C ++, SQL),根本不可能。