编译原理王力红 著习题答案汇总Word文档下载推荐.docx
- 文档编号:14698854
- 上传时间:2022-10-24
- 格式:DOCX
- 页数:34
- 大小:125.64KB
编译原理王力红 著习题答案汇总Word文档下载推荐.docx
《编译原理王力红 著习题答案汇总Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《编译原理王力红 著习题答案汇总Word文档下载推荐.docx(34页珍藏版)》请在冰豆网上搜索。
该阶段的主要任务是从构成源程序的字符串中识别出一个个具有独立意义的最小语法单位——单词,并指出其属性。
语法分析阶段的主要任务是在词法分析的基础上,根据相应程序设计语言的语法规定进行语法分析,在源程序的单词串中识别出各种语法成分,如“程序”、“语句”、“表达式”等,并确定整个输入串是否构成一个语法上正确的程序,检查出语法错误。
语义分析和中间代码生成阶段的主要任务有两个,其一是进行相应的语义检查,以保证源程序在语义上的正确性,其二是确定各语法成分的含义、用途,收集类型信息,确定应进行的运算和操作,并将其转换为某种内部表示形式,即生成中间代码。
代码优化阶段是编译过程的最后阶段。
这一阶段的任务是对上一阶段产生的中间代码进行变换和改造,以期获得高质量的目标代码。
目标代码生成阶段的任务是把优化后的中间代码转换成特定机器上的绝对指令代码,或可重定位的指令代码,或汇编指令代码。
由于这种转换工作与具体的目标计算机的系统结构及其指令系统有关,涉及各种变量的存储空间分配、寄存器的调度、各种硬件功能部件的使用等,因此工作比较复杂。
1-5什么是编译程序的遍?
对编译程序来说,遍多和遍少各有什么优缺点?
所谓一遍(pass)或一趟,是指在编译过程中对源程序或与之等价的中间程序从头到尾扫描一遍,并将其转换成下一个中间程序的整个过程。
编译程序按其扫描次数可分为单遍(趟)扫描和多遍(趟)扫描。
采用多遍扫描方式,各遍的工作分工明确,便于多人合作开发,缩短开发周期,同时节省运行时的内存空间,易于提高目标程序的质量。
但各遍之间的重复工作多,编译效率低。
而单遍(趟)扫描的编译程序,编译速度快、效率高,但运行时占用空间大,目标程序质量低。
1-6一个最简单的编译程序至少要包含哪几个组成部分(程序)?
至少要包含词法分析程序、语法分析程序、目标代码生成程序等3个组成部分(程序)。
习题2
2-3已知算术表达式文法G[E]:
E→E+T|T
T→T*F|F
F→(E)|i
求符号串i*i的最左推导、最右推导、最左归约、最右归约。
解:
最左推导:
E=>
T=>
T*F=>
F*F=>
i*F=>
i*i
最右推导:
T*i=>
F*i=>
最左归约:
i*i=>
F*i=>
T*i=>
T*F=>
T=>
E
最右归约:
i*F=>
F*F=>
2-4设有文法G[A]:
A→bA|cc
判断符号串bbc,bbbcc,bbA,bbAc是否是G[A]的句型或句子。
解答:
∵A=>
bA=>
bbA=>
bbbA=>
bbbcc
∴bbA是G[A]的句型,bbbcc是G[A]的句子,
bbAc不是G[A]的句型,bbc不是G[A]的句子。
2-5分别求下列文法所描述的语言:
①G1[S]:
S→aaSbb|
∵S=>
aaSbb=>
aaaaSbbbb=>
…
∴L(G1[S])={a2nb2n|n≥0}
②G2[S]:
S→10S0|aA
A→bA|a
基本的求解方法:
语言的定义
解:
10S0=>
1010S00=>
…=>
(10)mS0m=>
(10)maA0m
A=>
bnA=>
bna
∴S=>
(10)maA0m=>
(10)mabna0m
L(G2[S])={(10)mabna0m|m≥0,n≥0}
③G3[S]:
S→SS|1A0
A→1A0|
SS=>
SSm=>
1A0(1A0)m
1A0=>
11A00=>
1mA0m=>
1mA0m=>
1m0m
∴S=>
1A0(1A0)m=>
11m0m0(11m0m0)n
L(G2[S])={(1m0m)n|m≥1,n≥1}
2-6分别对下列语言构造相应的文法:
1可以以0开头的所有正偶数的集合;
参考答案:
e=(0|1|2|…|9)*(0|2|4|6|8)
G[S]:
S→(0|1|2|…|9)S|0|2|4|6|8
2不以0开头的所有奇数的集合;
e=(1|3|5|7|9)|(1|2|3|4|5|6|7|8|9)(0|1|2||3|4|5|6|7|8|9)*(1|3|5|7|9)
S→BA|C
A→DA|C
B→1|2|3|4|5|6|7|8|9
C→1|3|5|7|9
D→0|B
3能被5整除的所有整数的集合;
e=(0|1|2|…|9)*(0|5)
S→0S|1S|2S|…|9S|0|5
4以a开头、b结尾的∑={a,b}上的任意符号串的集合;
e=a(a|b)*b
S→aA
A→aA|bA|b
5{an#bn|n≥0}∪{cn#dn|n≥0};
S→A|B
A→aAb|#
B→cBd|#
6{1n0m1m0n|m,n≥0};
S→1S0|A
A→0A1|
7{w#wr#|w∈{0,1}*,wr表示将w中的符号按逆序排列所得的符号串};
S→A#
A→0A0|1A1|#
2-7已知算术表达式文法G[E](见题2-3),根据定义求句型E+i*i的短语、简单短语和句柄。
E+T=>
E+T*F=>
E+F*F=>
E+i*F=>
E+i*i
E+F*i=>
E+T*i=>
E+F*i=>
短语:
i*i,E+i*i
简单短语:
i,
句柄:
i
2-8分别写出一个描述如下语言的非左递归文法和非右递归文法:
{s;
,s;
s;
,…}
并分别给出句子s;
的最左推导、最右推导和相应的语法树。
非左递归文法:
S→s;
S|s;
S=>
相应的语法树:
非右递归文法:
S→Ss;
|s;
Ss;
=>
2-9已知算术表达式文法G[E](见题2-3),根据语法树求句型E+i*i的短语、简单短语和句柄。
求语法树:
根据语法树:
i,i*i,E+i*i
2-10设有文法G[A]:
A→#B#
B→B+C|C
C→C*a|a
1至少采用两种EBNF表示法改写该文法;
B→(B+|)C
C→(C*|)a
2用语法图表示该文法。
习题3
3-1画出下列有限自动机的状态转换图,并说明它所识别或接受的语言是什么?
1M=({S,A,B,C},{0,1},f,S,{S}),其转换函数为:
f(S,0)=Bf(B,0)=S
f(S,1)=Af(B,1)=C
f(A,0)=Cf(C,0)=A
f(A,1)=Sf(C,1)=B
有限自动机的状态转换图
它所识别或接受的语言是:
L(M)={,00,11,0101,0110,1001,1010,0011,0000,1111,…,}
由偶数个0或偶数个1组成的二进制串。
2M=({0,1,2},{a,b},f,0,{2}),其状态转移矩阵为:
符号
状态
a
b
{1,2}
{0}
1
{0,1}
2
{0,2}
{1}
有限自动机M的状态转换图:
有限自动机M所识别或接受的语言是:
L(M)={a,aaa,abaa,ba,baaa,babaa,…}
3-2设计字母表∑={a,b}上的确定有限自动机,使它能识别或接受下列语言:
1以aa为首的所有符号串集合;
正则式e=aa(a|b)*
NFA:
DFA:
2,3,4
3,4
最小化:
3
2,3等价,合并。
2以aa结尾的所有符号串集合;
e=(a|b)*aa
I
Ia
Ib
X
X,A
X,A,Y
重命名:
{X}为0
{X,A}为1
{X,A,Y}为2
3含有相继两个a或相继两个b的所有符号串集合。
e=(a|b)*(aa|bb)(a|b)*
3-3试把下述NFA变换为DFA。
最基本的方法是子集法:
-
{1,2}
{0}为0,{1}为1,{1,2}为2,包含原终态2的{1,2}为新终态,
于是所求DFA为:
最基本的方法:
子集法:
{1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译原理王力红 著习题答案汇总 编译 原理 王力红 习题 答案 汇总
![提示](https://static.bdocx.com/images/bang_tan.gif)