描述
包 装: 平塑是否套装: 否国际标准书号ISBN: 9787121471964
第1章 工具准备和系统设置………………………………………………………………………………..2
1.1 GNU C/C++编译工具的选择……………………………………………………………………….2
1.1.1 MinGW ………………………………………………………………………………………….. 2
1.1.2 DJGPP ……………………………………………………………………………………………. 2
1.1.3 Cygwin …………………………………………………………………………………………… 2
1.2 解析工具构造器 ………………………………………………………………………………………… 3
1.3 工具的安装 ……………………………………………………………………………………………….. 3
1.4 目标编译器运行前的系统设置 …………………………………………………………………… 4
第2章 预处理器的设计………………………………………………………………………………………5
2.1 预处理器(C/C++版) ………………………………………………………………………………. 6
2.1.1 项目文件及其设置…………………………………………………………………………..6
2.1.2 任务和算法…………………………………………………………………………………….. 7
2.2 源程序预处理器(flex 版) ……………………………………………………………………… 11
2.2.1 正规表达式简介…………………………………………………………………………….12
2.2.2 预处理器设计实战…………………………………………………………………………14
2.3 本章小结 …………………………………………………………………………………………………. 20
第3章 编译器设计初步实践………………………………………………………………………………21
3.1 设计简介 …………………………………………………………………………………………………. 21
3.2 一个简单的 C 语言关键字识别器………………………………………………………………22
3.2.1 工程项目文件………………………………………………………………………………..22 3.2.2 项目运行主程序…………………………………………………………………………….23
小型编译器设计实践
3.2.3 词法解析自动机部分……………………………………………………………………..23
3.2.4 词法解析 C 语言部分 ……………………………………………………………………. 24
3.3 编译器雏形(flex 和 bison 的使用) ………………………………………………………… 25
3.3.1 问题的提出和任务…………………………………………………………………………25
3.3.2 工程文件 makefile………………………………………………………………………….26
3.3.3 词法解析规则部分…………………………………………………………………………26
3.3.4 词法解析的启动…………………………………………………………………………….27
3.3.5 语法解析器文本及其基本格式 ………………………………………………………. 27
3.3.6 语法解析器文本各区域的内容 ………………………………………………………. 28
3.4 语法解析和词法解析之间的数值传递 ………………………………………………………. 30
3.4.1 语法解析器文本的定义部分 ………………………………………………………….. 31
3.4.2 语法解析器识别规则部分 ……………………………………………………………… 32
3.4.3 词法解析器解析规则部分 ……………………………………………………………… 33
3.5 编译树的构建 ………………………………………………………………………………………….. 34
3.5.1 编译树中的数据类型和结构 ………………………………………………………….. 34
3.5.2 节点生成和处理函数……………………………………………………………………..35
3.5.3 语法解析器文本的定义部分 ………………………………………………………….. 36
3.5.4 语法解析器文本的语法解析识别规则部分 …………………………………….. 36
3.6 源程序语句代码的截取和嵌入 …………………………………………………………………. 38
3.6.1 缓冲区与相关函数…………………………………………………………………………38
3.6.2 截取源程序代码并送入缓冲区中 …………………………………………………… 38
3.6.3 读取源代码缓冲内容……………………………………………………………………..39
3.6.4 增加新定义并扩充 node 数据结构 …………………………………………………. 39
3.6.5 支持函数和程序…………………………………………………………………………….40
3.6.6 在源程序片段中嵌入节点 ……………………………………………………………… 41
3.7 编译树的显示 ………………………………………………………………………………………….. 41
3.7.1 用于显示编译树的函数 …………………………………………………………………. 42 3.7.2 编译树的显示操作…………………………………………………………………………42
第4章 编译器设计实战…………………………………………………………………………………….44 4.1 对 C 语言的词法解析………………………………………………………………………………..44
VIII
4.1.1 词法解析宏定义部分……………………………………………………………………..44
4.1.2 各种常数解析识别…………………………………………………………………………45
4.1.3 C 语言关键字和标识符解析 ………………………………………………………….. 46
4.1.4 C 语言各种操作运算符识别 ………………………………………………………….. 46
4.1.5 关于字符和字符串常数的处理 ………………………………………………………. 47
4.2 对 C 语言的语法解析……………………………………………………………………………….. 47
4.2.1 描述特征的 attrib 完整结构 …………………………………………………………… 48
4.2.2 各类 node 数据结构的完善 ……………………………………………………………. 48
4.2.3 语法解析定义部分的完善 ……………………………………………………………… 49
4.2.4 函数声明/定义的完善……………………………………………………………………. 51
4.2.5 运算语法和运算符优先确定 ………………………………………………………….. 52
4.2.6 变量定义语法规则的完善 ……………………………………………………………… 53
4.3 支持预处理等语句的语法解析 …………………………………………………………………. 56
4.3.1 用于预处理语句的新增变量 ………………………………………………………….. 56
4.3.2 用于预处理语句的新增解析状态 …………………………………………………… 57
4.3.3 用于预处理语句的解析 …………………………………………………………………. 57
4.3.4 用于预处理语句的节点和数据类型 ……………………………………………….. 58
4.4 支持结构化数据的语法解析 …………………………………………………………………….. 61
4.5 支持对 typedef 的语法解析 ………………………
评论
还没有评论。