精品 课后习题及参考答案《编译原理》课后习题答案清华大学第二版文档格式.docx
- 文档编号:19107333
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:172
- 大小:2.45MB
精品 课后习题及参考答案《编译原理》课后习题答案清华大学第二版文档格式.docx
《精品 课后习题及参考答案《编译原理》课后习题答案清华大学第二版文档格式.docx》由会员分享,可在线阅读,更多相关《精品 课后习题及参考答案《编译原理》课后习题答案清华大学第二版文档格式.docx(172页珍藏版)》请在冰豆网上搜索。
解释方式一般分为两种:
一种方式是,源程序功能的实现完全由解释程序承担和完成,即每读出源程序的一条语句的第一个单词,则依据这个单词把控制转移到实现这条语句功能的程序部分,该部分负责完成这条语句的功能的实现,完成后返回到解释程序的总控部分再读人下一条语句继续进行解释、执行,如此反复;
另一种方式是,一边翻译一边执行,即每读出源程序的一条语句,解释程序就将其翻译成一段机器指令并执行之,然后再读人下一条语句继续进行解释、执行,如此反复。
无论是哪种方式,其加工结果都是源程序的执行结果。
目前很多解释程序采取上述两种方式的综合实现方案,即先把源程序翻译成较容易解释执行的某种中间代码程序,然后集中解释执行中间代码程序,最后得到运行结果。
广义上讲,编译程序和解释程序都属于翻译程序,但它们的翻译方式不同,解释程序是边翻译(解释)边执行,不产生目标代码,输出源程序的运行结果。
而编译程序只负责把源程序翻译成目标程序,输出与源程序等价的目标程序,而目标程序的执行任务由操作系统来完成,即只翻译不执行。
对下列错误信息,请指出可能是编译的哪个阶段(词法分析、语法分析、语义分析、代码生成)报告的。
(1)
else没有匹配的if
(2)
数组下标越界
(3)
使用的函数没有定义
(4)
在数中出现非数字字符
答案:
语法分析
语义分析
词法分析
第5题
编译程序大致有哪儿种开发技术?
(1)自编译:
用某一高级语言书写其木身的编译程序。
(2)交叉编译:
A机器上的编译程序能产生B机器上的目标代码。
(3)自展:
首先确定一个非常简单的核心语言L0,用机器语言或汇编语言书写出它的编译程序TO,再把语言L0扩充到L1,此时LOczL1,并用L0编写L1的编译程序T1,再把语
言L1扩充为12,有LIuL2,并用L1编写L2的编译程序T2,……,如此逐步扩展下去,好似滚雪球一样,直到我们所要求的编译程序。
(4)移植:
将A机器上的某高级语言的编译程序搬到B机器上运行。
第6题
计算机执行用高级语言编写的程序有哪些途径?
它们之间的主要区别是什么?
计算机执行用高级语言编写的程序主要途径有两种,即解释与编译。
像Basic之类的语言,属于解释型的高级语言。
它们的特点是计算机并不事先对高级语言进行全盘翻译,将其变为机器代码,而是侮读入一条高级语句,就用解释器将其翻译为一条机器代码,予以执行,然后再读入下一条高级语句,翻译为机器代码,再执行,如此反复。
总而言之,是边翻译边执行。
像C,Pascal之类的语言,属于编译型的高级语言。
它们的特点是计算机事先对高级语言进行全盘翻译,将其全部变为机器代码,再统一执行,即先翻译,后执行。
从速度上看,编译型的高级语言比解释型的高级语言更快。
第2章PL/O编译程序的实现
PL/O语言允许过程嵌套定义和递归调用,试问它的编译程序如何解决运行时的存储管理。
PI70语言允许过程嵌套定义和递归调用,它的编译程序在运行时采用了栈式动态存储管理。
(数组CODE存放的只读目标程序,它在运行时不改变。
)运行时的数据区S是由解释程序定义的一维整型数组,解释执行时对数据空间S的管理遵循后进先出规则,当每个过程(包括主程序)被调用时,才分配数据空间,退出过程时,贝I」所分配的数据空间被释放。
应用动态链和静态链的方式分别解决递归调用和非局部变量的引用问题。
若PL/0编译程序运行时的存储分配策略采用栈式动态分配,并用动态链和静态链的方式分别解决递归调用和非局部变量的引用问题,试写岀下列程序执行到赋值语句b:
=10时运行栈的布局示意图。
varx,y;
procedurep;
vara;
procedureq;
varb;
begin(q)b:
=10;
end(q);
procedures;
varc,d;
procedurer;
vare,f;
begin(r)
callq;
end(r);
begin(s)
callr;
end(s);
begin(p)
calls;
end(p);
begin(main)
callp;
end(main).
程序执行到赋值语句b:
=10时运行栈的布局示意图为:
写出题2中当程序编译到r的过程体时的名字表table的内容。
name
kind
level/val
adr
size
题2中当程序编译到r的过程体时的名字表table的内容为:
adr
X
variable
dx
y
dx+l
p
procedure
过程p的入口(待填)
5
a
1J
q
1
过程q的入口
4
s
过程s的入口(待填)
c
2
d
r
过程r的入口
e
3
f
variable3
q和s是并列的过程,所以q定义的变量b被覆盖。
第4题
指出栈顶指针T,最新活动记录基地址指针B,动态链指针DL,静态链指针SL与返回地址RA的用途。
栈顶指针T,最新活动记录基地址指针B,动态链指针DL,静态链指针SL与返回地址RA的用途说明如下:
T:
栈顶寄存器T指岀了当前栈中最新分配的单元(T也是数组S的下标)。
B:
基址寄存器,指向每个过程被调用时,在数据区S中给它分配的数据段起始地址,也称基地址。
SL:
静态链,指向定义该过程的直接外过程(或主程序)运行时最新数据段的基地址,
用以引用非局部(包围它的过程)变量时,寻找该变量的地址。
DL:
动态链,指向调用该过程前正在运行过程的数据段基地址,用以过程执行结束释放数据空间时,恢复调用该过程前运行栈的状态。
RA:
返回地址,记录调用该过程时目标程序的断点,即调用过程指令的下一条指令的地址,用以过程执行结束后返回调用过程时的下一条指令继续执行。
在每个过程被调用时在栈顶分配3个联系单元,用以存放SL,DL,RAo
PL/0编译程序所产生的目标代码是一种假想栈式计算机的汇编语言,请说明该汇编语言中下列指令各自的功能和所完成的操作。
(1)INT0A
(2)OPROO
(3)CALLA
PI70编译程序所产生的目标代码中有3条非常重要的特殊指令,这3条指令在code中的位置和功能以及所完成的操作说明如下:
INT0A
在过程目标程序的入口处,开辟A个单元的数据段。
A为局部变量的个数+3。
OPROO
在过程目标程序的出口处,释放数据段(退栈),恢复调用该过程前正在运行的过程的数据段基址寄存器B和栈顶寄存器T的值,并将返回地址送到指令地址寄存器P中,以使调用前的程序从断点开始继续执行。
CALLA
调用过程,完成填写静态链、动态链、返回地址,给出被调用过程的基地址值,送入基址寄存器B中,目标程序的入口地址A的值送指令地址寄存器P中,使指令从A开始执行。
(1)扩充条件语句的功能使其为:
if〈条件〉then〈语句〉[else〈语句〉]
(2)扩充repeat语句为:
repeat〈语句〉{;
〈语句〉}until〈条件〉
对PL/O语言作如下功能扩充时的语法图和EBNF的语法描述如下:
(1)扩充条件语句的语法图为:
EBNF的语法描述为:
〈条件语句〉:
:
=if〈条件〉then〈语句〉[else〈语句〉]
第3章文法和语言
文法G=({A,B,S},h,b,c},P,S)其中P为:
S—Ac|aB
A—>
ab
B—>
bc
写出L(G[S])的全部元素。
L(G[S])={abc}
文法G[N]为:
N—D|ND
D-*0|l|2|3|4|5|6|7|8|9
G[N]的语言是什么?
G[N]的语言是V+oV={0,1,2,3,4,5,6,7,&
9}
N=>
ND=>
NDD....=>
NDDDD...D=>
D....D
或者:
允许0开头的非负整数?
7等构造一个文法。
为只包含数字、加号和减号的表达式,例如9-2+5,3-1,
G[S]:
S->
S+D|S-D|D
D->
0|l|2|3|4|5|6|7|8|9
已知文法G[ZJ:
Z—►aZblab
写出L(G[Z])的全部元素。
Z=>
aZb=>
aaZbb=>
aaa..Z...bbb=>
aaa..ab...bbb
L(G[Z])={anb|ri>
=l}
写一文法,使其语言是偶正整数的集合。
要求:
$允许0打头;
0不允许0打头。
⑴允许0开头的偶正整数集合的文法
E—NT|D
T—NT|D
N->
D|1|3|5|7|9
0|2|4|6|8
⑵不允许0开头的偶正整数集合的文法
T—FT|G
2|4|6|8
FtN|°
G->
D|O
已知文法G:
v表达式〉:
=<
项>
丨v表达式>
+<
fiJi>
V项〉:
:
=v因子〉IV项〉*V因子〉
v因子>
=(v表达式>
)|i
试给出下述表达式的推导及语法树。
(5)i+(i-H)
(6)i+i*i
(6)v表达式>
=x表达式>+<项>
=><表达式〉+<项>*<因子〉
=>v表达式>+<项>*i
=>v表达式>+<因子>*i
=>v表达式>+i*i
=x项〉+i*j
=x因子〉+i*i
=>i+i*i
第7题
证明下述文法G[〈表达式〉]是二义的。
〈表达式〉:
=创(〈表达式〉)|〈表达式〉〈运算符〉〈表达式〉
〈运算符〉:
=+卜|叩
可为句子a+a*a构造两个不同的最右推导:
最右推导1
〈表达式〉=?
〈表达式〉〈运算符〉〈表达式〉
=〈表达式〉〈运算符〉a
—俵达式〉*a
=>〈表达式〉〈运算符〉〈表达式〉*am〈表达式〉〈运算符〉a*a=俵达式〉+a*a=a+a*a
〈运算符〉〈表达式〉
〈运算符〉
〈表达式〉
*a
a*a
最右推导2〈表达式〉■〈表达式〉
=?
=>〈表达式〉
=〈表达式〉
—〈表达式〉
〈表达式〉+a*aa+a*a
文法G[S]为:
SfAc|aB
A—ab
B->
该文法是否为二义的?
为什么?
对于串abc
⑴S=>
Ac=>
abc
(2)S=>
aB=>
abc
即存在两不同的最右推导。
所以,该文法是二义的。
对输入字符串abc,能构造两棵不同的语法树,所以它是二义的。
S
第9题
考虑下而上下文无关文法:
S-*SS*|SS+|a
(1)表明通过此文法如何生成串aa+a*,
(2)G[S]的语言是什么?
⑴此文法生成串aa+a*的最右推导如下
S=>
SS*=>
Sa*=>
SS+a*=>
Sa4-a*=>
aa+a*
⑵该文法生成的语言是:
*和+的后缀表达式,即逆波兰式。
第10题
文法S-*S(S)S|£
(1)生成的语言是什么?
(2)该文法是二义的吗?
说明理由。
(1)嵌套的括号
(2)是二义的,因为对于()()可以构造两棵不同的语法树。
第11题
令文法G[E]为:
E-^T|E+T|E>
T
T—F|T*F|T/F
—(助i
证明E+PF是它的一个句型,指出这个句型的所有短语、直接短语和句柄。
此句型对应语法树如右,故为此文法一个句型。
或者:
因为存在推导序列:
E=>
E+T=>
E+T*F,所以E+T*F句型
此句型相对于E的短语有:
E+T*F;
相对于T的短语有T*F
直接短语为:
T*F
句柄为:
第13题
一个上下文无关文法生成句子abbaa的推导树如下:
(1)给岀串abbaa最左推导、最右推导。
(2)该文法的产生式集合P可能有哪些元素?
(3)找出该句子的所有短语、直接短语、句柄。
A
B
£
b
⑴串abbaa最左推导:
ABS=>
aBS=>
aSBBS=>
aBBS=>
abBS=>
abbS=>
abbAa=>
abbaa最右推导:
ABAa=>
ABaa=>
ASBBaa=>
ASBbaa=>
ASbbaa=>
Abbaa=>
abbaa
⑵产生式有:
S—ABS|Aa|eA—aB—SBB|b
可能元素有:
aaababbaaaaabbaa
⑶该句子的短语有:
a是相对A的短语
是相对S的短语
b是相对B的短语
ebb是相对B的短语aa
是相对S的短语aebbaa
直接短语有:
aeb
句柄是:
第14题
给出生成下述语言的上下文无关文法:
(1){anbnambm|n,m>
=0}
(2){lnOmlmOn|n,m>
(3){WaWr|W属于{0|a}*,表示W的逆}
(1)
AA
A-^aAb|e
1SO|A
AtOA1|£
S^OSO|1S1|£
第16题
给出生成下述语言的三型文法:
(1){an|n>
(2){anbm|n,m>
(3){anbmck|n,mJ<
>
(1)S->
aS|£
⑵
S—>
aA
AfA|B
bB|b⑶
A-^aA|BB-^bB|CC_cC|e
第17题
习题7和习题11中的文法等价吗?
等价。
第18题
解释下列术语和概念:
字母表
(2)
串、字和句子
(3)
语言、语法和语义
(1)字母表:
是一个非空有穷集合。
(2)串:
符号的有穷序列。
字:
字母表中的元李
句子:
如果ZC==>
x,xeV*T则称x是文法G的一个句子。
(3)语言:
它是由句子组成的集合,是由一组记号所构成的集合。
程序设计的语言就是所有该语言的程序的全体。
语言可以看成在一个基本符号集上定义的,按一定规则构成的一切基本符号串组成的集合。
语法:
表示构成语言句子的各个记号之间的组合规律。
程序的结构或形式。
语义:
表示按照各种表示方法所表示的各个记号的特定含义。
语言所代表的含义。
附加题
问题1:
给出下述文法所对应的正规式:
OA|1B
BtOS|O
R=(01I10)(01I10)*
问题2:
已知文法G[A],写出它定义的语言描述
G[A]:
A->
OB|1C
B—1|1A|OBB
C->
0|0A|lCC
G[A]定义的语言由0、1符号串组成,串中0和1的个数相同.
问题3:
给出语言描述,构造文法.
构造一文法,其定义的语言是由算符+,*,(,)和运算对象a构成的算术表达式的集合.
答案一:
G[E]E—E+T|T
TtT*F|F
F->
(E)|a
答案二
G[E]ErE+E|E*E|(E)|a
问题4:
已知文法G[S]:
S-*dAB
A—"
aA|a
By|bB
相应的正规式是什么?
G[S]能否改写成为等价的正规文法?
正规式是daa*b*;
相应的正规文法为(由自动机化简来):
S^dAAfa|aBB^aB|a|b|bCC~bC|b
也可为(观察得来):
SfdAA->
a|aA|aBB—bB|e
问题5:
E^E+T|E-T|T
T-^T*F|T/F|F
F-(E)|i
试给出下述表达式的推导及语法树
(1)i;
(2)i*i+i
(3)i+i*i
(4)Ki+i)
(1)E=>
T=>
F=>
i
(2)E=>
T+T=>
T*F+T=>
F*F+T=>
i*F+T=>
i*i+T=>
i*i+F=>
i*i+i
(3)E=>
F+T=>
i+T=>
H-T*F=>
i4-F*F=>
i4-i*F=>
i+i*i
(4)E=>
i4-F=>
i+(E)=>
i+(E4-T)=>
i+(T+T)=>
i+(F+T)=>
H(i+T)=>
i+(i+F)=>
卄(i+i)
EEE
I可题6:
已知文法G[E]:
E—ET+|T
T—TF*|F
F^FA|a
试证:
FI"
"
是文法的句型,指出该句型的短语、简单短语和句柄.
E
丄
♦tif
该句型对应的语法树如下:
该句型相对于E的短语有FF"
*相对于T的短语有FF*,F相对于F的短语有F%F心简单短语有F;
FA句柄为F.
问题7:
适当变换文法,找到下列文法所定义语言的一个无二义的文法:
S^SaSASbSZScSZd
该文法的形式很典型,可以先采用优先级联规则变换文法,然后再规定结合性对文法做进一步变换,即可消除二义性。
设a、b和c的优先级别依次增高,根据优先级联规则将文法变换为:
S^SaSZA
A-^AbAZC
CTCcCZd
规定结合性为左结合,进一步将文法变换为:
S—SciAZ.A
ATAhCZC
CTCcFZF
FT(1
该文法为非二义的。
问题8:
构造产生如下语言的上下文无关文法:
(1){ah2ncm|n,m>
0}
(2){anhmcm|iifm>
(3){ambnZ.m>
n}
(4){ambncpdil/.m+n=p+q}
(5){uawhZu^we{o,A}*a|u|=|w|}
(1)根据上下文无关文法的特点,要产生形如anb2ncni的串,可以分别产生形如anh2n形如F的串。
设计好的文法是否就是该语言的文法?
严格地说,应该给出证明。
但若不是特别指明,通常可以忽略这一点。
对于该语言,存在一个由以下产生式定义的上下文无关文法G[S]:
stab
AZaAbb
B—》£
cB
(2)同样,要产生形如arthmc2m的串,可以分别产生形如和形如bmc2m的串。
对于该语言,存在一个由以下产生式定义的上下文无关文法G[S]:
AsZaA
3—>
£
ZhBcc
(3)考虑在先产生同样数目的a,b,然后再生成多余的ao以下G[S]是一种解法:
S—>
aSbZaSZ£
(4)以下G[S]是一种解法:
S^aSdZAZD
A-^hAdZB
D—>
aDcZB
B—>
hBcZ8
注:
a不多于d时,b不少于c;
反之,a不少于d时,b不多于c。
前一种情形通过对应A,后一种情形对应Do
(5)以下G[S]是一种解法:
StAb
A—>
BABZa
问题9:
下而的文法G(S)描述由命题变量p、q,联结词a(合取)、v(析取)、「(否定)构成的命题公式集合:
StSvTZT
T-»
TaFZF
F—>
-iFZpZq
试指出句型的直接短语
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译原理 精品 课后习题及参考答案编译原理课后习题答案清华大学第二版 课后 习题 参考答案 编译 原理 答案 清华大学 第二
![提示](https://static.bdocx.com/images/bang_tan.gif)