编译原理实用教程(第2版)前 言
1982年2月本人毕业于上海交通大学,2010年1月退休,在上海第二工业大学工作了近三十年。在此期间,主要从事“编译程序”和“算法”这两门学科的教学和科研。2005年4月清华大学出版社出版了由本人编著的《编译原理实用教程》,该书至今仍用于我校和国内其他普通高等院校“编译原理”课程的教学。该书从脱稿至今已近十年,先后共印刷了1万册左右。虽然印刷的数量不大,但是90%是外校师生所使用的,说明书的质量得到了同行的认可。
在第2版中,书的章节基本没有变化,仅删除了原书中的5.10.3小节(5.10.3 LR分析控制程序的修改),增加了6.11节(6.11 自上而下分析制导翻译概述)。做出上述调整,主要考虑用于词法分析的LR分析控制程序修改不大,一是增加了token数组,用于记录构成单词的字符。在执行移进操作时,除完成规定动作外,还应将当前字符移入token数组;二是把“出错”理解为找到单词尾。对于熟悉LR分析控制程序工作原理的读者,在理解上不会有困难。在后继章节中,对于用于词法分析的LR分析控制程序有详细介绍,没有必要单独列出。为了完整,在6.11节简略讨论了自上而下分析制导翻译技术。原书中的附录A和附录B合并为新书的附录A。原书的附录C删除,改为下载文件。原书的附录D改为新书的附录B.
在第2版中,各章节的知识点没有变化,增加了算法伪代码描述,对原书各章节中的所有源程序都做了比较大的修改。在原书中,算法除文字简单描述外,基本用源程序表达,这样对算法的描述和理解有可能受到语言细节的束缚。在本书中,增加了算法伪代码描述,这样可避免语言的限制,更容易表达算法的基本思想。考虑有些读者编程经验不足,源程序仍保留了下来,但在编排上做了改进,使其更容易阅读和理解。在本书中出现的源程序,除附录B中两个程序外,都可以从清华大学出版社指定网站下载。另外,由本人编写的“编译原理”课程电子教案和试卷集锦可以从“中国高等学校教学资源网”下载。
在写第1版时,主要考虑程序的正确性。在再版中,力求使程序写得更简洁、更易理解,并且注意前后统一。例如,本书介绍了三个词法分析器,它们是Lex1、Lex2和 Lex3。三个词法分析器都是由预处理程序和扫描器(单词识别程序)两个部分构成。预处理程序是同一个,差异在于如何实现扫描器。Lex1是利用状态转换图来实现的,Lex2是利用确定有限自动机来实现的,而Lex3是利用LR分析法来实现的。扫描器的程序结构大同小异,读者只需关注单词识别时所使用的技术和方法。
借此机会,向清华大学出版社表示感谢。是清华大学出版社向本人提供了机会,使我能够在退休之后,继续为高等学校计算机教育尽自己微薄之力。继2011年6月的“算法设计与分析”出版之后,这是本人主编的第2本教科书。
上海第二工业大学计算机与信息学院教师王娜参与了本书各章的编写(包括习题答案),上海第二工业大学成人与继续教育学院教师杨坤参与了各章源程序的编写。
温敬和
2012年秋