编译原理(清华大学_张素琴)复习例题 (2)
编译原理复习题1(第二版张素琴吕映芝蒋维杜戴桂兰编著)

编译原理复习题1(第二版张素琴吕映芝蒋维杜戴桂兰编著)一、是非题(10某1分,共10分)1.解释程序和编译程序一样,生成目标代码。
()2.编译程序生成的目标代码只能是机器语言。
()3.等价文法是指两个文法完全相同。
()4.正规式所确定的语言为正规集。
(y)5.对于字母表Σ上的任一NFAM',必存在Σ上与NFAM'等价的DFAM。
(y)6.存在这样一些语言,它们能被确定的有穷自动机识别,但不能用正规表达式表示()7.不存在正规文法能产生语言:L={ab|n>=1}()nn8.算符优先关系表不一定存在对应的优先函数。
(y)9.每个文法都能改写为LL(1)文法。
()10.算符优先分析法每次都是对素短语进行规约。
()11.词法分析中单词符号是用上下文无关文法描述的,语法分析中语法类是用正则文法描述的。
()二、填空题1.编译程序的工作过程一般可以划分为:、、、、2.若源程序是用高级语言编写的,目标程序是,则其翻译程序称为编译程序。
3、用于描述1开始并且没有两个连续的0的0、1的字符串的一个正规式是:4、对编译程序而言,输入数据是,输出结果是某5、假设G是一个文法,S是文法的开始符号,如果S==>某,则称某是6、已知文法G[E]:E→T|E+T;T→F|T某F;F→(E)|i该文法的开始符号是,终结符号集合VT是,非终结符号结合VN是7、自顶向下语法分析会遇到的主要问题有和8、编译方式与解释方式的根本区别在于1-5:错,错,错,对,对6-10:错,错,对,错,错11-15:错,1.词法分析,语法分析,语义分析与中间代码产生,优化,目标代码生成。
2、机器语言程序或汇编语言;3、(1|10)某;4、源程序,目标程序;5、句型;6、E,{+,某,(,),i},{E,T,F};7、左递归,回溯;8、是否生成目标代码。
编译原理三、四章答案(清华版)

第三章习题解答6.每个表达式的推导及语法树分别如下:(1) <表达式>=> <项>=> <因子>=> i(2) <表达式>=> <项>=><因子>=>(<表达式>)=>(<项>)=>(<因子>)=>(i)(3) <表达式>=> <项>=><项>*<因子>=><因子>*<因子>=>i*<因子>=>i*i(4) <表达式>=> <表达式>+<项>=> <项>+<项>=> <项>*<因子>+<项>=> <因子>*<因子>+<项>=> i*<因子>+<项>=> i*i+<项>=> i*i+<因子>=> i*i+i(5) <表达式>=> <表达式>+<项>=> <项>+<项>=> <因子>+<项>=> i+<项>=> i+<因子>=>i+<表达式>=>i+(<表达式>+<项>)=> i+(<项>+<项>)=> i+(<因子>+<项>)=> i+(i+<项>)=> i+(i+<因子>)=>i+(i+i)(6) <表达式>=> <表达式>+<项>=> <项>+<项>=> <因子>+<项>=> i+<项>=> i+<项>*<因子>=> i+<因子>*<因子>=> i+i*<因子>=> i+i*i<表达式> <项> <因子>i<表达式><项><因子>()<表达式><项><因子>i<表达式><项>*<项><因子><因子>ii图(1)图(2)图(3)()<表达式><表达式><表达式><项>+<项>*<项><因子><因子>i<因子>ii <表达式><表达式><项>+<项><因子><因子>i<表达式><项>+<项><因子>i <因子>i图(4)图(5)<表达式><表达式><项>+<项><因子>i图(6)*<项><因子><因子>i i11.根据文法G 给定的规则,从文法的开始符E 出发可推导出E+T*F ,推导过程如下:E => E+T => E+T*F ,所以E+T*F 是该文法的一个句型。
编译原理课后习题答案+清华大学出版社第二版

用以引用非局部(包围它的过程)变量时,寻找该变量的地址。 DL: 动态链,指向调用该过程前正在运行过程的数据段基地址,用以过程执行结束释放
数据空间时,恢复调用该过程前运行栈的状态。 RA: 返回地址,记录调用该过程时目标程序的断点,即调用过程指令的下一条指令的地
编译程序大致有哪几种开发技术?
答案:
(1)自编译:用某一高级语言书写其本身的编译程序。 (2)交叉编译:A 机器上的编译程序能产生 B 机器上的目标代码。 (3)自展:首先确定一个非常简单的核心语言 L0,用机器语言或汇编语言书写出它的编
译程序 T0,再把语言 L0 扩充到 L1,此时 L0⊂ L1 ,并用 L0 编写 L1 的编译程序 T1,再把语 言 L1 扩充为 L2,有 L1 ⊂ L2 ,并用 L1 编写 L2 的编译程序 T2,……,如此逐步扩展下 去, 好似滚雪球一样,直到我们所要求的编译程序。 (4)移植:将 A 机器上的某高级语言的编译程序搬到 B 机器上运行。
(main).
答案: 程序执行到赋值语句 b∶=10 时运行栈的布局示意图为:
1
《编译原理》课后习题答案第二章
第 3题 写出题 2 中当程序编译到 r 的过程体时的名字表 table 的内 容。
name
kind
level/val
adr
size
答案:
题 2 中当程序编译到 r 的过程体时的名字表 table 的内容为:
盛威网()专业的计算机学习网站
2
《编译原理》课后习题答案第一章
合实现方案,即先把源程序翻译成较容易解释执行的某种中间代码程序,然后集中解释执行 中间代码程序,最后得到运行结果。
8-12习题课及总复习(张素琴编著)

2.编译过程中可进行的优化如何分类? 答:局部优化、循环优化和全局优化。 3.最常用的代码优化技术有哪些? 答: 删除多余运算; 代码外提; 强度削弱; 变换循环控 制条件; 合并已知量;复写传播; 删除无用赋值。
4. 对如下所示的三地址码序 列 (1) i:=m-1 (2) j:=n (3) t1:=4*n (4) v:=a[t1] (5) i:=i+1 (6) t2:=4*i (7) t3:=a[t2] (8) if t3< v goto (5) (9) j:=j-1 (10) t5:=4*j (11) t5:=a[t4] (12) if t5> v goto (9) (13) if i >= j goto (23) (14) t6:=4*i (15) x:=a[t6] (16) t7:=4*i
8-12章习题课
1. 写出 WHILE A<C AND B<D DO IF A=1 THEN C:=C+1 ELSE WHILE A<=D DO A:=A+2;的四元式序列。
(100) (j<,A,C,102) (101) (j,-,-,114) (102) (j<,B,D,104) (103) (j,-,-,114) (104) (j=,A,1,106) (105) (j,-,-,109) (106) (+,C,1,T) (107) (:=,T,-,C) (108) (j,-,-,100) (109) (j<=,A,D,111) (110) (j,-,-,100) (111) (+,A,2,T) (112) (:=,T,-,A) (113) (j,-,-,109) (114)
• 正规表达式构造NFA->DFA,DFA的最小化 • LL(1)文法的判断,预测分析表,分析句子过程,如P96 例1 • 算符优先文法的判断,优先表的构造,分析过程,如P121 例1 • LR(0)分析表的构造,分析过程,如P136 例题 • 中间代码生成 • 中间代码基本块内的优化,基本块的划分,基本块间的控制 流图
编译原理期末复习题含答案

第八节习题一、单项选择题1、将编译程序分成若干个“遍”是为了。
a.提高程序的执行效率b.使程序的结构更加清晰c.利用有限的机器内存并提高机器的执行效率d.利用有限的机器内存但降低了机器的执行效率2、构造编译程序应掌握。
a.源程序b.目标语言c.编译方法d.以上三项都是3、变量应当。
a.持有左值b.持有右值c.既持有左值又持有右值d.既不持有左值也不持有右值4、编译程序绝大多数时间花在上。
a.出错处理b.词法分析c.目标代码生成d.管理表格5、不可能是目标代码。
a.汇编指令代码b.可重定位指令代码c.绝对指令代码d.中间代码6、使用可以定义一个程序的意义。
a.语义规则b.词法规则c.产生规则d.词法规则7、词法分析器的输入是。
a.单词符号串b.源程序c.语法单位d.目标程序8、中间代码生成时所遵循的是-。
a.语法规则b.词法规则c.语义规则d.等价变换规则9、编译程序是对。
a.汇编程序的翻译b.高级语言程序的解释执行c.机器语言的执行d.高级语言的翻译10、语法分析应遵循。
a.语义规则b.语法规则c.构词规则d.等价变换规则解答1、将编译程序分成若干个“遍”是为了使编译程序的结构更加清晰,故选b。
2、构造编译程序应掌握源程序、目标语言及编译方法等三方面的知识,故选d。
3、对编译而言,变量既持有左值又持有右值,故选c。
4、编译程序打交道最多的就是各种表格,因此选d。
5、目标代码包括汇编指令代码、可重定位指令代码和绝对指令代码3种,因此不是目标代码的只能选d。
6、词法分析遵循的是构词规则,语法分析遵循的是语法规则,中间代码生成遵循的是语义规则,并且语义规则可以定义一个程序的意义。
因此选a。
7、b 8、c 9、d 10、c二、多项选择题1、编译程序各阶段的工作都涉及到。
a.语法分析b.表格管理c.出错处理d.语义分析e.词法分析2、编译程序工作时,通常有阶段。
a.词法分析b.语法分析c.中间代码生成d.语义检查e.目标代码生成解答1.b、c 2. a、b、c、e三、填空题1、解释程序和编译程序的区别在于。
编译原理课后习题答案解析+清华大学出版社第二版

计算机执行用高级语言编写的程序有哪些途径它们之间的主要区别是什么
答案:计算机执行用高级语言编写的程序主要途径有两种,即解释与编译。 像 Basic 之类的语言,属于解释型的高级语言。它们的特点是计算机并不事先对高级语
言进行全盘翻译,将其变为机器代码,而是每读入一条高级语句,就用解释器将其翻译为一 条机器代码,予以执行,然后再读入下一条高级语句,翻译为机器代码,再执行,如此反 复。
第2题
若 PL/0 编译程序运行时的存储分配策略采用栈式动态分配,并用动态链和静态链的方式分 别解决递归调用和非局部变量的引用问题,试写出下列程序执行到赋值语句 b∶ =10 时运行 栈的布局示意图。 var x,y; procedure p; var a; procedure q; var b; begin (q) b∶ =10; end (q); procedure s; var c,d; procedure r; var e,f; begin (r) call q; end (r); begin (s) call r; end (s); begin (p) call s;
(2) 数组下标越界 (3) 使用的函数没有定义 (4) 在数中出现非数字字符
答案: (1) 语法分析 (2) 语义分析 (3) 语法分析 (4) 词法分析
第5题
编译程序大致有哪几种开发技术
答案:
(1) 自编译:用某一高级语言书写其本身的编译程序。 (2) 交叉编译:A 机器上的编译程序能产生 B 机器上的目标代码。 (3) 自展:首先确定一个非常简单的核心语言 L0,用机器语言或汇编语言书写出它的
第6题
给出对 PL/0 语言作如下功能扩充时的语法图和 EBNF 的语法描述。 (1) 扩充条件语句的功能使其为: if〈条件〉then〈语句〉[else〈语句〉] (2) 扩充 repeat 语句为: repeat〈语句〉{;〈语句〉}until〈条件〉
归纳编译原理试题及答案(二).ppt
补充题
1. 画出编译程序的总体逻辑结构图,简述各 部分的主要功能。
2020/9/9
..........
23
补充题
2. 已知文法G[Z]: Z→0U|1V U→1Z|1 V→0Z|0
请写出此文法描述的只含有4个符号的全部句子。 G[Z]产生的语言是什么? 该文法在Chomsky文法分类中属于几型文法?
..........
22
CH.4.练习题1(P81.)
解(1) 不带回溯的递归子程序: S→a|^|(T)
Procedure S;
Begin
if sym=‘a’ or sym=‘^’ then advance
else if sym=‘(‘ then
begin advance;
T;
if sym=‘)’ then advance
但, FOLLOW(A)={b,c} FIRST(A)={a,ε} 两者不相交。
③ B→b|ε
其候选式的FIRST集合互不相交; ε∈ FIRST(B)
但, FOLLOW(B)={c} FIRST(B)={b,ε} 两者也不相交。
所以,文法是LL(1)文法。
..........
88
CH.4.练习题3(P82.)
..........
CH8.– CH11.
1. 什么是符号表?符号表有哪些重要作用? 2. 符号表的表项常包括哪些部分?各描述什
么? 3. 有哪些存储分配策略?并叙述何时用何种
存储分配策略? 4. 代码优化的常用措施和优化的三个层次。
2020/9/9
..........
21
程序设计语言
补充题
(3) 该文法属于3型文法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
编译原理复习例题(有些内容没有覆盖,比如优化、SLR(1)、LR(1)、LALR(1)
等。但要求至少要按照作业题的范围复习。)
一 选择题 1.编译的各阶段工作都涉及 。 [A]词法分析 [B]表格管理 [C]语法分析 [D]语义分析
2. 型文法也称为正规文法。 [A] 0 [B] 1 [C] 2 [D] 3
3. 文法不是LL(1)的。 [A]递归 [B]右递归 [C]2型 [D]含有公共左因子的
4.文法E→E+E|E*E|i的句子i*i+i*i有 棵不同的语法树。 [A] 1 [B] 3 [C] 5 [D] 7
5.文法 S→aaS|abc 定义的语言是 。 [A]{a2kbc|k>0} [B]{akbc|k>0} [C]{a2k-1bc|k>0} [D]{akakbc|k>0}
6.若B为非终结符,则 A→.B 为 。 [A]移进项目 [B]归约项目 [C]接受项目 [D]待约项目
7.同心集合并可能会产生新的 冲突。 [A]二义 [B]移进/移进 [C]移进/归约 [D]归约/归约
8.代码优化时所依据的是 。 [A]语法规则 [B]词法规则 [C]等价变换规则 [D]语义规则
9.表达式a-(-b)*c的逆波兰表示(@为单目减)为 。 [A]a-b@c* [B]ab@c*- [C]ab@- [D]ab@c-*
10.过程的DISPLAY表是用于存取过程的 。 [A]非局部变量 [B]嵌套层次 [C]返回地址 [D]入口地址 二 填空题 1.词法分析阶段的任务式从左到右扫描 字符流 ,从而逐个识别 一个个的单词 。 2.对于文法G[E]:E→T|E+T T→F|T*F F→P^F|P P→(E)|i,句型T+T*F+i的句柄是 。 3.最右推导的逆过程称为 规范归约 ,也称为 最左归约 。 4.符号表的每一项是由名字栏和 两个栏目组成。在目标代码生成阶段,符号表是 的依据。
三 判断题(认为正确的填“T”,错的填“F”) 【 】1.同心集的合并有可能产生“归约/归约”冲突。 【 】2.一个文法所有句子的集合构成该文法定义的语言。 【 】3.非终结符可以有综合属性,但不能有继承属性。 【 】4.逆波兰表示法表示表达式时无需使用括号。 【 】5.一个有穷自动机有且只有一个终态。 【 】6.若过程p第k次被调用,则p的DISPLAY表中就有k+1个元素。
四 解答题 1.给定文法G和句型(T+F)*i+T, G: E→E+T | T T→T*F | F F→(E) | i
(1)画出句型的语法树; (2)写出句型的全部短语、简单短语和句柄。 解:(略)
2.设有文法G:S→S+S|S*S|i|(S)。 (1)对于输入串i+i*i 给出一个最左推导; (2)该文法是否是二义性文法?请证明你的结论。 解:(1)i+i*i的最左推导: S => S+S => i+S => i+S*S => i+i*S => i+i*i (2)该文法是二义性的。因为对于句子i+i*i可以画出两棵语法树(语法树略)。
3.给出语言{ambmcn|m≥1,n≥0}的上下文无关文法(2型)。 解: G: S→AB|A A→aAb|ab B→cB|c
4.给出语言{akbmcn|k,m,n≥1}的正规文法(3型)。 解: G: A→aA|aB B→bB|bC C→cC|c
5.将文法G改写成等价的正规文法(3型)。 G: S→dAB A→aA|a B→bB|b 解: G: S→dA A→aA|aB B→bB|b
6.构造一文法产生任意长的a,b串,使得 |a|≤|b|≤2|a| 其中,“|a|”和“|b|”分别表示串中的字符a和b的个数。 解:b的个数在a的个数和其2倍之间,串的结构形如aSBS和BSaS,其中B为1或2个b。故得文法 G: S→aSBS|BSaS|ε B→b|bb
7.设有字母表{a,b}上的正规式R=(ab|a)*。 (1)构造R的相应有限自动机; 解:
(2)构造R的相应确定有限自动机; 解:将(1)所得的非确定有限自动机确定化 ε a b -0 1 1 3 12 2 1 +3
a b
0 1 2 3 b a a ε ε
- + -+013 123 +123 123 13 +13 123
(3)构造R的相应最小确定有限自动机; 解:对(2)得到的DFA化简,合并状态0和2 为状态2:
(4)构造与R等价的正规文法 解:令状态1和2分别对应非终结符B和A G: A→aB|a|ε B→aB|bA|a|b|ε 可化简为: G: A→aB|ε B→aB|bA|ε
8.写出如图所示的自动机描述的语言的正规式
解:abb*|abb*aa*b|aaa*b 9.写出在{a,b}上,不以a开头,但以aa结尾的字符串集合的正规式(并构造与之等价的最简DFA)。 解:依题意,“不以a开头”,则必以b开头,又要“以aa结尾”,故正规式为:b(a|b)*aa (构造与之等价的最简DFA,此略)
10.写一个LL(1)文法G,使其语言是
1 3 2 4 b a b a b - + 0 a a
+
1 2 a a b -+
+
0 1 2 a a b a -+
+
+ L(G)={ ambnc2n | m>=0,n>0 } 并证明文法是LL(1)。 解:文法G(S):S aS | E E bE’ E’ Ecc | cc Select(S aS)∩Select (S E)= Ф Select(E’ Ecc)∩Select (E’ cc) =Ф 故文法为LL(1)的
11.将文法G改写成等价的LL(1)文法,并构造预测分析表。 G:S→S*aT|aT|*aT T→+aT|+a (编写递归下降子程序) 解:消除左递归后的文法G’: S→aTS’|*aTS’ S’→*aTS’|ε T→+aT|+a 提取左公因子得文法G’’:S→aTS’|*aTS’ S’→*aTS’|ε T→+aT’ T’→T|ε Select(S→aTS’)={a} Select(S→*aTS’)={*} Select(S→aTS’)∩Select(S→*aTS’)=Ф Select(S’→*aTS’)={*} Select(S’→ε)=Follow(s’)={#} Select(S’→*aTS’)∩Select(S’→ε)= Ф Select(T→+aT’)={+} Select(T’→T)=First(T) ={+} Select(T’→ ε)=Follow(T’)={*,#} Select(T’→T)∩Select(T’→ε)= Ф 所以该文法是LL(1)文法。 预测分析表: * + a # S S’Ta, N TS’T, N S’ S’Ta, N ε, P T T’a, N T’ ε, P T, P ε, P a ε, N # OK (递归下降子程序,略)
12.对文法G[S]: S → aSb | P P → bPc | bQc Q → Qa | a 构造简单优先关系表。该文法是否是简单优先文法? 解:简单优先关系矩阵如下: S a b P Q c S = a = < > < < > b < < > = = < P > = Q = = c > > 由于矩阵中有元素存在多种优先关系,故不是简单优先文法。
13.考虑文法 G: S → AS | b
A → SA | a (1)构造文法的可归前缀图(活前缀的DFA); (2)判断文法是否是LR(0)文法,并说明理由。 解:(1)可归前缀图
I0:S’.S S.AS S.b A.SA A.a I1:S’S. AS.A A.SA A.a S.AS S.b I2:Aa. I3:Sb. I4:SA.S S.AS S.b A.SA A.a I5:AS.A A.SA A.a S.AS S.b I6:SAS. AS.A A.SA A.a S.AS S.b I7:ASA. SA.S S.AS S.b A.SA A.a
Sb
S
aA
abA
A
ab
S
abS A
baAS
SA
ba
(2)因为存在冲突,所以不是LR(0)文法。 14.文法G及其LR分析表如下,请给出对串dada#的分析过程。 G: S → VdB ① V → e ② V → ε ③ B → a ④