C编译器剖析
学习用C语言设计自己的编译器。

作者:邹昌伟

丛书名:高等学校计算机专业系列教材

定价: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) 一定要开源,因为我在学习和工作中受到开源社区的帮助很大。 (...

暂无课件

样章下载

暂无网络资源

扫描二维码
下载APP了解更多

目录
荐语
查看详情 查看详情
第1章基础知识/1

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程序设计的参考用书。

 

查看详情