本书将为极为简单的脚本语言开发语言处理器。由于对象是脚本语言,所以如果按上一节的分类方式,本书开发的语言处理器属于解释器。不过,该解释器内部将采用编译器来提高性能,因此本书也将涉及开发编译器的一些基本知识。本书不包含代码优化之类的技巧,因此不会介绍诸如编译器在将程序转换为机器语言时,如何提高机器语言的执行效率等内容。 F 脚本语言这个词的含义有些模糊不是吗? C 嗯,这的确是一个无法回避的问题。 H 要回答脚本语言是怎样的程序设计语言,实在是不容易。 C 总之,我们并不是要设计C语言那样的语言。不过,这类主题的书常会选择C语言的某些简化版本作为研究对象呢。 F 本书会包含通过正则表达式实现模式匹配的语法功能吗? C 我不打算介绍这些。 F 本书中出现的语言,会像Perl那样,同一种逻辑可以通过多种方式表达吗? H 熟悉之后,只需数行就能写出复杂的功能,这也是脚本语言的一个特点了。 C 你们当然可以增加语法的种类,不过这就留作课后作业吧。毕竟不同语法的本质是相同的。 H 也就是说不会介绍这部分内容了吗? C 是的。这只会平白增加篇幅而已。 F 那本书使用的语言还能称为脚本语言吗? C 想问的是这个啊?这种语言支持动态数据类型,无需事先声明变量,且通过解释器运行。其实本书的主题应该是以现代的手法来设计现代语言。 A 这样一来,这本书会变成什么样子呢?或许会有人说书的标题与内容不符了吧。 本书将设计的语言命名为Stone语言。实现该语言的开发语言是Java语言。因此,Stone语言也是一种运行于Java虚拟机的语言。 H 老师,还是说明一下“实现”这个词的含义比较好吧? C 这里的实现(implementation)指的是通过程序来实现某种功能。把它理解为书写程序也可以。 F 说起来,Stone语言的命名灵感是来自Perl语言和Ruby语言对吧? C 没错。它称不上是宝石,顶多算是小石子,因此取名为Stone。 Stone语言运行于Java虚拟机,并不轻巧。之所以选择Java语言,是为了以面向对象的方式设计语言处理器。语言处理器的复杂度适中,常用于实验或论证各种语言范型的性能。 例如,Haskell语言或OCaml语言之类的函数型语言,非常适合开发语言处理器。面向对象语言也是如此。本书在讲解时,默认读者十分了解面向对象语言,尤其是Java语言的基本编程方式。 A 如果是要使用面向对象语言,Ruby语言或Scala语言这些不可以吗? C 这个嘛……它们可能会赶跑一部分读者,编辑或许会否决这个提议的吧。 H 那用C语言和yacc来实现的话如何?老师您觉得这样可以吗? C 嗯,C语言本身没什么不好,但要实现稍微复杂些的语言处理器时,就不得不使用各种不同的编程技术。最终写出的C语言程序会具有面向对象风格,那还不如从最开始就使用面向对象语言。 S 我倒是觉得以函数式语言风格来写C语言代码也挺好。 H 如果要写一本设计Tiny C编译器的书,C语言会是个不错的选择吧。 C 此外,这里不会使用yacc相关的外部工具。我打算用其他方法来设计。