1.7 总结和注记
Summary and Concluding Remarks
在这一章里,我们介绍了有关程序设计语言的设计和实现的学习问题,分析了为什么存在着这么多的语言,什么使得语言成功或不成功,如何将它们分类以便于学习,以及读者通过这一学习可能得到哪些收获。我们注意到,语言的设计和语言的实现具有内在的紧密联系。很明显,一个实现必须符合语言的规定;而与此同时,作为语言的设计者也必须考虑各种特征实现的难易程度问题,以及采用了这些特征的程序会得到什么样的性能。
语言实现通常可以划分为基于解释的实现和基于编译的实现。但我们也注意到,这两种方式之间的区分是很模糊的,大部分实现都同时包含这两方面的东西。作为一般性的规则,我们说一个语言是编译的,如果在程序执行之前有一个翻译阶段,其中(1)完全地分析了程序的结构(语法)和意义(语义),(2)生成出了一个形式上完全不同的等价程序。本书中有关实现的大部分材料都与编译有关。
编译器通常被构造成一系列的阶段,前面几个阶段(扫描、语法分析和语义分析)的作用是分析源程序。把这些阶段集中到一起就称为编译器的前端。后面几个阶段(中间代码生成、代码改进和目标代码生成)称为编译器的后端。它们的作用是构造目标程序,可能是一个很快的目标程序,但是它的语义一定与源程序相同。
第3章、第6章、第7章、第8章和第9章形成了本书的核心,它们覆盖了语言设计中的各种基本问题,包括了程序员的观点及语言实现者的观点。为支持有关实现的讨论,第2章和第4章以比本章更细节的方式描述了编译器的前端,第5章提供的是有关汇编层体系结构的一个概览,第14章和第15章讨论了编译器的后端,包括汇编器和连接器。有关其他程序设计语言范型的进一步内容在第10章到第13章。附录A列出了本书中提到的各种主要程序设计语言,还有其族系关系图和参考文献;附录B是全书中“设计和实现”旁白的列表,附录C的内容是一个编号示例表。






