当前位置:文档之家› 编译原理第七章练习题

编译原理第七章练习题

编译原理第七章练习题
编译原理第七章练习题

第7节习题

一、单项选择题

1、中间代码生成所依据的是。

a.语法规则

b.词法规则

c.语义规则

d.等价变换规则

2、四元式之间的联系是通过实现的。

a.指示器

b.临时变量

c.符号表

d.程序变量

3、后缀式ab+cd+/可用表达式来表示。

a.a+b/c+d

b.(a+b)/(c+d)

c.a+b/(c+d)

d.a+b+c/d

4、表达式(┓A∨B)∧(C∨D)的逆波兰表示为。

a. ┓AB∨∧CD∨

b. A┓B∨CD∨∧

c. AB∨┓CD∨∧

d. A┓B∨∧CD∨

5

所对应的表达式为。

a.A+B+C+D

b.A+(B+C)+D

c.(A+B)+C+D

d.(A+B)+(C+D)

6、四元式表示法的优点为。

a.不便于优化处理,但便于表的更动

b.不便于优化处理,但节省存储空间

c.便于优化处理,也便于表的更动

d.便于表的更动,也节省存储空间

7、终结符具有属性。

a.传递

b.继承

c.抽象

d.综合

解答

1、选c。

2、四元式之间的联系是通过临时变量实现的,故选b。

3、选b。

4、选b。

5、选d。

6、四元式表示法的优点与间接三元式相同,故选c。

7、选d。

二、多顶选择题

1、中间代码主要有。

a.四元式b.二元式c.三元式d.后缀式e.间接

三元式

2、下面中间代码形式中,能正确表示算术表达式a+b+c 的有 。 a .ab+c+ b .abc++ e .a+b+c

3、在下面的 语法制导翻译中,采用拉链-回填技术。 a .赋值语句 b .goto 语句 c .条件语句 d .循环语句

4、下列 中间代码形式有益于优化处理。 a .三元式 b .四元式 c .间接三元式 d .逆波兰表示法 e .树形表示

5、在编译程序中安排中间代码生成的目的是 。 a .便于进行存储空间的组织 b .利于目标代码的优化

c .利于编译程序的移植

d .利于目标代码的移植

e .利于提高目标代码的质量 6、下面的中间代码形式中, 能正确表示算术表达式

a .ab+c*

b .abc*+

c .a+b*c

7、三地址代码语句具体实现通常有 表示方法。 a .逆波兰表示 b .三元式 c .间接三元式 d .树形表示

e .四元式

解答

1、选a 、c 、d 、e 。

2、b 、d 的中间代码不能正确表示a+b+c ,而e 不是中间代码:故选a 、c 。

3、凡涉及到跳转的语句都需要采用拉链——回填技术,故选 b 、c 、d 。

4、选b 、c 。

5、选b 、d 。

6、选b 、e 。

7、选b 、c 、e 。

三、填空题

1、中间代码有等形式,生成中间代码主要是为了使。

2、语法制导翻译既可以用来产生代码,也可以用来产生指令,甚至可用来对输入串进行。

3、当源程序中的标号出现“先引用后定义”时,中间代码的转移地址须持时才能确定,因而要进行。

4、文法符号的属性有两种,一种称为,另一种称为。

5、后缀式abc-/所代表的表达式是,表达式(a-b)*c可用后缀式表示。

6、用一张辅以的办法来表示中间代码,这种表示法称为间接三元式。

解答

1、逆波兰记号、树形表示、三元式、四元式目标代码的优化容易实现

2、中间目标解释执行

3、标号定义回填

4、继承属性综合属性

5、a/(b-c) ab-c*

6、间接码表三元式表

四、综合题

1、给出下列表达式的逆波兰表示(后缀式):

①a*(-b+c)

②(A∨B)∧(C∨┑D∧E)

2、写出算术表达式:A+B*(C-D)+E/(C-D)↑N的

①四元式序列;②三元式序列;③间接三元式序列

解答1、

①ab@c+*;

②AB∨CD┑E∧∨∧

2、

①表达式的四元式序列:②表达式的三元式序列③间接三元式序列

(1)(-,C,D,T1) (1)(-,C,D) ⑴(1)(-,C,D)

(2)(*,B,T1,T2) (2)(*,B,(1)) ⑵(2)(*,B,(1))

(3)(+,A,T2,T3) (3)(+,A,(2)) ⑶(3)(+,A,(2))

(4)(-,C,D,T4) (4)(-,C,D) ⑴⑷(↑,(1),N)

(5)(↑,T4,N,T5) (5)(↑,(4),N) ⑷⑸(/,E,(4))

⑹(/,E,T5,T6) ⑹(/,E,(5)) ⑸⑹(+,(3),(5))

⑺(+,T3,T6,T7) ⑺(+,(3),(6))⑹

编译原理教程课后习题答案——第七章

第七章目标代码生成 7.1 对下列四元式序列生成目标代码: T=A-B S=C+D W=E-F U=W/T V=U*S 其中,V是基本块出口的活跃变量,R0和R1是可用寄存器。 【解答】简单代码生成算法依次对四元式进行翻译。我们以四元式T=a+b为例来说明其翻译过程。 汇编语言的加法指令代码形式为 ADD R, X 其中,ADD为加法指令;R为第一操作数,第一操作数必须为寄存器类型;X为第二操作数,它可以是寄存器类型,也可以是内存型的变量。ADD R,X指令的含意是:将第一操作数R与第二操作数相加后,再将累加结果存放到第一操作数所在的寄存器中。要完整地翻译出四元式T=a+b,则可能需要下面三条汇编指令: MOV R, a ADD R, b MOV T, R 第一条指令是将第一操作数a由内存取到寄存器R中;第二条指令完成加法运算;第三条指令将累加后的结果送回内存中的变量T。是否在翻译成目标代码时都必须生成这三条汇编指令呢?从目标代码生成的优化角度考虑,即为了使生成的目标代码更短以及充分利用寄存器,上面的三条指令中,第一条和第三条指令在某些情况下是不必要的。这是因为,如果下一个四元式紧接着需要引用操作数T,则第三条指令就不急于生成,可以推迟到以后适当的时机再生成。 此外,如果必须使用第一条指令,即第一操作数不在寄存器而是在内存中,且此时所有可用寄存器都已分配完毕,这时就要根据寄存器中所有变量的待用信息(也即引用点)来决定淘汰哪一个寄存器留给当前的四元式使用。寄存器的淘汰策略如下: (1) 如果某寄存器中的变量已无后续引用点且该变量是非活跃的,则可直接将该寄存器作为空闲寄存器使用。 (2) 如果所有寄存器中的变量在基本块内仍有引用点且都是活跃的,则将引用点最远的变量所占用寄存器中的值存放到内存与该变量对应的单元中,然后再将此寄存器分配给当前的指令使用。 因此,本题所给四元式序列生成的目标代码如下: MOV R0, A SUB R0, C /*R0=T*/ MOV R1, C ADD R1, D /*R1=S*/ MOV S, R1 /*S引用点较T引用点远,故将R1的值送内存单元S*/ MOV R1, E SUB R1, F /*R1=W*/ SUB R1, R0 /*R1=U*/ MUL R1, S /*R1=V*/ 7.2 假设可用的寄存器为R0和R1,且所有临时单元都是非活跃的,试将以下四元式基本

(完整版)编译原理课后习题答案

第一章 1.典型的编译程序在逻辑功能上由哪几部分组成? 答:编译程序主要由以下几个部分组成:词法分析、语法分析、语义分析、中间代码生成、中间代码优化、目标代码生成、错误处理、表格管理。 2. 实现编译程序的主要方法有哪些? 答:主要有:转换法、移植法、自展法、自动生成法。 3. 将用户使用高级语言编写的程序翻译为可直接执行的机器语言程序有哪几种主要的方式? 答:编译法、解释法。 4. 编译方式和解释方式的根本区别是什么? 答:编译方式:是将源程序经编译得到可执行文件后,就可脱离源程序和编译程序单独执行,所以编译方式的效率高,执行速度快; 解释方式:在执行时,必须源程序和解释程序同时参与才能运行,其不产生可执行程序文件,效率低,执行速度慢。

第二章 1.乔姆斯基文法体系中将文法分为哪几类?文法的分类同程序设计语言的设计与实现关 系如何? 答:1)0型文法、1型文法、2型文法、3型文法。 2) 2. 写一个文法,使其语言是偶整数的集合,每个偶整数不以0为前导。 答: Z→SME | B S→1|2|3|4|5|6|7|8|9 M→ε | D | MD D→0|S B→2|4|6|8 E→0|B 3. 设文法G为: N→ D|ND D→ 0|1|2|3|4|5|6|7|8|9 请给出句子123、301和75431的最右推导和最左推导。 答:N?ND?N3?ND3?N23?D23?123 N?ND?NDD?DDD?1DD?12D?123 N?ND?N1?ND1?N01?D01?301 N?ND?NDD?DDD?3DD?30D?301 N?ND?N1?ND1?N31?ND31?N431?ND431?N5431?D5431?75431 N?ND?NDD?NDDD?NDDDD?DDDDD?7DDDD?75DDD?754DD?7543D?75431 4. 证明文法S→iSeS|iS| i是二义性文法。 答:对于句型iiSeS存在两个不同的最左推导: S?iSeS?iiSes S?iS?iiSeS 所以该文法是二义性文法。 5. 给出描述下面语言的上下文无关文法。 (1)L1={a n b n c i |n>=1,i>=0 } (2)L2={a i b j|j>=i>=1} (3)L3={a n b m c m d n |m,n>=0} 答: (1)S→AB A→aAb | ab B→cB | ε (2)S→ASb |ab

编译原理各章习题

第二章高级语言及其语法描述 1、设有文法G[S]: S→N N→D|ND D→0|1|2|…|9 试写出028和4321的最左推导和最右推导过程。 2、证明文法G[S]是二义性文法: S→if E then S else S |if E then S |s E→0|1 3、设有文法G[E]: E→E-T|T T→T/F|F F→i|(E) (1)试写出i/(i-i-i)的推导树。 (2)试写出(F-i)/F的短语、简单短语和句柄。 4、设∑={0,1},请给出∑上下列语言的文法(1)所有以0开头的串 (2)所有以0开头,以1结尾的串 5、证明文法G1和G2等价 G1:S→0S1,S→01 G2:A→0R,A→01,R→A1 第三章有限状态自动机和词法分析 1、请用中文描述下列正规式表示的正规集 (1)0(0|1)*0 (2)0*10*10*10* 2、试写出∑={0,1}上下列集合的正则表达式:(1)所有以1开始和结束的符号串。 (2)恰含有3个1的所有符号所组成的集合。(3)集合{01,1}。

(4)所有以111结束的符号串。 3、试写出∑={0,1}上下述集合的正则表达式: (1)试写出非负整数集的正则表达式。 (2)试写出以非5数字为头的所有非负整数集的正则表达式。 4、试将图3.1中所示的有限状态自动机M 最小化。 图3.1 M 的状态转换图 5、设∑={a,b},试构造下述正则表达式的确定性有限状态自动机: (1)a(a|b)*baa (2)(a|b)*bbb * 6、对于下列的状态转换矩阵: (1)分别画出相应的状态转换图。 (2)用自然语言分别描述它们所识别的输入串的特征 7、将图3.2所示的非确定的有限状态自动机确定化和最小化。 图3.2 非确定的有限状态自动机M 第四章 自顶向下语法分析 1、从下列文法中消去左递归。

完整word版编译原理第七章答案

第7 章 LR 分析 第1 题 已知文法 A→aAd|aAb|ε 判断该文法是否是SLR(1)文法,若是构造相应分析表,并对输入串ab#给出分析过程。答案: 文法: A→aAd|aAb|ε 拓广文法为G′,增加产生式S′→A 若产生式排序为: 0 S' →A 1 A →aAd 2 A →aAb 3 A →ε 由产生式知: First (S' ) = {ε,a} First (A ) = {ε,a} Follow(S' ) = {#} Follow(A ) = {d,b,#} G′的LR(0)项目集族及识别活前缀的DFA 如下图所示:

所以在I、I中的移进-归约冲突可以由Follow 集解决,所以G 是SLR(1)文法。2 0构造的SLR(1)分析表如下: 分析表SLR(1)的1 题目 是文法的句子。ab 分析成功,说明输入串 第2 题 若有定义二进制数的文法如下: S→L·L|L L→LB|B B→0|1 (1) 试为该文法构造LR 分析表,并说明属哪类LR 分析表。 (2) 给出输入串101.110 的分析过程。 答案: 文法: S→L.L|L L→LB|B

B→0|1 拓广文法为G′,增加产生式S′→S 若产生式排序为: 0 S' →S 1 S →L.L 2 S →L 3 L →LB 4 L →B 5 B →0 1 →6 B 由产生式知: First (S' ) = {0,1} First (S ) = {0,1} First (L ) = {0,1} First (B ) = {0,1} Follow(S' ) = {#} Follow(S ) = {#} Follow(L ) = {.,0,1,#} Follow(B ) = {.,0,1,#} G′的LR(0)项目集族及识别活前缀的DFA 如下图所示:

编译原理复习题及答案

编译原理复习题及答案 一、选择题 1.一个正规语言只能对应(B) A 一个正规文法 B 一个最小有限状态自动机 2.文法G[A]:A→εA→aB B→Ab B→a是(A) A 正规文法 B 二型文法 3.下面说法正确的是(A) A 一个SLR(1)文法一定也是LALR(1)文法 B 一个LR(1)文法一定也是LALR(1)文法 4.一个上下文无关文法消除了左递归,提取了左公共因子后是满足LL(1)文法的(A) A 必要条件 B 充分必要条件 5.下面说法正确的是(B) A 一个正规式只能对应一个确定的有限状态自动机 B 一个正规语言可能对应多个正规文法 6.算符优先分析与规范归约相比的优点是(A) A 归约速度快 B 对文法限制少 7.一个LR(1)文法合并同心集后若不是LALR(1)文法(B) A 则可能存在移进/归约冲突 B 则可能存在归约/归约冲突 C 则可能存在移进/归约冲突和归约/归约冲突 8.下面说法正确的是(A) A Lex是一个词法分析器的生成器 B Yacc是一个语法分析器 9.下面说法正确的是(A) A 一个正规文法也一定是二型文法 B 一个二型文法也一定能有一个等价的正规文法 10.编译原理是对(C)。 A、机器语言的执行 B、汇编语言的翻译 C、高级语言的翻译 D、高级语言程序的解释执行 11.(A)是一种典型的解释型语言。

A.BASIC B.C C.FORTRAN D.PASCAL 12.把汇编语言程序翻译成机器可执行的目标程序的工作是由(B)完成的。 A. 编译器 B. 汇编器 C. 解释器 D. 预处理器 13.用高级语言编写的程序经编译后产生的程序叫(B) A.源程序 B.目标程序C.连接程序D.解释程序 14.(C)不是编译程序的组成部分。 A.词法分析程序 B.代码生成程序 C.设备管理程序 D.语法分析程序 15.通常一个编译程序中,不仅包含词法分析,语法分析,语义分析,中间代码生成,代码优化,目标代码生成等六个部分,还应包括(C)。 A.模拟执行器B.解释器 C.表格处理和出错处理D.符号执行器16.编译程序绝大多数时间花在(D)上。 A.出错处理B.词法分析C.目标代码生成D.表格管理 17.源程序是句子的集合,(B)可以较好地反映句子的结构。 A. 线性表 B. 树 C. 完全图 D. 堆栈 18.词法分析器的输出结果是(D)。 A、单词自身值 B、单词在符号表中的位置 C、单词的种别编码 D、单词的种别编码和自身值 19.词法分析器不能(D) A. 识别出数值常量 B. 过滤源程序中的注释 C. 扫描源程序并识别记号 D. 发现括号不匹配 20.文法:G:S→xSx | y所识别的语言是(D)。 A、xyx B、(xyx)* C、x*yx* D、x n yx n (n≥0) 21.如果文法G是无二义的,则它的任何句子α(A) A.最左推导和最右推导对应的语法树必定相同 B.最左推导和最右推导对应的语法树可能不同 C.最左推导和最右推导必定相同 D.可能存在两个不同的最左推导,但它们对应的语法树相同 22.正则文法(A)二义性的。 A. 可以是 B. 一定不是 C. 一定是 23.(B)这样一些语言,它们能被确定的有穷自动机识别,但不能用正则表达式表示。 A. 存在 B. 不存在 C. 无法判定是否存在 24.给定文法A→bA | ca,为该文法句子的是(C) A. bba B. cab C. bca D. cba

编译原理第1阶段练习题及答案,这是其中一个阶段共3个阶段。答案在后面

江南大学网络教育第一阶段练习题及答案,这是其中一个阶段共3个阶段。答案在后面 考试科目:《编译原理》第章至第章(总分100分) __________学习中心(教学点)批次:层次: 专业:学号:身份证号: 姓名:得分: 一单选题 (共4题,总分值20分,下列选项中有且仅有一个选项符合题目要求,请在答题卡上正确填涂。) 1. 若一个文法是递归的,则它所产生的语言的句子是()。(5 分) A. 无穷多个 B. 有穷多个 C. 可枚举的 D. 个数是常量 2. 文法G[A]:A→ε A→aB B→Ab B→a是()。(5 分) A. 0型文法 B. 1型文法 C. 2型文法 D. 3型文法 3. 词法分析器的输入是()。(5 分) A. 单词符号串 B. 源程序 C. 语法单位 D. 目标程序 4. 一个上下文无关文法 G 包括四个组成部分,它们是:一组非终结符号,一组终结符号,一 个开始符号,以及一组()。(5 分) A. 句子 B. 句型 C. 单词 D. 产生式 二填空题 (共2题,总分值10分 ) 5. 编译程序的功能可以分解为词法分析、语法分析、__________、中间代码生成、中间代码优 化、目标代码生成。(5 分) 6. 微小语言Micro的单词有下面的几种:标识符、__________、实常数、保留字、__________、 换行符。(5 分)

三简答题 (共2题,总分值20分 ) 7. 给出与正规式R=1(0|1)*101等价的NFA。(10 分) 8. 写出下面程序经词法分析后的TOKEN表示。 begin var X:real; var J:integer; read(J); J:=J+(J*20); X:=J-1; Write(2*J+X) End(10 分) 四综合计算题 (共2题,总分值50分 ) 9. 已知文法G(S) S→a| (T) T→T,S|S 写出句子((a,a),a)的规范归约过程及每一步的归约规则和句柄。(25 分)10. 已知文法 G[E] 为: E→T|E+T|E-T T→F|T*F|T/F F→(E)|i ①该文法的开始符号(识别符号)是什么? ②请给出该文法的终结符号集合 Vt 和非终结符号集合 Vn 。 ③找出句型 T+T*F+i 的所有短语、简单短语和句柄。(25 分)

编译原理课后习题答案(第三版)

精品文档 第二章 P36-6 (1) L G ()1是0~9组成的数字串 (2) 最左推导: N ND NDD NDDD DDDD DDD DD D N ND DD D N ND NDD DDD DD D ??????????????????0010120127334 556568 最右推导: N ND N ND N ND N D N ND N D N ND N ND N D ??????????????????77272712712701274434 886868568 P36-7 G(S) O N O D N S O AO A AD N →→→→→1357924680||||||||||| P36-8 文法: E T E T E T T F T F T F F E i →+-→→|||*|/()| 最左推导: E E T T T F T i T i T F i F F i i F i i i E T T F F F i F i E i E T i T T i F T i i T i i F i i i ?+?+?+?+?+?+?+?+??????+?+?+?+?+?+********()*()*()*()*()*()*() 最右推导: E E T E T F E T i E F i E i i T i i F i i i i i E T F T F F F E F E T F E F F E i F T i F F i F i i i i i ?+?+?+?+?+?+?+?+?????+?+?+?+?+?+?+**********()*()*()*()*()*()*()*() 语法树:/********************************

编译原理第8章作业及习题参考答案

第八章 语法制导翻译和中间代码生成 1.给出下面表达式的逆波兰表示(后缀式): (1) a*(-b+c) (4) (A ∧B) ∨(?C ∨ D) (7) if(x+y)*z=0 then s ∶=(a+b)*c else s ∶=a*b*c 解(1) ab-c+* (4) AB ∧C ?D ∨∨ (7) xy+z*0=sab+c*:=sab*c*:=¥(注:¥表示if-then-else 运算) 2. 请将表达式-(a+b)*(c+d)-(a+b+c)分别表示成三元式、间接三元式和四元式序列。 答案:三元式 (1) (+ a, b) (2) (+ c, d) (3) (* (1), (2)) (4) (- (3), /) (5) (+ a, b) (6) (+,(5),c) (7) (- (4), (6)) 间接三元式 间接三元式序列 间接码表 (1) (+ a, b) (1) (2) (+ c, d) (2) (3) (* (1), (2)) (3) (4) (- (3), /) (4) ¥ = := * := + x y z s + c x a b s * c * a b

(5) (- (4), (1)) (1) (6) (- (4), (5)) (5) (6) 四元式 (1) (+, a, b, t1) (2) (+, c, d, t2) (3) (*, t1, t2, t3) (4) (-, t3, /, t4) (5) (+, a, b, t5) (6) (+, t5, c, t6) (6) (-, t4, t6, t7) 3. 采用语法制导翻译思想,表达式E 的"值"的描述如下: 产生式 语义动作 (0) S ′→E {print E.VAL} (1) E →E1+E2 {E.VAL ∶=E1.VAL+E2.VAL} (2) E →E1*E2 {E.VAL ∶=E1.VAL*E2.VAL} (3) E →(E1) {E.VAL ∶=E1.VAL} (4) E →n {E.VAL ∶=n.LEXVAL} 如果采用LR 分析法,给出表达式(5 * 4 + 8) * 2的语法树并在各结点注明语义值VAL 。 4. 假如习题3中表达式E 的“值”有两种类型:整型和实型。语义处理增加"类型匹配检查",请给出相应的语义描述。 S ’ * E1 E2 E0 E3 2 E5.V AL=5 8 5 * E5 E6 + E4 4 E6.V AL=4 E4.V AL=8 E3.V AL=20 E1.V AL=28 E2.V AL=2 E0.V AL=56 Print(56)

编译原理复习(有答案)

第一章引论 1.编译过程的阶段 由词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成六个阶段 2.编译程序的概念 3.编译程序的结构 例:(B)不是编译程序的组成部分。 A. 词法分析器; B. 设备管理程序 C. 语法分析程序; D. 代码生成程序 4.遍的概念 对源程序(或其中间形式)从头至尾扫描一次并进行有关加工处理,生成新的中间形式或最终目标程序,称为一遍。 5.编译程序与解释程序的区别 例:解释程序和编译程序是两类程序语言处理程序,它们的主要区别在于(D)。 A. 单用户与多用户的差别 B. 对用户程序的差错能力 C. 机器执行效率 D. 是否生成目标代码 第三章文法和语言 文法的概念 字母表、符号串和集合的概念及运算 例:(ab|b)*c 与下面的那些串匹配?(ACD) A. ababbc; B. abab; C. c; D. babc; E. aaabc 例:ab*c*(a|b)c 与后面的那些串匹配?(BC) A.acbbc B.abbcac C.abc D.acc 例:(a|b)a+(ba)*与后面的那些串匹配? (ADE)A.ba B.bba C.ababa D.aa E.baa 文法的定义(四元组表示) 文法G定义为四元组(V N,V T,P,S) V N:非终结符集 V T:终结符集 P:产生式(规则)集合 S:开始符号(或识别符号) 例:给定文法,A::= bA | cc,下面哪些符号串可由其推导出(①② ⑤)。 ①cc ②b*cc ③b*cbcc ④bccbcc ⑤bbbcc 什么是推导 例:已知文法G: E->E+T|E-T|T T->T*F|T/F|F F->(E)|i 试给出下述表达式的推导:i*i+i 推导过程:E->E+T ->T+T ->T*F+T ->F*F+T ->i*F+T ->i*i+T ->i*i+F ->i*i+i ●句型、句子的概念 例:假设G一个文法,S是文法的开始符 号,如果S=>*x,则称x是句型。 例:对于文法G,仅含终结符号的句型称 为句子。 ●语言的形式定义 例:设r=(a|b|c)(x|y|z),则L(r)中元素为 9个。 例:文法G产生式为S→AB,A→aAb|ε, B→cBd|cd,则B∈L(G)。 A. ababcd; B. ccdd; C. ab; D. aabb ●等价文法 例:如果两个文法描述了同一个语言,则这两个文法是等价文法。 ●文法的类型 0型:左边至少有一个非终结符 1型:右边长度>=左边长度 2型:左边有且仅有一个非终结符 3型:形如:A->aB,A->a 各类型文法都是逐级包含关系, 例:文法S→abC|c,bC→d是几型文法?0 型 例:文法S→abC,bC→ad是几型文法?1 型 例:文法G[A]:A→ε,A→aB,B→Ab,B→a 是几型文法?2型 例:文法S→a|bC,C→d是几型文法? 3

编译原理习题及答案(整理后)

第一章 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、编译程序各阶段得工作都涉及到。 a.语法分析b.表格管理c.出错处理 d.语义分析e.词法分析 2、编译程序工作时,通常有阶段。 a.词法分析b.语法分析c.中间代码生成 d.语义检查e.目标代码生成 三、填空题 1、解释程序与编译程序得区别在于。 2、编译过程通常可分为5个阶段,分别就是、语法分析、代码优化与目标代码生成。 3、编译程序工作过程中,第一段输入就是,最后阶段得输出为程序。

各章练习题(编译原理)

第三章复习重点:1.文法与语言的对应关系 思路要点:注意结构拆分 技巧:如何将表示语言的通用字符串形式作适当的“切割”? 例:已知语言:L1 = {a x b2x c y | x, y >= 0},给出此语言的文法,并证明此语言是上下文无关语言。 提示:该题实际上要求为相应语言设计上下文无关文法。 一个文法设计好后,严格来说应当证明此文法是否对应于该语言。 解:G[S]:S →AB A →ε | aAbb B →ε | cB 推导过程: S ? AB +? a x Ab2x B /*使用A →aAbb x次*/ ? a x b2x B /*使用A →ε一次*/ ? a x b2x c x B /*使用B →cB x次*/ ? a x b2x c x/*使用B →ε一次*/ 举一反三:已知语言L2 = {a x b2y c y | x, y >= 0},给出此语言的文法,并证明此语言是上下文无关语言。 解:G[S]:S →AB A →ε | aA B →ε | bBcc 练习:14:写出下列语言对应的文法 (1).{a n b n a m b m|n,m≥0}

2. {1n 0m 0m 0n |n,m ≥0} 3. {1n 0m 0m 0n |n ≥0,m>0} 4. { a n b m c k |n,m,k ≥0} G1: S —>AA G2: S —>AB A —>aAb|ε A —>aAb|ε B —>aBb|ε G: S —>1S0 S —>A A —>0A1 A —>ε G: S →1S0|A S →1S0|0A1 A →0A1|01 A →0A1|ε 2. 给出文法,证明文法符号串是否为文法的句型,若是句型,找出这个句型的所有短语、直接短语、句柄。 1. 令文法G [E ]为: Z →bMb M →a|(L L →Ma ) ① 符号串b(Ma)b 是否为该文法的一个句型,并证明。 ② 若此符号串是句型,指出这个句型的所有短语、直接短语、句柄。 1)(5分)证明:S=> bMb=>b(Lb=>b(Ma)b 所以,符号串b(Ma)b 是该文法的一个句型。 (2)(5分)短语: Ma), (Ma), b(Ma)b 直接短语: Ma) 句柄: Ma) 练习: (10分)已知文法G[T]: T →T*F | F ;F →F ↑P | P ; P →(T) | i (1)用最右推导法证明β:T*P ↑(T*F) 是G[T]的一个句型; (2)画出β的语法树; (3)写出β的全部短语、直接短语和句柄。 (1) T=>T*F=>T*F ↑P=>T*F ↑(T)=> T*F ↑(T*F) =>T*P ↑(T*F) 证毕。 (2) 如图 T T * F F ↑ P P T * T F ( ) 第3题 语法树 (3)短语:T*P ↑(T*F) ;P ↑(T*F) ;(T*F) ;T*F ;P 直接短语:T*F ;P

理论第七章 练习题 答案

1.食物中毒特点的( )是指发病潜伏期短,来势急剧,短时间内可能有多人发病,发病曲线呈突然上升趋势 A.相似性 B.暴发性 C.季节性 D.非传染性 E.传染性 答案:B 解析:食物中毒特点的暴发性是指发病潜伏期短,来势急剧,短时间内可能有多人发病,发病曲线呈突然上升趋势。 2.既能维持成人的健康又能促进儿童生长发育的蛋白质是 A.豆球蛋白 B.胶质蛋白 C.酪蛋白 D.麦胶蛋白 E玉米胶蛋白 答案:C 解析:完全蛋白质所含必需氨基酸种类齐全、数量充

足、比例适当,不但能维持成人的健康,并能促进儿童生长发育。如乳类中的酪蛋白、乳白蛋白,蛋类中的卵白蛋白、卵磷蛋白,肉类中的白蛋白、肌蛋白,大豆中的大豆蛋白等。 3.长期每天摄取食盐18克以上,患下列哪种疾病的可能性最大 A.高血脂 B.高血压病 C糖尿病 D.胃癌 E.糖尿病 答案:B 解析:导致高血压的饮食大多数是高钠饮食 4.下列关于食品安全定义正确的是 A.食品安全是指在常规的条件下长期食用,对食用者不产生不良反应的实际担保 B.食品安全是指在常规的使用方式和用量的条件下食用,对食用者不产生不良反应的实际担保 C食品安全是指在常规的使用方式和用量的条件下长期食用,对食用者不产生不良反应的担保

D.食品安全是指在常规的使用方式和用量的条件下长期食用,对食用者不产生不良反应的实际担保 E食品安全是指在常规的用量的条件下长期食用,对食用者不产生不良反应 答案:D 解析:食品安全是指在常规的使用方式和用量的条件下长期食用,对食用者不产生不良反应的实际担保。食品安全是一个大的综合概念,它涉及食品卫生、食品质量、食品营养等相关方面的内容以及食品(食物)种植、养殖、加工、包装、贮藏、运输、销售、消费等环节。这里的不良反应包括由于偶然摄入所导致的急性毒性和长期少量摄入所导致的慢性毒性,如致癌和致畸作用等。 5.人体每日从膳食中摄取的钙、镁、钾等矿物质属于 A.常量元素 B.微量元素 C.宏量营养素 D.微量营养素 E极微量元素 答案:A 解析:矿物质中有的在人体内含量较多,大于体重的

编译原理课后习题答案-清华大学-第二版

第1章引论 第1题 解释下列术语: (1)编译程序 (2)源程序 (3)目标程序 (4)编译程序的前端 (5)后端 (6)遍 答案: (1) 编译程序:如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语言,则此翻译程序称为编译程序。 (2) 源程序:源语言编写的程序称为源程序。 (3) 目标程序:目标语言书写的程序称为目标程序。 (4) 编译程序的前端:它由这样一些阶段组成:这些阶段的工作主要依赖于源语言而与目标机无关。通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶 段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符 号表管理等工作。 (5) 后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和符号表操作。 (6) 遍:是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。 第2题 一个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么?并画出编译程序的总体结构图。 答案: 一个典型的编译程序通常包含8个组成部分,它们是词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和错误处理程序。其各部分的主要功能简述如下。 词法分析程序:输人源程序,拼单词、检查单词和分析单词,输出单词的机内表达形式。 语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。 语义分析程序:进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表中。

目标代码生成程序:将优化后的中间代码程序转换成目标代码程序。 表格管理程序:负责建立、填写和查找等一系列表格工作。表格的作用是记录源程序的各类信息和编译各阶段的进展情况,编译的每个阶段所需信息多数都从表格中读取,产生的中间结果都记录在相应的表格中。可以说整个编译过程就是造表、查表的工作过程。需要指出的是,这里的“表格管理程序”并不意味着它就是一个独立的表格管理模块,而是指编译程序具有的表格管理功能。 错误处理程序:处理和校正源程序中存在的词法、语法和语义错误。当编译程序发现源程序中的错误时,错误处理程序负责报告出错的位置和错误性质等信息,同时对发现的错误进行适当的校正(修复),目的是使编译程序能够继续向下进行分析和处理。 注意:如果问编译程序有哪些主要构成成分,只要回答六部分就可以。如果搞不清楚,就回答八部分。 第3题 何谓翻译程序、编译程序和解释程序?它们三者之间有何种关系? 答案: 翻译程序是指将用某种语言编写的程序转换成另一种语言形式的程序的程序,如编译程序和汇编程序等。 编译程序是把用高级语言编写的源程序转换(加工)成与之等价的另一种用低级语言编写的目标程序的翻译程序。 解释程序是解释、执行高级语言源程序的程序。解释方式一般分为两种:一种方式是,源程序功能的实现完全由解释程序承担和完成,即每读出源程序的一条语句的第一个单词,则依据这个单词把控制转移到实现这条语句功能的程序部分,该部分负责完成这条语句的功

编译原理第七章练习题

第7节习题 一、单项选择题 1、中间代码生成所依据的是。 a.语法规则 b.词法规则 c.语义规则 d.等价变换规则 2、四元式之间的联系是通过实现的。 a.指示器 b.临时变量 c.符号表 d.程序变量 3、后缀式ab+cd+/可用表达式来表示。 a.a+b/c+d b.(a+b)/(c+d) c.a+b/(c+d) d.a+b+c/d 4、表达式(┓A∨B)∧(C∨D)的逆波兰表示为。 a. ┓AB∨∧CD∨ b. A┓B∨CD∨∧ c. AB∨┓CD∨∧ d. A┓B∨∧CD∨ 5 所对应的表达式为。 a.A+B+C+D b.A+(B+C)+D c.(A+B)+C+D d.(A+B)+(C+D) 6、四元式表示法的优点为。 a.不便于优化处理,但便于表的更动 b.不便于优化处理,但节省存储空间 c.便于优化处理,也便于表的更动 d.便于表的更动,也节省存储空间 7、终结符具有属性。 a.传递 b.继承 c.抽象 d.综合 解答 1、选c。 2、四元式之间的联系是通过临时变量实现的,故选b。 3、选b。 4、选b。 5、选d。 6、四元式表示法的优点与间接三元式相同,故选c。 7、选d。 二、多顶选择题 1、中间代码主要有。 a.四元式b.二元式c.三元式d.后缀式e.间接

三元式 2、下面中间代码形式中,能正确表示算术表达式a+b+c 的有 。 a .ab+c+ b .abc++ e .a+b+c 3、在下面的 语法制导翻译中,采用拉链-回填技术。 a .赋值语句 b .goto 语句 c .条件语句 d .循环语句 4、下列 中间代码形式有益于优化处理。 a .三元式 b .四元式 c .间接三元式 d .逆波兰表示法 e .树形表示 法 5、在编译程序中安排中间代码生成的目的是 。 a .便于进行存储空间的组织 b .利于目标代码的优化 c .利于编译程序的移植 d .利于目标代码的移植 e .利于提高目标代码的质量 6、下面的中间代码形式中, 能正确表示算术表达式 a .ab+c* b .abc*+ c .a+b*c 7、三地址代码语句具体实现通常有 表示方法。 a .逆波兰表示 b .三元式 c .间接三元式 d .树形表示 e .四元式 解答 1、选a 、c 、d 、e 。 2、b 、d 的中间代码不能正确表示a+b+c ,而e 不是中间代码:故选a 、c 。 3、凡涉及到跳转的语句都需要采用拉链——回填技术,故选 b 、c 、d 。 4、选b 、c 。 5、选b 、d 。 6、选b 、e 。 7、选b 、c 、e 。

编译原理复习题及答案

编译原理复习题及答案一、选择题 1.一个正规语言只能对应( B ) A 一个正规文法 B 一个最小有限状态自动机 2.文法G[A]:A→εA→aB B→Ab B→a是( A ) A 正规文法 B 二型文法 3.下面说法正确的是( A ) A 一个SLR(1)文法一定也是LALR(1)文法 B 一个LR(1)文法一定也是LALR(1)文法 4.一个上下文无关文法消除了左递归,提取了左公共因子后是满足LL(1)文法的( A ) A 必要条件 B 充分必要条件 5.下面说法正确的是( B ) A 一个正规式只能对应一个确定的有限状态自动机 B 一个正规语言可能对应多个正规文法 6.算符优先分析与规范归约相比的优点是( A ) A 归约速度快 B 对文法限制少 7.一个LR(1)文法合并同心集后若不是LALR(1)文法( B ) A 则可能存在移进/归约冲突 B 则可能存在归约/归约冲突 C 则可能存在移进/归约冲突和归约/归约冲突 8.下面说法正确的是( A ) A Lex是一个词法分析器的生成器 B Yacc是一个语法分析器 9.下面说法正确的是( A ) A 一个正规文法也一定是二型文法 B 一个二型文法也一定能有一个等价的正规文法 10.编译原理是对(C)。 A、机器语言的执行 B、汇编语言的翻译 C、高级语言的翻译 D、高级语言程序的解释执行

11.(A)是一种典型的解释型语言。 A.BASIC B.C C.FORTRAN D.PASCAL 12.把汇编语言程序翻译成机器可执行的目标程序的工作是由(B)完成的。 A. 编译器 B. 汇编器 C. 解释器 D. 预处理器 13.用高级语言编写的程序经编译后产生的程序叫(B) A.源程序?B.目标程序C.连接程序D.解释程序14.(C)不是编译程序的组成部分。 A.词法分析程序 B.代码生成程序? C.设备管理程序 D.语法分析程序 15.通常一个编译程序中,不仅包含词法分析,语法分析,语义分析,中间代码生成,代码优化,目标代码生成等六个部分,还应包括(C)。 A.模拟执行器B.解释器?C.表格处理和出错处理 ??? D.符号执行器16.编译程序绝大多数时间花在(D)上。 A.出错处理B.词法分析C.目标代码生成D.表格管理 17.源程序是句子的集合,(B)可以较好地反映句子的结构。 A. 线性表 B. 树 C. 完全图 D. 堆栈 18.词法分析器的输出结果是(D)。 A、单词自身值 B、单词在符号表中的位置 C、单词的种别编码 D、单词的种别编码和自身值 19.词法分析器不能(D) A. 识别出数值常量 B. 过滤源程序中的注释 C. 扫描源程序并识别记号 D. 发现括号不匹配 20.文法:G:S→xSx | y所识别的语言是(D)。 A、xyx B、(xyx)* C、x*yx* D、x n yx n(n≥0) 21.如果文法G是无二义的,则它的任何句子α(A) A.最左推导和最右推导对应的语法树必定相同 B.最左推导和最右推导对应的语法树可能不同 C.最左推导和最右推导必定相同 D.可能存在两个不同的最左推导,但它们对应的语法树相同 22.正则文法(A)二义性的。 A. 可以是 B. 一定不是 C. 一定是 23.(B)这样一些语言,它们能被确定的有穷自动机识别,但不能用正则表达式表示。 A. 存在 B. 不存在 C. 无法判定是否存在 24.给定文法A→bA | ca,为该文法句子的是(C)

编译原理 作业答案

《编译原理》第一次作业参考答案 一、下列正则表达式定义了什么语言(用尽可能简短的自然语言描述)? 1.b*(ab*ab*)* 所有含有偶数个a的由a和b组成的字符串. 2.c*a(a|c)*b(a|b|c)* | c*b(b|c)*a(a|b|c)* 答案一:所有至少含有1个a和1个b的由a,b和c组成的字符串. 答案二:所有含有子序列ab或子序列ba的由a,b和c组成的字符串. 说明:答案一要比答案二更好,因为用自然语言描述是为了便于和非专业的人员交流,而非专业人员很可能不知道什么是“子序列”,所以相比较而言,答案一要更“自然”. 二、设字母表∑={a,b},用正则表达式(只使用a,b, ,|,*,+,?)描述下列语言: 1.不包含子串ab的所有字符串. b*a* 2.不包含子串abb的所有字符串. b*(ab?)* 3.不包含子序列abb的所有字符串. b*a*b?a* 注意:关于子串(substring)和子序列(subsequence)的区别可以参考课本第119页方框中的内容. ~\(≧▽≦)/~ ~\(≧▽≦)/~ ~\(≧▽≦)/~ ~\(≧▽≦)/~ ~\(≧▽≦)/~ ~\(≧▽≦)/~ ~\(≧▽≦)/~ ~\(≧▽≦)/~ 《编译原理》第二次作业参考答案 一、考虑以下NFA: 1.这一NFA接受什么语言(用自然语言描述)? 所有只含有字母a和b,并且a出现偶数次或b出现偶数次的字符串. 2.构造接受同一语言的DFA. 答案一(直接构造通常得到这一答案):

答案二(由NFA构造DFA得到这一答案): 二、正则语言补运算 3.画出一个DFA,该DFA恰好识别所有不含011子串的所有二进制串. 1.画出一个DFA,该DFA恰好识别所有不含011子串的所有二进制串.

最新编译原理小题答案

《编译原理》常见题型 一、填空题 1.编译程序的工作过程一般可以划分为词法分析,语法分析,中间代码生成,代码优化(可省) ,目标代码生成等几个基本阶段。 2.若源程序是用高级语言编写的,目标程序是机器语言程序或汇编程序,则其翻译程序称为编译程序. 3.编译方式与解释方式的根本区别在于是否生成目标代码. 5.对编译程序而言,输入数据是源程序,输出结果是目标程序. 7.若源程序是用高级语言编写的,目标程序是机器语言程序或汇编程序,则其翻译程序称为编译程序。 8.一个典型的编译程序中,不仅包括词法分析、语法分析、中间代码生成、代码优化、目标代码生成等五个部分,还应包括表格处理和出错处理。其中,词法分析器用于识别单词。 10.一个上下文无关文法所含四个组成部分是一组终结符号、一组非终结符号、一个开始符号、一组产生式。 12.产生式是用于定义语法成分的一种书写规则。 13.设G[S]是给定文法,则由文法G所定义的语言L(G)可描述为:L(G)={x│S=>*x,x∈VT*} 。 14.设G是一个给定的文法,S是文法的开始符号,如果S * ?x(其中x∈V*),则称x是 文法的一个句型。 15.设G是一个给定的文法,S是文法的开始符号,如果S * ?x(其中x∈V T*),则称x是文 法的一个句子。 16.扫描器的任务是从源程序中识别出一个个单词符号。 17.语法分析最常用的两类方法是自上而下和自下而上分析法。 18.语法分析的任务是识别给定的终结符串是否为给定文法的句子。 19.递归下降法不允许任一非终结符是直接左递归的。 20.自顶向下的语法分析方法的关键是如何选择候选式的问题。 21.递归下降分析法是自顶向下分析方法。 22.自顶向下的语法分析方法的基本思想是:从文法的开始符号开始,根据给定的输入串并按照文法的产生式一步一步的向下进行直接推导,试图推导出文法的句子,使之与给定的输入串匹配。 23.自底向上的语法分析方法的基本思想是:从给定的终结符串开始,根据文法的规则一步一步的向上进行直接归约,试图归约到文法的开始符号。 24.自底向上的语法分析方法的基本思想是:从输入串入手,利用文法的产生式一步一步地 向上进行直接归约,力求归约到文法的开始符号。 26.在LR(0)分析法的名称中,L的含义是自左向右的扫描输入串,R的含义是最 左归约,0 的含义是向貌似句柄的符号串后查看0个输入符号。 31.终结符只有综合属性,它们由词法分析器提供。

编译原理课后答案

第二章 2.3叙述由下列正规式描述的语言 (a) 0(0|1)*0 在字母表{0, 1}上,以0开头和结尾的长度至少是2的01串 (b) ((ε|0)1*)* 在字母表{0, 1}上,所有的01串,包括空串 (c) (0|1)*0(0|1)(0|1) 在字母表{0, 1}上,倒数第三位是0的01串 (d) 0*10*10*10* 在字母表{0, 1}上,含有3个1的01串 (e) (00|11)*((01|10)(00|11)*(01|10)(00|11)*)* 在字母表{0, 1}上,含有偶数个0和偶数个1的01串 2.4为下列语言写正规定义 C 语言的注释,即以 /* 开始和以 */ 结束的任意字符串,但它的任何前缀(本身除外)不以 */ 结尾。 [解答] other → a | b | … other 指除了*以外C 语言中的其它字符 other1 → a | b | … other1指除了*和/以外C 语言中的其它字符 comment → /* other* (* ** other1 other*)* ** */ (f) 由偶数个0和偶数个1构成的所有0和1的串。 [解答] 由题目分析可知,一个符号串由0和1组成,则0和1的个数只能有四种情况: x 偶数个0和偶数个1(用状态0表示); x 偶数个0和奇数个1(用状态1表示); x 奇数个0和偶数个1(用状态2表示); x 奇数个0和奇数个1(用状态3表示); 所以, x 状态0(偶数个0和偶数个1)读入1,则0和1的数目变为:偶数个0和奇数个1(状态1) x 状态0(偶数个0和偶数个1)读入0,则0和1的数目变为:奇数个0和偶数个1(状态2) x 状态1(偶数个0和奇数个1)读入1,则0和1的数目变为:偶数个0和偶数个1(状态0) x 状态1(偶数个0和奇数个1)读入0,则0和1的数目变为:奇数个0和奇数个1(状态3) x 状态2(奇数个0和偶数个1)读入1,则0和1的数目变为:奇数个0和奇数个1(状态3) x 状态2(奇数个0和偶数个1)读入0,则0和1的数目变为:偶数个0和偶数个1(状态0) x 状态3(奇数个0和奇数个1)读入1,则0和1的数目变为:奇数个0和偶数个1(状态2) x 状态3(奇数个0 和奇数个1)读入0,则0和1的数目变为:偶数个0和奇数个1(状态1) 因为,所求为由偶数个0和偶数个1构成的所有0和1的串,故状态0既为初始状态又为终结状态,其状态转换图: 由此可以写出其正规文法为: S0 → 1S1 | 0S2 | ε S1 → 1S0 | 0S3 | 1 S2 → 1S3 | 0S0 | 0 S3 → 1S2 | 0S1 在不考虑S0 → ε产生式的情况下,可以将文法变形为: S0 = 1S1 + 0S2 S1 = 1S0 + 0S3 + 1 S2 = 1S3 + 0S0 + 0 S3 = 1S2 + 0S1 所以: S0 = (00|11) S0 + (01|10) S3 + 11 + 00 (1) S3 = (00|11) S3 + (01|10) S0 + 01 + 10 (2) 解(2)式得: S3 = (00|11)* ((01|10) S0 + (01|10)) 代入(1)式

相关主题
文本预览
相关文档 最新文档