描述
开 本: 16开纸 张: 胶版纸包 装: 平装是否套装: 否国际标准书号ISBN: 9787030251251丛书名: 普通高等教育“十一五”规划教材
编辑推荐
可作为计算机专业的本科教材,计算机软件工程人员
内容简介
《编译原理习题解析与上机指导》是《编译原理》(王磊、胡元义主编,科学出版社出版,第三版)一书配套的习题解析与上机指导教材,也可单独使用。《编译原理习题解析与上机指导》的习题解析部分对《编译原理》中的习题进行了深入、细致的分析和解答,为读者熟练掌握编译原理知识、抓住重点、突破难点提供了有益的帮助。《编译原理习题解析与上机指导》的上机指导部分包括由高级语言到中间语言、由汇编语言到机器语言的翻译,使编译的主要翻译阶段和环节都能微观且实时地显示出来,较好地解决了编译原理的理论与实践的衔接问题。此外,我们结合自己开发的8086/8088小汇编指令到机器代码的翻译成果,将8086/8088汇编指令如何翻译成机器代码的方法引入到《编译原理习题解析与上机指导》,有利于读者了解低级语言的翻译过程和实现方法。
目 录
目录
前言
**篇 习题解析
第1章 绪论 3
第2章 词法分析 5
第3章 语法分析 15
第4章 语义分析和中间代码生成 58
第5章 代码优化 67
第6章 目标程序运行时存储空间的组织 78
第7章 目标代码生成 85
第8章 符号表与错误处理 90
第二篇 上机指导
第9章 小型编译程序介绍 97
9.1 小型编译程序结构 97
9.2 小型编译程序关于高级语言的规定 98
9.3 小型编译程序关于单词的内部定义 99
9.4 小型编译程序的LR分析表 101
9.5 小型编译程序执行过程及实例分析 103
第10章 上机实验内容 109
10.1 实验一 编译程序的分析与验证 109
10.2 实验二 算术表达式的扩充 110
10.3 实验三 添加新的程序语句(一) 110
10.4 实验四 添加新的程序语句(二) 111
10.5 编译原理课程设计 112
第11章 高级语言到四元式的编译程序 114
第12章 8086/8088小汇编的设计与实现 141
12.1 汇编指令系统的分析 141
12.2 8086/8088小汇编的设计与实现 149
12.3 8086/8088小汇编实验 158
12.4 8086/8088小汇编程序 161
参考文献 219
附录1 8086/8088指令码汇总表 220
附录2 8086/8088指令编码空间表 225
前言
**篇 习题解析
第1章 绪论 3
第2章 词法分析 5
第3章 语法分析 15
第4章 语义分析和中间代码生成 58
第5章 代码优化 67
第6章 目标程序运行时存储空间的组织 78
第7章 目标代码生成 85
第8章 符号表与错误处理 90
第二篇 上机指导
第9章 小型编译程序介绍 97
9.1 小型编译程序结构 97
9.2 小型编译程序关于高级语言的规定 98
9.3 小型编译程序关于单词的内部定义 99
9.4 小型编译程序的LR分析表 101
9.5 小型编译程序执行过程及实例分析 103
第10章 上机实验内容 109
10.1 实验一 编译程序的分析与验证 109
10.2 实验二 算术表达式的扩充 110
10.3 实验三 添加新的程序语句(一) 110
10.4 实验四 添加新的程序语句(二) 111
10.5 编译原理课程设计 112
第11章 高级语言到四元式的编译程序 114
第12章 8086/8088小汇编的设计与实现 141
12.1 汇编指令系统的分析 141
12.2 8086/8088小汇编的设计与实现 149
12.3 8086/8088小汇编实验 158
12.4 8086/8088小汇编程序 161
参考文献 219
附录1 8086/8088指令码汇总表 220
附录2 8086/8088指令编码空间表 225
前 言
序言
媒体评论
评论
在线试读
**篇 习题解析
第1章 绪论
1.1 完成下列选择题:
(1)构造编译程序应掌握。
a. 源程序
b. 目标语言
c. 编译方法
d. 以上三项都是
(2)编译程序绝大多数时间花在上。
a. 出错处理
b. 词法分析
c. 目标代码生成
d.表格管理
(3)编译程序是对。
a. 汇编程序的翻译
b. 高级语言程序的解释执行
c. 机器语言的执行
d. 高级语言的翻译
【解答】 (1)d (2)d (3)d
1.2 计算机执行用高级语言编写的程序有哪些途径? 它们之间的主要区别是什么?
【解答】 计算机执行用高级语言编写的程序主要有两种途径:解释和编译。
在解释方式下,翻译程序事先并不采用将高级语言程序全部翻译成机器代码程序,然后执行这个机器代码程序的方法,而是每读入一条源程序的语句,就将其解释(翻译)成对应其功能的机器代码语句串并执行,而所翻译的机器代码语句串在该语句执行后并不保留,然后再读入下一条源程序语句,并解释执行。这种方法是按源程序中语句的动态执行顺序逐句解释(翻译)执行的,如果一语句处于一循环体中,则每次循环执行到该语句时,都要将其翻译成机器代码后再执行。
在编译方式下,高级语言程序的执行是分两步进行的:**步首先将高级语言程序全部翻译成机器代码程序,第二步才是执行这个机器代码程序。因此,编译对源程序的处理是先翻译,后执行。
从执行速度上看,编译型的高级语言比解释型的高级语言要快,但解释方式下的人机界面比编译型的好,便于程序调试。
这两种途径的主要区别在于:解释方式下不生成目标代码程序,而编译方式下生成目标代码程序。
1.3 请画出编译程序的总框图。如果你是一个编译程序的总设计师,设计编译程序时应当考虑哪些问题?
【解答】 编译程序总框图如图1-1所示。
图1-1 编译程序总框图
作为一个编译程序的总设计师,首先要深刻理解被编译的源语言其语法及语义;其次,要充分掌握目标指令的功能及特点,如果目标语言是机器指令,还要搞清楚机器的硬件结构以及操作系统的功能;第三,对编译的方法及使用的软件工具也必须准确化。总之,总设计师在设计编译程序时必须估量系统功能要求?硬件设备及软件工具等诸因素对编译程序构造的影响等。
第2章 词法分析
2.1 完成下列选择题:
(1)词法分析器的输出结果是。
a. 单词的种别编码
b. 单词在符号表中的位置
c. 单词的种别编码和自身值
d. 单词自身值
(2)正规式M1和M2等价是指。
a. M1和M2的状态数相等
b. M1和M2的有向边条数相等
c. M1和M2所识别的语言集相等
d. M1和M2状态数和有向边条数相等
(3)DFA M(图2-1)接受的字集为。
图2-1 习题2.1的DFA M
a. 以0开头的二进制数组成的集合
b. 以0结尾的二进制数组成的集合
c. 含奇数个0的二进制数组成的集合
d. 含偶数个0的二进制数组成的集合
【解答】 (1)c (2)c (3)d
2.2 什么是扫描器? 扫描器的功能是什么?
【解答】 扫描器就是词法分析器,它接受输入的源程序,对源程序进行词法分析并识别出一个个单词符号,其输出结果是单词符号,供语法分析器使用。通常把词法分析器作为一个子程序,每当词法分析器需要一个单词符号时就调用这个子程序。每次调用时,词法分析器就从输入串中识别出一个单词符号交给语法分析器。
2.3 设M=({x,y},{a,b},f,x,{y})为一非确定的有限自动机,其中f定义如下:
试构造相应的确定有限自动机M′。
图2-2 习题2.3的NFA M
【解答】 对照自动机的定义M=(S,Σ,f,So,Z),由f的定义可知f(x,a)、f(y,b)均为多值函数,因此M 是一非确定有限自动机。
先画出NFA M 相应的状态图,如图2-2所示。
用子集法构造状态转换矩阵,如表2-1所示。
表2-1 状态转换矩阵
将转换矩阵中的所有子集重新命名,形成表2-2所示的状态转换矩阵。
表2-2 状态转换矩阵
图2-3 习题2.3的DFA M′
即得到M′=({0,1,2},{a,b},f,0,{1,2}),其状态转换图如图2-3所示。
将图2-3所示的DFA M′*小化。首先,将M′的状态分成终态组{1,2}与非终态组{0}。其次,考察{1,2},由于所以不再将其划分,也即整个划分只有两组:{0}和{1,2}。令状态1代表{1,2},即把原来到达2的弧都导向1,并删除状态2。*后,得到如图2-4所示的化简了的DFA M′。
第1章 绪论
1.1 完成下列选择题:
(1)构造编译程序应掌握。
a. 源程序
b. 目标语言
c. 编译方法
d. 以上三项都是
(2)编译程序绝大多数时间花在上。
a. 出错处理
b. 词法分析
c. 目标代码生成
d.表格管理
(3)编译程序是对。
a. 汇编程序的翻译
b. 高级语言程序的解释执行
c. 机器语言的执行
d. 高级语言的翻译
【解答】 (1)d (2)d (3)d
1.2 计算机执行用高级语言编写的程序有哪些途径? 它们之间的主要区别是什么?
【解答】 计算机执行用高级语言编写的程序主要有两种途径:解释和编译。
在解释方式下,翻译程序事先并不采用将高级语言程序全部翻译成机器代码程序,然后执行这个机器代码程序的方法,而是每读入一条源程序的语句,就将其解释(翻译)成对应其功能的机器代码语句串并执行,而所翻译的机器代码语句串在该语句执行后并不保留,然后再读入下一条源程序语句,并解释执行。这种方法是按源程序中语句的动态执行顺序逐句解释(翻译)执行的,如果一语句处于一循环体中,则每次循环执行到该语句时,都要将其翻译成机器代码后再执行。
在编译方式下,高级语言程序的执行是分两步进行的:**步首先将高级语言程序全部翻译成机器代码程序,第二步才是执行这个机器代码程序。因此,编译对源程序的处理是先翻译,后执行。
从执行速度上看,编译型的高级语言比解释型的高级语言要快,但解释方式下的人机界面比编译型的好,便于程序调试。
这两种途径的主要区别在于:解释方式下不生成目标代码程序,而编译方式下生成目标代码程序。
1.3 请画出编译程序的总框图。如果你是一个编译程序的总设计师,设计编译程序时应当考虑哪些问题?
【解答】 编译程序总框图如图1-1所示。
图1-1 编译程序总框图
作为一个编译程序的总设计师,首先要深刻理解被编译的源语言其语法及语义;其次,要充分掌握目标指令的功能及特点,如果目标语言是机器指令,还要搞清楚机器的硬件结构以及操作系统的功能;第三,对编译的方法及使用的软件工具也必须准确化。总之,总设计师在设计编译程序时必须估量系统功能要求?硬件设备及软件工具等诸因素对编译程序构造的影响等。
第2章 词法分析
2.1 完成下列选择题:
(1)词法分析器的输出结果是。
a. 单词的种别编码
b. 单词在符号表中的位置
c. 单词的种别编码和自身值
d. 单词自身值
(2)正规式M1和M2等价是指。
a. M1和M2的状态数相等
b. M1和M2的有向边条数相等
c. M1和M2所识别的语言集相等
d. M1和M2状态数和有向边条数相等
(3)DFA M(图2-1)接受的字集为。
图2-1 习题2.1的DFA M
a. 以0开头的二进制数组成的集合
b. 以0结尾的二进制数组成的集合
c. 含奇数个0的二进制数组成的集合
d. 含偶数个0的二进制数组成的集合
【解答】 (1)c (2)c (3)d
2.2 什么是扫描器? 扫描器的功能是什么?
【解答】 扫描器就是词法分析器,它接受输入的源程序,对源程序进行词法分析并识别出一个个单词符号,其输出结果是单词符号,供语法分析器使用。通常把词法分析器作为一个子程序,每当词法分析器需要一个单词符号时就调用这个子程序。每次调用时,词法分析器就从输入串中识别出一个单词符号交给语法分析器。
2.3 设M=({x,y},{a,b},f,x,{y})为一非确定的有限自动机,其中f定义如下:
试构造相应的确定有限自动机M′。
图2-2 习题2.3的NFA M
【解答】 对照自动机的定义M=(S,Σ,f,So,Z),由f的定义可知f(x,a)、f(y,b)均为多值函数,因此M 是一非确定有限自动机。
先画出NFA M 相应的状态图,如图2-2所示。
用子集法构造状态转换矩阵,如表2-1所示。
表2-1 状态转换矩阵
将转换矩阵中的所有子集重新命名,形成表2-2所示的状态转换矩阵。
表2-2 状态转换矩阵
图2-3 习题2.3的DFA M′
即得到M′=({0,1,2},{a,b},f,0,{1,2}),其状态转换图如图2-3所示。
将图2-3所示的DFA M′*小化。首先,将M′的状态分成终态组{1,2}与非终态组{0}。其次,考察{1,2},由于所以不再将其划分,也即整个划分只有两组:{0}和{1,2}。令状态1代表{1,2},即把原来到达2的弧都导向1,并删除状态2。*后,得到如图2-4所示的化简了的DFA M′。
评论
还没有评论。