





定价:49元
印次:1-1
ISBN:9787302426103
出版日期:2016.06.01
印刷日期:2016.05.18
图书责编:龙启铭
图书分类:教材
“编译原理”课程是一门理论性与实践性非常强的课程,应遵循从具体到抽象的认知规律。本书以一个开源的C编译器(UCC)为案例,在源代码分析的过程中,展开对编译原理相关知识的学习和讨论。全书共分6章: 第1章介绍文法和递归等知识点,并采用结合C语言的方式来讨论汇编代码;第2章讨论UCC编译器的词法分析、内存管理、符号表管理和类型系统等基本模块;第3章介绍UCC编译器的语法分析,采用的是手工打造分析器的技术路线;第4章介绍语义检查,通过本章的学习,有助于C程序员站在编译器的角度来深入理解C语言的语义规则;第5章分析UCC编译器的中间代码生成及优化;第6章介绍如何生成32位的x86汇编代码。 本书不仅是很好的编译原理和编译器设计教材,也可作为读者深入学习C程序设计的参考用书。
邹昌伟,1981年生,男,2003年毕业于辽宁工程技术大学,2006毕业于中科院沈阳计算所,计算机应用专业,获工学硕士学位。现为福建师范大学软件学院教师,长期承担编译原理和操作系统等课程的教学,研究领域为软件逆向分析和嵌入式系统,参与过雷达物位仪、CIJ喷码机、WINCE NandFlash的数据恢复和自来水纯化设备等项目的研发。
01我是在大三的时候开始学习“编译原理”课程的,授课的是陈意云老师,使用的是陈老师自己编写的教材。这本教材理论知识非常丰富,每章后面有不少颇有难度的练习题。非常感谢陈老师讲的这门课程,我有限的编译原理理论知识基本上是从这门课程学的。但学完之后,总有一个感觉,即自己掌握的知识比较分散,不能完整地把它串起来。与国内其他高校差不多,这门课的大作业是一个玩具语言的编译器实现,之所以说是玩具语言,是因为语言本身很简单,缺乏很多实用的特性,无法作为实际的编程语言使用。当时就有一个模糊的想法,想自己写一个实用编程语言的编译器,这个编译器不能复杂,得适合在一个学期的时间中学习和掌握,但一直停留在想法这个阶段,也没想好实现哪个语言。 我在后来的学习和工作中一直和系统编程打交道,使用的基本上是C语言。对C语言的一些精巧特性也越来越熟悉,比如说“为什么函数标准的入栈顺序是从右到左”和“setjmp/longjmp是如何实现的”等。C语言的使用非常广泛,而且以精练著称,如果能写一个C编译器就很好了。开源的GCC非常复杂,基本上不适合学习。其间我完整地阅读了LCC的源代码,LCC功能完整,代码精简。但是LCC代码本身比较难懂,结构不清晰。我在这个时候就明确下来写一个适合学习的C编译器,这个编译器得有如下几个要点: (1) 用C语言来实现C编译器,一是因为我最熟悉的是C语言,二是能实现自举(bootstrap),这是对编译器很好的测试。 (2) 代码简洁易懂,结构清晰,适合学生学习和掌握。 (3) 实现ANSI C89标准。 (4) 一定要开源,因为我在学习和工作中受到开源社区的帮助很大。 (...
1.1语言、文法与递归1
1.2一个较复杂的文法4
1.3由文法到分析器7
1.3.1表达式7
1.3.2声明15
1.3.3语句21
1.4UCC编译器预览28
1.4.1UCC的使用28
1.4.2UCC驱动器31
1.5结合C语言来学汇编35
1.5.1汇编语言简介35
1.5.2整数运算42
1.5.3浮点数的算术运算48
1.5.4浮点数之间的比较操作51
1.5.5指针、数组和结构体53
1.6C语言的变量名、数组名和函数名55
1.7C语言的变参函数58
1.8本章习题65
第2章UCC编译器的基本模块/66
2.1从Makefile走起66
2.2词法分析69
2.3UCC编译器的内存管理74
2.4C语言的类型系统81
2.5UCC编译器的符号表管理91
2.6本章习题100
第3章语法分析/101
3.1C语言的表达式101〖1〗C编译器剖析目录[3]〖3〗3.1.1条件表达式和二元表达式101
3.1.2一元表达式、后缀表达式和基本表达式111
3.2C语言的语句122
3.3C语言的外部声明131
3.3.1声明和函数定义131
3.3.2与声明有关的几个非终结符142
3.3.3声明说明符和声明符147
3.4本章习题166
第4章语义检查/167
4.1语义检查简介167
4.2表达式的语义检查168
4.2.1表达式的语义检查简介168
4.2.2数组索引的语义检查173
4.2.3基本表达式的语义检查179
4.2.4函数调用的语义检查184 ... 查看详情
(1)用C语言实现C编译器。
(2)代码简洁易懂,结构清晰。
(3)遵循ANSI C89标准。
(4)本书以一个开源的C编译器(UCC)为案例,在源代码分析的过程中,展开对编译原理相关知识的学习和讨论。
(5)很好的编译原理和编译器设计教材,也是深入学习C程序设计的参考用书。
查看详情