了解有关解析的更多信息

Jam*_*son 9 dsl parsing

自1999年以来,我一直在编程工作和乐趣.我想学习新东西,最近我一直专注于解析,因为我的工作很大一部分是阅读,整合和分析数据.如果开销足够低,我认为我可以用非常简单的特定于域的语言表达大量重复性任务.我对这个问题有几个问题.

  1. 我当前的大多数解析代码都没有定义正式的语法.我通常用我选择的语言一起破解一些东西,因为这很简单,我知道如何做,我可以非常快地编写代码.对于与我合作的其他人来说,维护也很容易.与大多数程序员用来编写解析器的黑客相比,定义语法和生成真正的解析器(与ANTLRYACC一样)解析事物的优点和缺点是什么?
  2. 在C++,Perl和Ruby中编写基于语法的解析器的最佳解析器生成工具是什么?我已经看过ANTLR并且没有发现将ANTLRv3与C++目标一起使用的情况,但其他方面看起来很有趣.我应该阅读的其他与ANTLR类似的工具是什么?
  3. 有兴趣学习更多解析的规范书籍和文章是什么?不幸的是,编译器课程不是我教育的一部分,因此非常欢迎基础材料.我听过关于龙书的好消息,但还有什么呢?

Ale*_*lli 4

1.,我想说主要优点是可维护性——对语言进行一点改变只是意味着对语法进行相应的小改变,而不是仔细地修改代码中可能有关系的各个点随着您想要的改变...数量级的生产力提高和错误风险的降低。

关于 2. 和 3.,除了您已经发现的内容之外,我无法提出太多建议(我主要使用 Python 和pyparsing,并且可以根据许多以 Python 为中心的解析框架的经验进行评论,但对于 C++,我主要使用旧的yaccbison无论如何,并且我那本粗糙的旧版《龙之书》——实际上不是最新版本——是我随身携带的全部内容……)。