本书特色内容: \r\n 1.取材合适:以提高学生研究开发能力为目标,不仅讲述编译有关的形式语言和语法分析理论,更注重介绍设计开发编译程序的过程、方法和技术。 2. 技术领先:本教材所有编译实例程序,都采用了编者研究开发的程序到SI-NS图自动变换技术,这项技术在国际上处于领先地位。 \r\n\r\n3.师生互动:要求学生在教师的指导下,用定义的语言编写程序,然后用自己开发的编译程序对它编译。 4.编排合理:教材和课程设计贯穿软件工程提倡的自顶向下、逐步扩充、逐步求精的结构化程序设计思想和SI-NS图软件开发方法。\r\n\r\n\r\n\r\n\r\n\r\n本书在讲述与编译相关的文法和形式语言基本理论的基础上,以PL/0语言为例,系统地介绍了编译程序从语法定义、词法分析、语法分析、出错处理、代码生成到解释执行的全过程。并详细讲解了作者研究开发的SLNS图表示方法和从程序到SLNS图的自动转换技术。本书有很强的实用性,学生在学完本书后可具备独立设计和完整地开发一个编译程序的能力。本书每章后配有习题,可供学生巩固 \r\n\r\n练习。 本书适合作为普通高等院校计算机专业学生的教材,也可供其他自学人员和编程技术人员参考。 \r\n
\r\n
第1章 引论 \r\n\r\n 1. 1 什么是编译程序 \r\n\r\n 1. 2 编译过程概述 \r\n\r\n 1. 3 编译程序的结构 \r\n\r\n 1. 4 为什么要学习编译技术 \r\n\r\n 1. 5 习题 \r\n\r\n 第2章 形式语言基本知识 \r\n\r\n 2. 1 形式语言的特征 \r\n\r\n 2. 2 一个形式语言例子 \r\n\r\n 2. 3 形式语言的归纳定义 \r\n\r\n 2. 4 文法的分类 \r\n\r\n 2. 4. 1 0型文法 \r\n\r\n 2. 4. 2 1型文法(上下文有关文法) \r\n\r\n 2. 4. 3 2型文法(上下文无关文法) \r\n\r\n 2. 4. 4 3型文法(正则文法) \r\n\r\n 2. 4. 5 文法的类型决定了语言的类型 \r\n\r\n 2. 5 语法树与文法的二义性 \r\n\r\n 2. 5. 1 什么是文法的二义性 \r\n\r\n 2. 5. 2 修改二义性文法 \r\n\r\n 2. 5. 3 计算机语言文法中的二义性问题 \r\n\r\n 2. 5. 4 EBNF描述符 \r\n\r\n 2. 6 习题 \r\n\r\n 第3章 语句分析 \r\n\r\n 3. 1 语句分析概述 \r\n\r\n 3. 2 自顶向下分析 \r\n\r\n 3. 3 自底向上分析 \r\n\r\n 3. 4 简单辨认算法 \r\n\r\n 3. 5 对文法的限制规则1 \r\n\r\n 3. 6 对文法的限制规则2 \r\n\r\n 3. 7 如何构造等价的LL(1)文法 \r\n\r\n 3. 8 习题 \r\n\r\n 第4章 语法图 \r\n\r\n 4. 1 从EBNF表示式到语法图的转换 \r\n\r\n 4. 2 语法图转换实例 \r\n\r\n 4. 3 从语法图判别两条限制规则 \r\n\r\n 4. 4 习题 \r\n\r\n 第5章 给定语法的语法分析程序构造 \r\n\r\n 5. 1 给定语法的语法分析程序的主程序 \r\n\r\n 5. 2 从语法图到语法分析程序的转换法则 \r\n\r\n 5. 3 给定语法的语法分析程序构造实例 \r\n\r\n 5. 3. 1 语法分析程序构造实例 \r\n\r\n 5. 3. 2 SI-NS图形式的语法分析程序构造实例 \r\n\r\n 5. 3. 3 语法分析程序的编译和执行示例 \r\n\r\n 5. 4 习题 \r\n\r\n 第6章 程序设计语言PL/0 \r\n\r\n 6. 1 PL/0语言概述 \r\n\r\n 6. 1. 1 PL/0语言的功能 \r\n\r\n 6. 1. 2 一个PL/0程序实例 \r\n\r\n 6. 2 EBNF定义的PL/0语法 \r\n\r\n 6. 3 PL/0语法图 \r\n\r\n 6. 4 判别是否符合两条限制规则 \r\n\r\n 6. 5 习题 \r\n\r\n 第7章 PL/0语言的词法分析程序构造 \r\n\r\n 7. 1 词法分析程序的任务 \r\n\r\n 7. 2 词法分析程序的设计 \r\n\r\n 7. 2. 1 过程getch \r\n\r\n 7. 2. 2 处理保留字和标识符 \r\n\r\n 7. 2. 3 处理常数 \r\n\r\n 7. 2. 4 处理组合字符和单个字符 \r\n\r\n 7. 3 习题 \r\n\r\n 第8章 PL/0语言的语法分析程序构造 \r\n\r\n 8. 1 由语法图到过程调用相关图 \r\n\r\n 8. 2 从相关图到程序的总体结构 \r\n\r\n 8. 3 写出每一个语法分析子程序 \r\n\r\n 8. 4 语法分析程序的扩充 \r\n\r\n 8. 4. 1 建立符号表与主程序的扩充 \r\n\r\n 8. 4. 2 建立error子程序过程和出错信息表 \r\n\r\n 8. 4. 3 标识符的处理与程序的扩充 \r\n\r\n 8. 5 PL/0语法分析程序及其执行 \r\n\r\n 8. 5. 1 PL/0语法分析文本程序 \r\n\r\n 8. 5. 2 PL/0语法分析程序的SLNS图 \r\n\r\n 8. 5. 3 PL/0语法分析程序的执行 \r\n\r\n 8. 6 习题 \r\n\r\n 第9章 语法出错处理 \r\n\r\n 9. 1 语法出错处理概论 \r\n\r\n 9. 2 常见错误的分析处理 \r\n\r\n 9. 2. 1 修改语法分析程序 \r\n\r\n 9. 2. 2 修改语法定义 \r\n\r\n 9. 3 不可预料错误的处理 \r\n\r\n 9. 3. 1 采取的策略和相应的措施 \r\n\r\n 9. 3. 2 出错处理分析举例 \r\n\r\n 9. 4 PL/o语法出错处理程序及其执行 \r\n\r\n 9. 4. 1 具有出错处理的PL/0语法分析程序program5 \r\n\r\n 9. 4. 2 具有出错处理的PL/0语法分析程序SI-NS图 \r\n\r\n 9. 4. 3 语法出错处理程序执行实例 \r\n\r\n 9. 5 习题 \r\n\r\n 第10章 目标计算机及其解释程序 \r\n\r\n 10. 1 目标计算机的组织结构和指令格式 \r\n\r\n 10. 1. 1 目标计算机的组织结构 \r\n\r\n 10. 1. 2 目标计算机的指令和指令格式 \r\n\r\n 10. 2 数据存储器的动态存储管理 \r\n\r\n 10. 2. 1 数据动态存储分析 \r\n\r\n 10. 2. 2 程序静态级别和动态存储分配 \r\n\r\n 10. 2. 3 数据动态存储采取的技术措施 \r\n\r\n 12. 4. 2 在M2机器上进行从M1到M2的移植 \r\n\r\n 12. 4. 3 用虚拟机H进行从M1到M2的移植 \r\n\r\n 12. 5 习题 \r\n\r\n 第13章 课程设计 \r\n\r\n 13. 1 PL/x语法定义 \r\n\r\n 13. 2 统一符号 \r\n\r\n 13. 3 课程设计要求 \r\n\r\n 13. 3. 1 阶段一要求 \r\n\r\n 13. 3. 2 阶段一检查 \r\n\r\n 13. 3. 3 阶段二要求 \r\n\r\n 13. 3. 4 阶段二检查 \r\n\r\n 附录 \r\n\r\n 附录A PL/0编译程序SI-NS图 \r\n\r\n 附录B 有关SI-NS图 \r\n\r\n B. 1 读起来比程序容易理解百倍的SI-NS图 \r\n\r\n B. 2 程序图形化表示方法 \r\n\r\n B. 2. 1 现有文本式语言程序的弊端 \r\n\r\n B. 2. 2 '程序图形化表示'是世界上都在致力研究的一项技术 \r\n\r\n B. 2. 3 作者提出了具有优势的SI-NS图 \r\n\r\n B. 2. 4 比较PAD. CSD. NS与SI-NS图 \r\n\r\n B. 2. 5 SLNS图技术在长期的软件开发和教学实践中得到了验证 \r\n\r\n 附录C 表格控制的通用语法分析程序构造 \r\n\r\n C. 1 语法图表示成表格数据结构 \r\n\r\n C. 2 表格控制的语法分析程序 \r\n\r\n C. 3 通用语法分析程序的实施步骤 \r\n\r\n C. 3. 1 用EBNF定义EBNF语法 \r\n\r\n C. 3. 2 为EBNF语法设计一个语法分析程序 \r\n\r\n C. 3. 3 将语法分析程序扩充为能产生语法分析表格的翻译程序 \r\n\r\n C. 3. 4 将翻译程序与前一节的表格控制语法分析程序组合在一起 \r\n\r\n C. 4 习题 \r\n\r\n 附录D 并行多进程语言的扩充 \r\n\r\n 附录E 集合与符号串 \r\n\r\n E. 1 集合 \r\n\r\n E. 1. 1 集合的基本概念 \r\n\r\n E. 1. 2 集合间的关系 \r\n\r\n E. 1. 3 集合的运算 \r\n\r\n E. 1. 4 幂集 \r\n\r\n E. 1. 5 笛卡儿乘积 \r\n\r\n E. 2 符号串 \r\n\r\n E. 3 习题 \r\n\r\n 附录F PASCAL语法图 \r\n\r\n 参考文献 \r\n
\r\n
本书以PASCAL语言创始人, 世界著名计算机科学家N. Wirth教授的德文版《编译设计入门》为蓝本, 总结了作者多年"编译"课程教学实践和软件开发的经验, 在原有讲义和讲稿基础上重新编写而成. 教材起点高. 内容新而精, 并注重应用实践和学生实际软件开发能力的培养.
本书可作为计算机专业本科生的"编译原理"课程教材或教学参考书. 同时, 如果省略书中内容相对独立的第12章. 附录C和附录D后, 并不影响整体, 也可以用作成人高校. 大专班学生以及课时较少学校的"编译原理"课程教材.
由于设计和开发编译程序的基本原理和技术也广泛应用于其他软件的设计和开发, 因此本书也是从事系统软件和工具软件开发研究者的参考书, 还可以作为初步学习过高级程序设计语言PASCAL或C语言后, 继续深化学习"程序设计"者的参考书.
本书前5章讲述与编译相关的文法和形式语言基本理论. 第6章至第11章以语言PL/O为例, 系统介绍了一个编译程序从语法定义. 司法分析. 语法分析. 出错处理. 代码生成到解释执行的全过程. 它不仅可以使学生了解什么是编译, 更重要的是在学完了约60学时的课程内容后, 学生完全有能力懂得怎样从语言的定义出发, 系统地去开发一个语言的编译程序.
第12章通过"T形图"的描述, 可使学生对编译和解释程序等概念有更深刻的认识, 它还直观. 清晰地表达了编译程序特有的开发和移植技术.
第13章包含的一个精心编写的课程设计, 既可以在学完前12章内容后集中时间进行, 也可以从第6章开始结合每一章的练习分散进行. 它从给定语言的语法定义开始, 先要求作语法规则检查, 然后要求系统地写出词法分析. 语法分析. 出错处理. 代码生成和解释程序, 可以分两个阶段实施检查. 最终要求学生用所给的语言编一个程序(如输出1-100之间的所有素数), 用自己开发的编译程序对它编译, 在编译过程中要求能连续指出语法错误不中断, 能生成代码程序, 能解释执行代码程序, 最后输出正确结果. 通过课程设计不仅可以系统地巩固学生所学知识, 也可以考核学生是否真正具备了独立设计和完整地开发一个编译程序的能力.
"程序图形化表达"是国际上都在致力研究, 旨在提高程序可读. 可理解性的一项极具潜力和应用前景的技术, 得到了发达国家政府和有关部门的大力资助. 作者研究发展的SI-NS图表示方法和从程序到SI-NS图自动转换技术, 要优于日本的PAD. 美国的CSD以及国内正在广泛使用的NS图技术, 并且在长期的软件开发和教学实践中得到了验证. 它使教材的全部实例程序都以文本程序和SI-NS程序框图两种形式出现, 使学生不仅更容易读懂. 理解编译程序的算法和设计思想, 甚至可以在二维. 结构清晰的SI-NS程序框图上直接执行和验证程序逻辑. 这在一维的. 整体结构差的文本程序里是很难做到的. 附录A提供了PL/O语言编译程序program6的SI-NS程序框图. 对SI-NS图不了解的读者可以阅读附录B的有关文章.
教材内容和课程设计贯穿软件工程提倡的"自顶向下". "逐步扩充". "逐步求精"的结构化程序设计思想. 学生通过教学实践掌握这些方法和技术后, 为今后走上社会去承担有一定规模和复杂度的实际课题奠定了一定的软件开发基础.
对于部分没有学过"离散数学"或对有关概念已经淡忘了的读者, 建议阅读附录E. 这里解释了如"符号". "符号串". "集合". "集合的表示". "集合的闭包"等与形式语言有关的一些重要概念.
教材涉及的全部实例程序经过Turbo PASCAL 7. 0的编译都可以上机执行. 另外清华大学出版社可以向读者提供电子版的所有实例程序.
感谢浙江大学城市学院冯树椿和曾抗生两位教授的热心帮助, 他们审阅了全部书稿并提出了非常宝贵的意见. 还要感谢清华大学出版社和本套教材的编审委员会, 使得本书得以顺利出版.
由于作者水平有限, 书中难免存在缺点错误, 敬请广大读者批评指正.
作 者
2003年7月