1.1 解析技术

解析技术不再是一种神秘的艺术,自从上世纪70年代,Aho, Ullman, Knuth以及其他科学家为解析技术奠定的坚实的理论基础之后。解析技术也不是一门数学学科;一个解析器的内部工作过程可以是可视的、易理解的以及可修改的,用以适应应用程序,不再仅仅是简单的字符串剪切粘贴。

一位数学家的世界观和一位计算机科学家的世界观差距是相当巨大的。在数学家眼中所有的结构都是静态的:它们一直是静态的并且将永远都是静态的;只不过我们还没有发现全部的结构而已。而计算机科学家则倾向(并且很着迷)不断的创造、组合、分离和破坏结构:时间检验真理。在数学家手里,Peano公理创建整数时没有提及到时间,但是如果一个计算机科学家使用这个公理来实现整数加法,那么他将发现这在计算机中是一个非常缓慢的执行过程,所以计算机科学家就会去寻找更加有效率的方法。在这方面,计算机科学家和物理学家和化学家拥有更多共同点;和他们一样,计算机科学家必须有数学的几个分支的坚实理论基础,但同时计算机科学家也很希望(而且经常迫使)数学家将一些理论的主导权交给他们,这点也和物理学家和化学家一样。没有严谨的数学理论的支持,所有的科学都将不复存在,但就像一栋大楼一样,并非其中的居民都需要了解这栋大楼的框架和梁柱。为各领域的专家们分化一些特殊的知识点的细节,可以减少复杂的脑力劳动,这是计算机科学家们正在做的事情。

本书是为这样的人准备的:需要做解析工作的人:解析器作者、语言学家、数据库接口作者、想要测试他们各自研究对象的语法的地理学家或音乐家、等等。我们需要读者有良好的可视化能力,一些编程经验以及跟进不太繁琐的例子的兴趣和耐心;了解一只袋鼠最好的方式莫过于亲眼去看它是如何跳跃的了。我们对流行的解析技术张开怀抱,同时我们也不会排斥一些奇怪的技术而只关注它们的理论知识:这些技术往往能为读者打开一扇新的大门。