编译原理附标准答案五
编译原理 全部参考答案
第二章P-36-6(1)L(G)是0~9组成的数字串;(2)最左推导:N⇒ND⇒NDD⇒NDDD⇒DDDD⇒0DDD⇒01DD⇒012D⇒0127N⇒ND⇒DD⇒3D⇒34N⇒ND⇒NDD⇒DDD⇒5DD⇒56D⇒568最右推导:N⇒ND⇒N7⇒ND7⇒N27⇒ND27⇒N127⇒D127⇒0127N⇒ND⇒N4⇒D4⇒34N⇒ND⇒N8⇒ND8⇒N68⇒D68⇒568P-36-7G(S):(没有考虑正负符号问题)S→P|APP→1|3|5|7|9A→AD|NN→2|4|6|8|PD→0|N或者:(1)S→ABC|CA→1|2|3|4|5|6|7|8|9B→BA|B0|εC→1|3|5|7|9P-36-8G(E):E→T|E+T|E-TT→F|T*F|T/FF→(E)|i最左推导:E⇒E+T⇒T+T⇒F+T⇒i+T⇒i+T*F⇒i+F*F⇒i+i*F⇒i+i*iE⇒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*iE⇒T⇒T*F⇒T*(E)⇒T*(E+T)⇒T*(E+F)⇒T*(E+i)⇒T*(T+i)⇒T*(F+i)⇒T*(i+i)⇒F*(i+i)⇒i*(i+i)语法树:SiSeSiSiiSiS i S eS iiP-36-9句子:iiiei 有两个语法树: S ⇒iSeS ⇒iSei ⇒iiSei ⇒iiiei S ⇒iS ⇒iiSeS ⇒iiSei ⇒iiiei因此iiiei 是二义性句子,因此 该文法是二义性的。
P-36-10 S →TS|T T →(S)|()P-36-11L1: G(S): S →AC A →aAb|ab C →cC|ε L2: G(S): S →AB A →aA|ε B →bBc|bc L3: G(S): S →AB A →aAb|ε B →aAb|ε L4: G(S): S →1S0|A A →0A1|ε或者:S →A|B A →0A1|ε B →1B0|A 第三章(1)Ei+i+iE +TE +TT F iF iF iEE +TT F iT *FF iii+i*i Ei-i-iE-TE -TT F iF iF i确定化:最小化:{0,1,2,3,4,5},{6}{0,1,2,3,4,5}0={1,3,5} {0,1,2,3,4,5}1={1,2,4,6} {0,1,2,3,4},{5},{6} {0,1,2,3,4}0={1,3,5} {0,1,2,3},{4},{5},{6}{0,1,2,3}0={1,3} {0,1,2,3}1={1,2,4} {0,1},{2,3},{4},{5},{6}{0,1}0={1} {0,1}1={1,2} {2,3}0={3} {2,3}1={4} {0},{1},{2,3},{4},{5},{6}P64-8(1)(0|1)*01(2)(1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)*(0|5)|(0|5)(3)0*1(0|10*1)* | 1*0(1|01*0)*P84-12(a)a最小化:{0,1} {2,3}{0,1}a={1},{0,1}b={2}{2,3}a={0,3},{2,3}={3}{0,1},{2},{3}a(b)已经确定化,只需最小化:{0,1},{2,3,4,5}{0,1}a = {1} {0,1}b = {2,4}{2,3,4,5}a = {1,3,0,5} {2,3,4,5}b = {2,3,4,5}又:{2,4}a = {1,0} {2,4}b = {3,5} {3,5}a={3,5} {3,5}b = {2,4} 分划为:{0,1},{2,4},{3,5}{0,1}a = {1} {0,1}b = {2,4}{2,4}a = {1,0} {2,4}b = {3,5}{3,5}a = {3,5} {3,5}b = {2,4}所以不能再分aP64-14正规式:(0|10)*还可以:然后再确定化,最小化,结果应该一样。
编译原理习题及答案(整理后)
第一章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、编译程序工作过程中,第一段输入就是,最后阶段得输出为程序。
4、编译程序就是指将程序翻译成程序得程序。
单选解答1、将编译程序分成若干个“遍”就是为了使编译程序得结构更加清晰,故选b。
2、构造编译程序应掌握源程序、目标语言及编译方法等三方面得知识,故选d。
3、对编译而言,变量既持有左值又持有右值,故选c。
4、编译程序打交道最多得就就是各种表格,因此选d。
5、目标代码包括汇编指令代码、可重定位指令代码与绝对指令代码3种,因此不就是目标代码得只能选d。
《编译原理》课后习题答案
第7 题证明下述文法G[〈表达式〉]是二义的。
〈表达式〉∷=a|(〈表达式〉)|〈表达式〉〈运算符〉〈表达式〉〈运算符〉∷=+|-|*|/答案:可为句子a+a*a 构造两个不同的最右推导:最右推导1 〈表达式〉=>〈表达式〉〈运算符〉〈表达式〉=>〈表达式〉〈运算符〉a=>〈表达式〉* a=>〈表达式〉〈运算符〉〈表达式〉* a=>〈表达式〉〈运算符〉a * a=>〈表达式〉+ a * a=>a + a * a最右推导2 〈表达式〉=>〈表达式〉〈运算符〉〈表达式〉=>〈表达式〉〈运算符〉〈表达式〉〈运算符〉〈表达式〉=>〈表达式〉〈运算符〉〈表达式〉〈运算符〉a=>〈表达式〉〈运算符〉〈表达式〉* a=>〈表达式〉〈运算符〉a * a=>〈表达式〉+ a * a=>a + a * a第8 题文法G[S]为:S→Ac|aB A→ab B→bc该文法是否为二义的?为什么?答案:对于串abc(1)S=>Ac=>abc (2)S=>aB=>abc即存在两不同的最右推导。
所以,该文法是二义的。
或者:对输入字符串abc,能构造两棵不同的语法树,所以它是二义的。
第9 题考虑下面上下文无关文法:S→SS*|SS+|a(1)表明通过此文法如何生成串aa+a*,并为该串构造语法树。
(2)G[S]的语言是什么?答案:(1)此文法生成串aa+a*的最右推导如下S=>SS*=>SS*=>Sa*=>SS+a*=>Sa+a*=>aa+a*(2)该文法生成的语言是:*和+的后缀表达式,即逆波兰式。
第10 题文法S→S(S)S|ε(1) 生成的语言是什么?(2) 该文法是二义的吗?说明理由。
答案:(1)嵌套的括号(2)是二义的,因为对于()()可以构造两棵不同的语法树。
第11 题令文法G[E]为:E→T|E+T|E-T T→F|T*F|T/F F→(E)|i证明E+T*F 是它的一个句型,指出这个句型的所有短语、直接短语和句柄。
哈工大编译原理习题及答案
1.1何谓源程序、目标程序、翻译程序、编译程序和解释程序?它们之间可能有何种关系?1.2一个典型的编译系统通常由哪些部分组成?各部分的主要功能是什么?1.3选择一种你所熟悉的程序设计语言,试列出此语言中的全部关键字,并通过上机使用该语言以判明这些关键字是否为保留字。
1.4选取一种你所熟悉的语言,试对它进行分析,以找出此语言中的括号、关键字END以及逗号有多少种不同的用途。
1.5试用你常用的一种高级语言编写一短小的程序,上机进行编译和运行,记录下操作步骤和输出信息,如果可能,请卸出中间代码和目标代码。
第一章习题解答1.解:源程序是指以某种程序设计语言所编写的程序。
目标程序是指编译程序(或解释程序)将源程序处理加工而得的另一种语言(目标语言)的程序。
翻译程序是将某种语言翻译成另一种语言的程序的统称。
编译程序与解释程序均为翻译程序,但二者工作方法不同。
解释程序的特点是并不先将高级语言程序全部翻译成机器代码,而是每读入一条高级语言程序语句,就用解释程序将其翻译成一段机器指令并执行之,然后再读入下一条语句继续进行解释、执行,如此反复。
即边解释边执行,翻译所得的指令序列并不保存。
编译程序的特点是先将高级语言程序翻译成机器语言程序,将其保存到指定的空间中,在用户需要时再执行之。
即先翻译、后执行。
2.解:一般说来,编译程序主要由词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、代码优化程序、目标代码生成程序、信息表管理程序、错误检查处理程序组成。
3.解:C语言的关键字有:auto break case char const continue default do double else enum externfloat for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while。
【编译原理】1-5章课后习题答案精心整理版,可直接缩印
第一章1.2 计算机执行用高级语言编写的程序有哪些途径?它们之间的主要区别是什么? 【解答】计算机执行用高级语言编写的程序主要有两种途径:解释和编译。
这两种途径的主要区别在于:解释方式下不生成目标代码程序,而编译方式下生成目标代码程序。
从执行速度上看,编译型的高级语言比解释型的高级语言要快,但解释方式下的人机界面比编译型好,便于程序调试。
(在解释方式下,翻译程序事先并不采用将高级语言程序全部翻译成机器代码程序,然后执行这个机器代码程序的方法,而是每读入一条源程序的语句,就将其解释(翻译)成对应其功能的机器代码语句串并执行,而所翻译的机器代码语句串在该语句执行后并不保留,最后再读入下一条源程序语句,并解释执行。
这种方法是按源程序中语句的动态执行顺序逐句解释(翻译)执行的,如果一语句处于一循环体中,则每次循环执行到该语句时,都要将其翻译成机器代码后再执行。
在编译方式下,高级语言程序的执行是分两步进行的:第一步首先将高级语言程序全部翻译成机器代码程序,第二步才是执行这个机器代码程序。
因此,编译对源程序的处理是先翻译,后执行。
)1.3 请画出编译程序的总框图。
如果你是一个编译程序的总设计师,设计编译程序时应当考虑哪些问题? 【解答】编译程序总框图如图1-1所示。
作为一个编译程序的总设计师,首先要深刻理解被编译的源语言其语法及语义;其次,要充分掌握目标指令的功能及特点,如果目标语言是机器指令,还要搞清楚机器的硬件结构以及操作系统的功能;第三,对编译的方法及使用的软件工具也必须准确化。
总之,总设计师在设计编译程序时必须估量系统功能要求、硬件设备及软件工具等诸因素对编译程序构造的影响等。
第二章2.1 正规式M1和M2等价是指:M1和M2所识别的语言集相等。
2.2 什么是扫描器?扫描器的功能是什么?【解答】扫描器就是词法分析器,它接受输入的源程序,对源程序进行词法分析并识别出一个个单词符号,其输出结果是单词符号,供语法分析器使用。
5编译原理,陈意云 ,课后答案5
2019/2/12
luanj@
8
7.4 (续)
• D -> ID_LIST:T ID_LIST -> ID_LIST,ID_LIST|id • D -> { Init(idtable) } ID_LIST:T { for each name in idtable do enter(name, T.type, offset); offset := offset + T.width; end; } ID_LIST -> { Init(idtable1); Init(idtable2) } ID_LIST1,ID_LIST2 { merge(idtable1, idtable2, idtable) } ID_LIST -> id { add(idtable, ); }
编译原理习题课(5)
栾 俊 luanj@ 2019/2/12
7.1
• 把算术表达式 –(a+b)*(c+d)+(a+b-c) 翻译成: (a) 语法树 (b) 有向无环图 (c) 后缀表示 (d) 三地址代码
2019/2/12
luanj@
{ enter(, T.type, offset); offset += T.width; } { T.type = integer; T.width = 4; } { T.type = real; T.width = 8; } { T.type = array(num.val, T1.type); T.width = num.val * T1.width; } { T.type = pointer(T1.type); T.width = 4; }
2019/2/12 luanj@ 11
清华版编译原理课后答案
第三章1、L(G[S])={ abc }2、L(G[N])={ n位整数或空字符串| n>0 }3、G[E]:E—>E+D | E-D | DD—>0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 94、L(G[Z])={ a n b n | n>0 }5、(1) 考虑不包括“0”的情况G[S]:S—>0S | ABC | 2 | 4| 6 | 8A—>1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9B—>AB | 0B | εC—>0 | 2 | 4 | 6 | 8考虑包括“0”的情况:G[S]:S—>AB | CB—>AB | CA—>0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9C—>0 | 2 | 4 | 6 | 8(2)方法1:G[S]:S—> ABC | 2 | 4 | 6 | 8A—>1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9B—>AB | 0B | εC—>0 | 2 | 4 | 6 | 8方法2:G[S]:S—>AB | CB—> AB | 0B | C | 0A—> 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9C—>2 | 4 | 6 | 86、设<表达式>为E,<项>为T,<因子>为F,注:推导过程不能省略,以下均为最左推导(1) E => T => F => i(4) E => E+T => T+T => T*F+T => F*F+T => i*F+T => i*i+T => i*i+F => i*i+i(6) E => E+T => T+T => F+T => i+T => i+T*F => i+F*F => i+i*F => i+i*I7、<表达式><表达式>*<表达式><表达式>+<表达式>i i i<表达式><表达式>+<表达式>i <表达式>*<表达式>i i8、是有二义性的,因为句子abc 有两棵语法树(或称有两个最左推导或有两个最右推导)最左推导1:S => Ac => abc 最左推导2:S => aB => abc 9、(1)(2) 该文法描述了变量a 和运算符+、*组成的逆波兰表达式10、(1) 该文法描述了各种成对圆括号的语法结构(2) 是有二义性的,因为该文法的句子()()存在两种不同的最左推导: 最左推导1:S => S(S)S => (S)S => ()S => ()S(S)S => ()(S)S => ()()S => ()() 最左推导2:S => S(S)S => S(S)S(S)S => (S)S(S)S => ()S(S)S => ()(S)S => ()()S => ()()11、(1) 因为从文法的开始符E 出发可推导出E+T*F ,推导过程如下:E => E+T => E+T*F ,所以E+T*F 是句型。
编译原理习题及答案
2. 正规式 M 1 和 M 2 等价是指_____。 A.( ) M1 和 M2 的状态数相等 C.( ) M1 和 M2 所识别的语言集相等 B.( ) M1 和 M2 的有向边条数相等 D.( ) M1 和 M2 状态数和有向边条数相等
3. 文法 G:S→xSx|y 所识别的语言是_____。 A.( ) xyx B.( ) (xyx)* C.( ) xnyxn(n≥0) D.( ) x*yx*
10.编译程序使用_____区别标识符的作用域。 A. ( ) 说明标识符的过程或函数名 B.( ) 说明标识符的过程或函数的静态层次 C.( ) 说明标识符的过程或函数的动态层次 D. ( ) 标识符的行号 三、填空题(每空 1 分,共 10 分) 1.计算机执行用高级语言编写的程序主要有两种途径:___解释__和__编译___。 2.扫描器是__词法分析器___,它接受输入的__源程序___,对源程序进行___词法分析__并识别出一个个 单词符号,其输出结果是单词符号,供语法分析器使用。 3.自上而下分析法采用___移进__、归约、错误处理、___接受__等四种操作。 4.一个 LR 分析器包括两部分:一个总控程序和___一张分析表__。 5.后缀式 abc-/所代表的表达式是___a/(b-c)__。 6.局部优化是在__基本块___范围内进行的一种优化。 四、简答题(20 分) 1. 简要说明语义分析的基本功能。 答:语义分析的基本功能包括: 确定类型、类型检查、语义处理和某些静态语义检 查。
4lr0分析器所谓lr0分析是指从左至右扫描和自底向上的语法分析且在分析的每一步只须根据分析栈当前已移进和归约出的全部文法符号并至多再向前查看0个输入符号就能确定相对于某一产生式左部符号的句柄是否已在分析栈的顶部形成从而也就可以确定当前所应采取的分析动作移进还是按某一产生式进行归约等
编译原理部分课后答案,仅供参考
第一章编译程序概述1.1什么是编译程序编译程序是现代计算机系统的基本组成部分之一,而且多 数计算机系统都含有不止一个高级语言的编译程序。
对有些高 级语言甚至配置了几个不同性能的编译程序。
1.2编译过程概述和编译程序的结构编译程序完成从源程序到目标程序的翻译工作,是一个复 杂的整体的过程。
从概念上来讲,一个编译程序的整个工作过 程是划分成阶段进行的,每个阶段将源程序的一种表示形式转 换成另一种表示形式,各个阶段进行的操作在逻辑上是紧密连 接在一起的。
一般一个编译过程划分成词法分析、语法分析、 语义分析、中间代码生成,代码优化和目标代码生成六个阶段,这是一种典型的划分方法。
事实上,某些阶段可能组合在一起, 这些阶段间的源程序的中间表示形式就没必要构造岀来了。
我 们将分别介绍各阶段的任务。
另外两个重要的工作:表格管理 和岀错处理与上述六个阶段都有联系。
编译过程中源程序的各 种信息被保留在种种不同的表格里,编译各阶段的工作都涉及 到构造、查找或更新有关的表格,因此需要有表格管理的工作; 如果编译过程中发现源程序有错误,编译程序应报告错误的性 质和错误发生的地点,并且将错误所造成的影响限制在尽可能 小的范围内,使得源程序的其余部分能继续被编译下去,有些 编译程序还能自动校正错误, 这些工作称之为岀错处理。
图1.3表示了编译的各个阶段。
图1.3编译的各个阶段它不生成目标代码,它每遇到一个语句,就要对这个语句进行 分析以决定语句的含义,执行相应的动作。
右面的图示意了它 的工作机理第二章:PL/O 编译程序问答第1题 PL/0语言允许过程嵌套定义和递归调用,试问 它的编译程序如何解决运行时的存储管理。
答:PL/0语言允许过程嵌套定义和递归调用,它的编译程序在运行时采用了栈式动态存储管理。
(数组CODE 存放的只读目 标程序,它在运行时不改变。
)运行时的数据区S 是由解释程序 定义的一维整型数组,解释执行时对数据空间S 的管理遵循后进先岀规则,当每个过程(包括主程序)被调用时,才分配数据 空间,退出过程时,则所分配的数据空间被释放。
编译原理-第五章习题答案
上一页
下一页
11
例:5.3 文法:SaAcBe A bAb B d 句子:abbcde
步骤 (1) (2) (3) (4) (5) (6)
栈
# #a #ab #aA #aAb #aA #aAc #aAcd #aAcB #aAcBe #S
输入 abbcde# bbcde# bcde# bcde# cde# cde#
上一页
下一页
20
5)构造算符优先文法G的优先表的算法
思路:对文法中的每一个产生式的候选式检查,判断句型中相邻符号之间 的关系 来构造优先表; 具体算法: FOR 每条产生式P→X1X2…Xn FOR i=1 TO n-1 IF Xi,Xi+1∈VT,THEN Xi=Xi+1; IF i ≤n-2且Xi,Xi+2∈VT,Xi+1∈VN THEN Xi=Xi+2; IF Xi∈VT,Xi+1∈VN THEN FOR FIRSTVT(Xi+1)中的每个a Xi <. a; NEXT IF Xi∈VN,Xi+1∈VT THEN FOR LASTVT(Xi)中的每个a DO a .> Xi+1; NEXT NEXT NEXT
上一页
下一页
8
例:5.1 P85 文法: E→T|E+T T→F|T*F F→i|(E) 句型:i1*i2+i3其中:短语有i1、i2、i3、i1*i2、 i1*i2+i3 直接短语:i1、i2、i3;句柄:i1 例:5.2 P85 文法如上 E 句型:E+T*F+i 短语:E+T*F+i,E+T*F,T*F,i 直接短语:T*F和i E + 句柄:T*F
(完整版)编译原理习题及答案(整理后)
8、规范推导是最左推导,故选 d。
9、由 T→T,…和 T→(… 得 FIRSTVT(T))={(,,)};
由 T→S 得 FIRSTVT(S)⊂FIRSTVT(T),而 FIRSTVT(S)={b,∧,(};即
FIRSTVT(T)={b,∧,(,,};
因此选 c。
10、d 11、c 12、b 13、b 14、b
标语言
第二章
一、单项选择题
1、文法 G:S→xSx|y 所识别的语言是 。
a. xyx
b. (xyx)* c. xnyxn(n≥0) d. x*yx*
2、文法 G 描述的语言 L(G)是指 。
a. L(G)={α|S⇒+ α , α∈VT*}
b. L(G)={α|S⇒* α, α∈VT*}
c. L(G)={α|S⇒* α,α∈(VT∪VN*)} d. L(G)={α|S⇒+ α, α∈(VT∪VN*)}
6、一个文法所有句型的集合形成该文法所能接受的语言。
五、简答题
1、句柄 2、素短语
3、语法树
4、归约
六、问答题
1、给出上下文无关文法的定义。
2、文法 G[S]:
() () () () ()
5、推导
S→aSPQ|abQ
QP→PQ
bP→bb
bQ→bc
cQ→cc (1)它是 Chomsky 哪一型文法? (2)它生成的语言是什么? 3、按指定类型,给出语言的文法。 L={aibj|j>i≥1}的上下文无关文法。 4、有文法 G:S→aAcB|Bd
a. 23 B. 42 c. 30 14、规范归约指 。
d. 17
a. 最左推导的逆过程
b. 最右推导的逆过程
编译原理练习题标准标准答案
一、填空题:1-01.编译程序地工作过程一般可以划分为词法分析,语法分析,语义分析,之间代码生成,代码优化等几个基本阶段,同时还会伴有表格处理和出错处理.1-02.若源程序是用高级语言编写地,目标程序是机器语言程序或汇编程序,则其翻译程序称为编译程序•1-03.编译方式与解释方式地根本区别在于是否生成目标代码.1-04.翻译程序是这样一种程序,它能够将用甲语言书写地程序转换成与其等价地用乙语言书写地程序.1-05.对编译程序而言,输入数据是源程序,输出结果是目标程序.1-06.如果编译程序生成地目标程序是机器代码程序,则源程序地执行分为两大阶段:编译阶段和运行阶段如果编译程序生成地目标程序是汇编语言程序,则源程序地执行分为三个阶段:编译阶段,汇编阶段和运行阶段.b5E2RGbCAP1-07.若源程序是用高级语言编写地,目标程序是机器语言程序或汇编程序,则其翻译程序称为编译程序.1-08. 一个典型地编译程序中,不仅包括词法分析、语法分析、中间代码生成、代码优化、目标代码生成等五个部分,还应包括表格处理和出错处理.其中,词法分析器用于识别单词.p1EanqFDPw1-09.编译方式与解释方式地根本区别为是否生成目标代码.2-01.所谓最右推导是指:任何一步a = B都是对a中最右非终结符进行替换地.2-02. 一个上下文无关文法所含四个组成部分是一组__________ 生式.DXDiTa9E3d2-03.产生式是用于定义语法成分地一种书写规则.2-04.设G[S]是给定文法,则由文法G所定义地语言 L(G)可描述为:L(G) = {x | S. x,x € V T*} . RTCrpUDGiT2-05.设G是一个给定地文法,S是文法地开始符号,如果S. x (其中x € V*),则称x是文法地一个处型.5PCzVD7HxA2-06.设G是一个给定地文法,S是文法地开始符号,如果S上x(其中x € V T*),则称x是文法地一个句_ 子.jLBHrnAlLg3-01.扫描器地任务是从源程序中识别出一个个单词符号.4-01.语法分析最常用地两类方法是自上而下和自下而上分析法.4- _________________________________________________________02.语法分析地任务是识别给定地终极符串是否为给定文法地句子_____________________________________________ .4-03.递归下降法不允许任一非终极符是直接左递归地.4-04.自顶向下地语法分析方法地关键是如何选择候选式地问题.4-05.递归下降分析法是自顶向上分析方法.4-06.自顶向下地语法分析方法地基本思想是:从文法地开始符号开始,根据给定地输入串并按照文法地产生式一步一步地向下进行直接推导,试图推导出文法地句子,使之与给定地输入串匹酉己.XHAQX74J0X5-01.自底向上地语法分析方法地基本思想是:从给定地终极符串开始,根据文法地规则一步一步地向上进行直接归约,试图归约到文法地开始符号.LDAYtRyKfE5-02.自底向上地语法分析方法地基本思想是:从输入串入手,利用文法地产生式一步一步地向上进行直接归约,力求归约到文法地开始符号 .Zzz6ZB2Ltk5-03.简单优先方法每次归约当前句型地句柄,算符优先方法每次归约当前句型地最左素短语,二者都是不断移进输入符号,直到符号栈顶出现可归约串地尾,再向前找到可归约串地头,然后归约.dvzfvkwMI15-04.在LR( 0)分析法地名称中,L地含义是自左向右地扫描输入串,R 地含义是最左归约,0地含义是向貌似句柄地符号串后查看0个输入符号•rqyn14ZNXI5-05.在SLR (1)分析法地名称中,S地含义是简单地•6-01.所谓属性文法是一个属性文法是一个三元组:A=(G, V, F), —个上下文无关文法G; —个属性地有穷集V和关于属性地断言或谓词地有穷集 F.每个断言与文法地某产生式相联.EmxvxOtOco6-02.综合属性是用于“自下而上”传递信息.6-03.继承属性是用于“自上而下”传递信息.6-04.终结符只有综合属性,它们由词法分析器提供.7-01.在使用高级语言编程时,首先可通过编译程序发现源程序地全部_A_错误和B 部分错误.SixE2yXPq5a.语法b.语义c.语用d.运行8-01.符号表中地信息栏中登记了每个名字地属性和特征等有关信息,如类型、种属、所占单元大小、地址等等.6ewMyirQFL8-02. 一个过程相应地 DISPLAY表地内容为现行活动记录地址和所有外层最新活动记录地地址.9-01. 一个过程相应地 DISPLAY表地内容为现行活动记录地址和所有外层最新活动记录地地址.9-02.常用地两种动态存贮分配办法是栈式动态分配和堆式动态分配.9-03.常用地参数传递方式有传地址,传值和传名.10-01.局部优化是局限于一个基本块范围内地一种优化.10-02.代码优化地主要目标是如何提高目标程序地运行速度和如何减少目标程序运行时所需地空间.kavU42VRUs、单选题:1-10. 一个编译程序中,不仅包含词法分析,语法分析,中间代码生成,代码优化,目标代码生成等五个部分,还应包括(1应其中,(2)b和代码优化部分不是每个编译程序都必需地词法分析器用于识别(3应语法分析器则可以发现源程序中地.她(1) a.模拟执行器 b.解释器 c.表格处理和出错处理 d. 符号执行器⑵ a.语法分析 b.中间代码生成 C.词法分析 d.目标代码生成⑶ a.字符串 b.语句 c.单词 d.标识符y6v3ALoS89⑷ a.语义错误 b.语法和语义错误 C.错误并校正 d.语法错误1-程序语言地语言处理程序是一种(1)a. (2)b 是两类程序语言处理程序,他们地主要区别在于11.(3)d. M2ub6vSTnP(1) a.系统软件 b.应用软件 c.实时系统 d.分布式系统(2) a.咼级语言程序和低级语言程序 b.解释程序和编译程序c.编译程序和操作系统d.系统程序和应用程序(3) a.单用户与多用户地差别 b.对用户程序地查错能力c.机器执行效率d.是否生成目标代码1-12. 汇编程序是将a翻译成b,编译程序是将c_翻译成d.a.汇编语言程序b.机器语言程序c.高级语言程序1-18.编译程序与具体地机器 a ,与具体地语言a.a. 有关b.无关1-19.使用解释程序时,在程序未执行完地情况下, a 重新执行已执行过地部分a.也能b.不可能1-20.编译过程中,语法分析器地任务就是 (1)分析单词是怎样构成地(3)分析语句和说明是如何构成程序地 b.(2)分析单词串是如何构成语句和说明地(4)分析程序地结构 a. (2)(3)b. (2)(3)(4)c. (1)(2)(3)d.(1)(2)(3)(4) zvpgeqJ1hkd. a 或者be. a 或者cf. b 或者c1-13.下面关于解释程序地描述正确地是b.(1) 解释程序地特点是处理程序时不产生目标代码 (2) 解释程序适用于 COBOL 和FORTRA N 语言 (3) 解释程序是为打开编译程序技术地僵局而开发地 a. (1)(2)b. (1)c. (1)(2)(3)d.(2)(3) OYujCfmUCw1-14.高级语言地语言处理程序分为解释程序和编译程序两种 .编译程序有五个阶段,而解释程序通常缺少(1)e 和(1)b.其中,(1)e 地目地是使最后阶段产生地目标代码更为高效.eUts8ZQVRd与编译系统相比,解释系统 (2)d.解释程序处理语言时,大多数采用地是_(3L 方法.⑷a 就是一种典型地 解释型语言.sQsAEJkW5T (1) : a. 中间代码生成 b.目标代码生成 c.词法分析 d.语法分析e.代码优化GMslasNXkA(2) : a. 比较简单,可移植性好,执行速度快b. 比较复杂,可移植性好,执行速度快c. 比较简单,可移植性差,执行速度慢d.比较简单,可移植性好,执行速度慢(3) : a. 源程序命令被逐个直接解释执行b.先将源程序转化为之间代码,再解释执行c.先将源程序解释转化为目标程序 ,在执行d.以上方法都可以(4) : a. BASIC b. C c. FORTRAN d. PASCAL TirRGchYzg1-15.用高级语言编写地程序经编译后产生地程序叫 b .用不同语言编写地程序产生 b 后,可用g 连接在一起生成机器可执行地程序 .在机器中真正执行地是 e. 7EqZcWLZNXa.源程序b.目标程序c.函数d.过程e.机器指令代码 f.模块g.连接程序 h.程序库1-16.要在某一台机器上为某种语言构造一个编译程序 ,必须掌握下述三方面地内容 :c , d , ______f . lzq7IGfO2E a.汇编语言 b. 高级语言 c. 源语言 d. 目标语言e.程序设计方法f.编译方法1-17.由于受到具体机器主存容量地限制 诸阶段地工作往往是(2」进行地. (1) a. 过程b.程序c.批量 ⑵a.顺序b.并行c.成批g.测试方法h.机器语言,编译程序几个不同阶段地工作往往被组合成d.遍 d.穿插(1)d ,1-21.编译程序是一种常用地、软件•a. 应用b.系统1-22.编写一个计算机高级语言地源程序后,到正式上机运行之前,一般要经过b这几步.(1)编辑 (2)编译 (3)连接 (4)运行a. (1)⑵⑶⑷b. (1) (2)(3)c. (1) (3)d.(1) (4)1-23.编译程序必须完成地工作有 a.(1)词法分析⑵语法分析(3)语义分析(4) 代码生成之间代码生成(6) 代码优化a. (1)(2)(3)(4) b. (1) (2)(3)(4)(5) c. (1) (2)(3)(4)(5)(6) NrpoJac3v1d.(1)(2)(3)(4)(6) e. (1)(2)(3)(5)(6)1-24 .“用高级语言书写地源程序都必须通过编译,产生目标代码后才能投入运行”这种说法 a.a.不正确b.正确1-25.把汇编语言程序翻译成机器可执行地目标程序地工作是由b完成地.a.编译器b.汇编器c.解释器d.预处理器1-26.编译程序生成地目标程序b是机器语言地程序.a. 一定b.不一定1-27.编译程序生成地目标程序b是可执行地程序.a. 一定b.不一定1-28 .编译程序是一种 B .A.汇编程序B. 翻译程序C. 解释程序D. 目标程序1nowfTG4KI1-29 .按逻辑上划分, 编译程序第二步工作是 C .A.语义分析B. 词法分析C. 语法分析D. 代码优化fjnFLDa5Zo1-30 •通常一个编译程序中,不仅包含词法分析,语法分析,中间代码生成,代码优化,目标代码生成等五个部分,还应包括 C . tfnNhnE6e5A.模拟执行器B.解释器C.表格处理和出错处理D.符号执行器2-07 .文法G所描述地语言是 C 地集合.A.文法G地字母表V中所有符号组成地符号串B.文法G地字母表V地闭包V*中地所有符号串C.由文法地开始符号推出地所有终极符串D.由文法地开始符号推出地所有符号串2-08 .乔姆斯基(Chomsky)把文法分为四种类型,即0型、1型、2型、3型.其中3型文法是B . HbmVN777sLA.短语文法B.正则文法C. 上下文有关文法D. 上下文无关文法2-09.文法 G[N]= ({b} , {N , B}, N, {Nb | bB, bN}),该文法所描述地语言是C .A. L(G[N])={b i | i > 0}B. L(G[N])={b 2i | i > 0}C. L(G[N])={b | i > 0}D. L(G[N])={b | i > 1}2-10 .一个句型中地最左B称为该句型地句柄.可选项有:A.短语B.简单短语C.素短语D.终结符号2-11 •设G 是一个给定地文法,S 是文法地开始符号,如果 S .x (其中x € V),则称x 是文法G 地一个B . V7l4jRB8HsA.候选式B. 句型C. 单词D. 产生式2-12 •一个上下文无关文法G 包括四个组成部分,它们是:一组非终结符号,一组终结符号,一个开始符号,以及一组 D.83ICPA59W9 A.句子 B. 句型 C. 单词 D. 产生式2-13.文法 G[E]:T I E+ T —F I T * F F T a I ( E )该文法句型E+ F* (E + T )地简单短语是下列符号串中地 B .◎ ( E+ T ) ②E+ T ③F ④F* (E + T )可选项有:A )①和③B )②和③C )③和④D )③2-14 .若一个文法是递归地,则它所产生地语言地句子A.是无穷多个B.是有穷多个C.是可枚举地 3-02 •词法分析器用于识别 C .4-08.编译程序中语法分析器接收以 A 为单位地输入.D.个数是常量A.句子B. 句型C.单词D.产生式4-07.在语法分析处理中,FIRST 集合、A.非终极符集B. 终极符集FOLLOW 集合、 SELECT 集合均是 BmZkklkzaaPC. 字母表D.状态集A.单词B. 表达式C.产生式 D. 句子5-06 .在自底向上地语法分析方法中,分析地关键是A.寻找句柄B.寻找句型C.消除递归D.5-07.在LR 分析法中,分析栈中存放地状态是识别规范句型A.句柄B.前缀 C.活前缀选择候选式 AVktR43bpw 地DFA 状态.B. C.D. LR(0)项目 ORjBnOwcEd、是非题(下列各题,你认为正确地,请在题干地括号内打“ 错地打“X” .)1-31 .计算机高级语言翻译成低级语言只有解释一种方式 (X) 2MiJTy0dTT 1-32.在编译中进行语法检查地目地是为了发现程序中所有错误(X) gIiSpiue7A1-34.甲机上地某编译程序在乙机上能直接使用地必要条件是甲机和乙机地操作系统功能完全相同.(X )uEhOU1Yfmh2-15.正则文法其产生式为 A a, A Bb, A,B € V N , a 、b€ V T . 4-09.每个文法都能改写为LL (1)文法.(X )4- 10.递归下降法允许任一非终极符是直接左递归地 5-08.算符优先关系表不一定存在对应地优先函数.(V )(V) IAg9qLsgBX(V) WWGHWVVHPE(X) asfpsfpi4k5-10.LR法是自顶向下语法分析方法(X) ooeyYZTjj15-11.简单优先文法允许任意两个产生式具有相同右部5-12.若一个句型中出现了某产生式地右部,则此右部一定是该句型地句柄 (X)四、名词解释1- 35.扫描遍 _____ 指编译程序对源程序或中间代码程序从头到尾扫描一次2- 16.短语一一设G[Z]是给定文法,w=xuy € V+,为该文法地句型,如果满足下面两个条件:① Z xUy ; ② U 「u;则称句型xuy 中地子串u 是句型xuy 地短语.2-17.简单短语一一设 G[Z]是给定文法,w=xuy € S ,为该文法地句型,如果满足下面两个条件:v4bdyGious① Z — xUy ; ② 4 u ;则称句型xuy 中地子串u 是句型xuy 地简单短语(或直接短语).2-18.句柄——一个句型中地最左简单短语称为该句型地句柄4- 11.语法分析--按文法地产生式识别输入地符号串是否为一个句子地分析过程 4- 12.选择符集合 SELECT--给定上下文无关文法地产生式a , A € V N , a € V *,若a ^ s ,则SELECT(A> a )=FIRST( a ),其中如果 a —、s ,贝U SELECT(A> a )=FIRST( a s ) U FOLLOW(A),FIRST( a s )表示 FIRST( a )地非{ s }兀素.J0bm4qMpJ9Aw a 年3是文法G'中地一个规范推导,G'是G 地拓广文法,符号串丫是a B 地前缀,则称 丫是G 地,也是G'地一个活前缀.其中S'为文法开始符号.或:可归前缀地任意首 部. XVauA9grYP5- 15.可归前缀——是指规范句型地一个前缀,这种前缀不含句柄之后地任何符号 5-16.LR(0)项目一一把产生式右部某位置上标有圆点地产生式称为相应文法地一个 LR(0)项目.5- 17.最左素短语一一设有文法 G[S],其句型地素短语是一个短语,它至少包含一个终结符,并除自身外不包含其它素短语,最左边地素短语称最左素短语.bR9C6TJscw6- 05.语义规则一一对于文法地每个产生式都配备了一组属性地计算规则,称为语义规则 6- 06.翻译方案一一将属性文法中地语义规则用花括号{ }括起来,插在产生式右部地合适地方,指明语义规则地计算次序,陈述一些细节,得到一种语义动作与语法分析交错地表示方法,以表述语义动作在语法 分析过程中地执行时刻,称之为翻译方案 .pN9LBDdtrd7- 03.后缀式 -- 一种把运算量(操作数)写在前面把算符写在后面(后缀)地表示法.即一个表达式E 地后缀形式可以如下定义:(1)如果E 是—个变量或常量,则 E 地后缀式是E 自身.⑵ 如果E 是Eop E 2形式地表达式,这里 op 是任何二元操作符,则 E 地后缀式为&'巨’op,这里 E'和E 2‘分别为E 1和E 2地后缀式.DJ8T7nHuGT(X) BkeGulnkxl 5-13. 一个句型地句柄一定是文法某产生式地右部 7-02.数组元素地地址计算与数组地存储方式有关 •(V)8-03.在程序中标识符地出现仅为使用性地.9-04.对于数据空间地存贮分配, FORTRA 采(V) PgdOOsRIMo(X) 3cdXwckm15(X) h8c52WOngM5-14.活前缀一一若S' a(3)如果E是( EJ形式地表达式,则日地后缀式就是E地后缀式.答:一个过程地活动指地是该过程地一次执行.就是说,每次执行一个过程体,产生该过程体地一个活动9-07.活动记录答:为了管理过程在一次执行中所需要地信息,使用一个连续地存储块,这样一个连续地存储块称为活动记录.9-08.活动地生存期答:指地是从执行某过程体第一步操作到最后一步操作之间地操作序,包括执行过程时调用其它过程花费地时间.10-06. 基本块地DAG.答:一个基本块地 DAG是—种其结点带有下述标记或附加信息地DAG.(1)图地叶结点(没有后继地结点)以一标识符(变量名)或常数作为标记,表示该结点代表该变量或常数地值.如果叶结点用来代表某变量A地地址,则用addr( A)作为该结点地标记.通常把叶结点上作为标记地标识符加上下标0,以表示它是该变量地初值 .QF81D7bvUA(2)图地内部结点(有后继地结点)以一运算符作为标记,表示该结点代表应用该运算符对其后继结点所代表地值进行运算地结果.4B7a9QFw9h(3)图中各个结点上可能附加一个或多个标识符,表示这些变量具有该结点所代表地值五、简答题:2-19什么是句子?什么是语言?答:设G是一个给定地文法,S是文法地开始符号,如果S〔x(其中x € V T*),则称x是文法地一个句子.设G[S]是给定文法,则由文法G所定义地语言L(G)可描述为:L(G) = {x | S . x,x € V T*} . ix6iFA8xoX 2-20.已知文法 G[E]为:T|E+T|E-T—F|T*F|T/FF^( E) |i①该文法地开始符号(识别符号)是什么?②请给出该文法地终结符号集合V T和非终结符号集合M.③找出句型T+T*F+i地所有短语、简单短语和句柄.解:①该文法地开始符号(识别符号)是 E.②该文法地终结符号集合V T={+、-、*、/、(、)、 i}.非终结符号集合M={E、T、F}.③句型 T+T*F+I地短语为i、T*F、第一个 T、T+T*F+i;简单短语为i、T*F、第一个T;句柄为第一个T.2-21.已知文法 G[S]为:S T dABA T aA|aB T Bb| £①G[S]产生地语言是什么?②G[S]能否改写为等价地正规文法?8 /注6带+号地结点为初始状态;解:① G[S]产生地语言是 L(G[S])={da n b m| n> 1,m>0}.②G[S]能改写为等价地正规文法,其改写后地等价地正规文法 G[S / ]为:S J dA A T aA|aB|a BT bB|b2- 22.设有语言L(G)={ada R| a € (a,b) *,a R为a 之逆},试构造产生此语言地上下文无关文法G.wt6qbkCyDE解:根据题义,可知a R为a 之逆地含义就是句子中地符号 a 、b 以d 为中心呈左右对称出现;由于a€ (a,b) *, 所以a 、b 地个数可以为零.所以可构造产生此语言地上下文无关文法 G[S]为:S T aSa|bSb|d Kp5zH46zRk3- 03 .简述DFA 与NFA 有何区别?答:DFA 与NFA 地区别表现为两个方面:一是NFA 可以若干个开始状态,而DFA 仅只一个开始状态.另一方 面,DFA 地映象M 是从KXE 到K,而NFA 地映象M 是从KX 刀到K 地子集,即映象 M 将产生一个状态 集合(可能为空集),而不是单个状态.YI4HdOAA61 3- 04.试给出非确定自动机地定义. 答:一个非确定地有穷自动机(NFA M 是一个五元组:M=( K, X, f, S , Z).其中:1. K 是一个有穷集,它地每个元素称为一个状态;2. 工是一个有穷字母表,它地每个元素称为一个输入符号,所以也称工为输入符号表;3. f 是状态转换函数,是在 KX X * T K 地子集地映射,即,f: K X X *T 2K;表明在某状态下对于某输入符号可能有多个后继状态; ch4PJx4BII4. S ( K 是- -个非空初态集;5. Z ( K 是- -个终态集(可空). 3-05.为正规式(a|b ) *a(a|b)构造一个等价地确定地有限自动机.解答:3- 06.给定下列自动机,将其转换为确定地自动机qd3YfhxCzo注:带+号地结点为初始状态;带一号地结点为终止状态+AE dVG dd BC+ startSd* D(1) 把此自动机转换为确定自动机 DFA.⑵给出此DFA 地正则表达式. 解答:(1):有状态矩阵如图:501nNvZFisa bab=00,1 2二 0 01 21 2 —01 01 2-2 1 2-2 1 29 / 1 6 2+— d •+— d • S A ABCE G+[SA][A][A][BCE] [G] A BCE[A][BCE][G] BB[BCE][BCE] [DG]CC D[G][H]DD[DG][DH]EE G[H][H]G H[DH][DH]HH注:带+号地结点为初始状态;带一号地结点为终止状态3- 07.给定下列自动机:其中:开始状态:0终止状态:2⑵确定化,得到DFAS42ehLvE3M+db从而可得DFA如图:a(2)此DFA地正则表达式为:(aa *b b)(b ab) 4-13.消除下列文法 G[E]地左递归.E-T I T—T/F I FI E ) I i解答:消除文法G[E]地左递归后得到:E T TE'E'T -TE'I £T T FT'T'T /FT' I £F T ( E) I i4-14.在LL(1)分析法中丄L分别代表什么含义答:第一个L代表从左到右地扫描,第二个 4-15.自顶向下分析思想是什么?答:从开始符出发导出句型并一个符号开始符号可推导出给定地终结符串4-16.自顶向下地缺点是什么?或 a b (b ab)L代表每次进行最左推导.个符号地与给定终结符串进行匹配.因此判定给定终结符号串是正确句子.如果全部匹配成功,则表示.jW1viftGw9答:在推导过程中,如果对文法不做限制.那么产生式地选择成为无根据地,只好一一去试所有可能地产生式,直至成功为止.这种方法地致命弱点是不断地回溯,大大影响速度.xSODOYWHLP4-17 .LL (1)文法地定义是什么?答:一个上下文无关文法是 LL(1)文法地充分必要条件是每个非终结符A地两个不同产生式,A T a ,A T 3 ;满足 SELECT(A T a ) A SELECT(A T 3 )=①.其中,a、3 不能同时二& . LOZMklqlOw4-18 .什么是文法地左递归?答:一个文法含有下列形式地产生式之一时:1)A T A3 , A€ VN 3 € V*2)A T B3 , B T Aa , A、B€ VN a、3 € V* 则称该文法是左递归地.4-19.递归下降法地主要思想是什么?答:对每个非终结符按其产生式结构写出相应语法分析子程序 •因为文法递归相应子程序也递归,子程序地结构与产生式结构几乎一致 •所以称此种方法称为递归子程序法或递归下降法 • ZKZUQsUJed 5- 19.自底向上分析法地原理是什么?答:在采用自左向右扫描,自底向上分析地前提下,该类分析方法是从输入符号串入手,通过反复查找当 前句型地句柄(最左简单短语),并使用文法地产生式把句柄归约成相应地非终极符来一步步地进行分析地•最终把输入串归约成文法地开始符号, 表明分析成功.dGY2mcoKtT5-23.给定文法 G[Z] : rCYbSWRLIA1. Z T C s2. C T if E then3. S T A = E 其中: Z 、C 、S A 、E € V N ;4. E T E V Aif 、then 、=、V 、 i € V T5. E T A6. A T i2. Follow(Z) = {#}Follow(C) = {i} Follow(S) = {#}Follow(E) = {#, V ,then}Follow(A) = { = ,# , V ,then } 则可构造ACTIONGOTO0 ifthe n=V i#Z CSEAS 3121OKa) 构造此文法地LR(0)项目集规范族,并给出识别活前缀地 b) 构造其SLR( 1)分析表. G 中加入产生式 0. Z' T Z, 解答:1.首先拓广文法:在TuWrUpPpf X Z ' T Z I 7: C T if E . then 7qWAq9jPqE Z T . C SE T E . V AC T . if E thenI 9 : S TA = . EI i : Z ' T Z . E T . E V A 12: Z T C . sE T . A S T . A = E A T . i A T . iI 10: C T if E then . 13: C T if . E thenI 11: E T E V . AE T . E V AA T . iE T . AI 12: S T A = E . A T . iE T E . V A I 4: Z T C S .I 13: E T E V A .15: S T A . = E 16: A T i .DFA.然后得到新地文法 ,再求G 地识别全部活前缀地 DFA FyXjoFIMWh2 S6 4 53 S6 7 84 r 15 S96 「6 r 6 「6 r 67 S10 S118 「5 「5 r 59 S6 12 810 「211 S6 1312 S11 r 313 「4 「4 r 45-24. 设有文法G[S]:S T a AA T AbA T b求识别该文法所有活前缀地DFA.llVIWTNQFk解答:(1).首先拓广文法:在G中加入产生式0.S ' T S,然后得到新地文法G0.S S1.S T aA2.A T Ab3.A T b(2).再求G地识别全部活前缀地DFA6-07.语法制导翻译方法地基本思想是什么答:在语法分析过程中,每当使用一条产生式进行推导或归约时,就执行该产生式所对应地语义动作进行属性计算,完成对输入符号串地翻译.yhUQsDgRTI6-08.何谓“语法制导翻译”?答:在语法分析过程中,随着分析地步步进展,根据每个产生式所对应地语义子程序(或语义规则描述地语义动作)进行翻译地办法称作语法制导翻译.MdUZYnKS8l6-09.在一个属性文法中,对应于每个产生式A T a都有一套与之相关联地语义规则,每条规则地形式为b: = f (c1,c2…,ck),其中对于b地要求是什么?答:语义规则中地左部属性变量b被规定为只能是下述两种变量:①对应产生式左部符号地综合属性变量;②对应产生式右部符号地继承属性变量.7-05.常用地中间语言种类有哪几种?答:有逆波兰式、三地址代码、抽象语法树和DAG.8-06.符号表地作用有哪些?答:在编译程序中符号表用来存放语言程序中出现地有关标识符地属性信息,这些信息集中反映了标识符地语义特征属性•起主要作用是:09T7t6eTno①收集符号属性;②上下文语义地合法性检查地依据;③作为目标代码生成阶段地址分配地依据•9-09 .运行时存储器地划分是怎样地?答:运行时存储器地划分如下图所示•10-07.简述优化地原则是什么?答:编译程序提供地对代码优化必须遵循地原则是:(1)等价原则.经过优化后不应改变程序运行地结果•(2)有效原则.使优化后所产生地目标代码运行时间较短,占用地存储空间较小(3)合算原则.应尽可能以较低地代价取得较好地优化效果.10-08 •简述常用地优化技术有哪些?答:编译程序中常用地优化技术有:(1) 删除公共子表示式;(2) 复写传播;(3) 删除无用代码;(4) 代码外提;(5) 强度削弱;(6) 删除归纳变量;(7) 合并常量.10-09.设有基本块:⑴ a:=b-c(2)d:=a+4(3)e:=a-b(4)f:=a+4(5)b:=b+c(6)c:=b-f(7)b:=b-c(8) f:=b+f (9) a:=a-f (1) 画出DAG 图;(2) 假设基本块出口时只有 解答:(1) 给出DAG 如右:(2) 重写三地址代码如下:a:=b-c d:=a+4 f:=de:=a-b b:=b+c c:=c+d b:=b-c f:=b-d a:=a+d10-10.何谓优化?按所涉及地程序范围可分为哪几级优化?答:优化:对程序进行各种等价变换,使得从变换后地程序出发,能产生更有效地目标代码三种级别:局部优化、循环优化、全局优化.e5TfZQIUB510-11.设有基本块「:= 2 T 2:= 10/T 1 T s := S — R T 4:= S + R A := T 2 * T 4 B := A T 5:= S + R T 6:= T 3 * T 5(1)画出 DAGS;A, B 还被引用,请写出优化后地三地址代码序列 .s1SovAcVQMT 4:= S+ Ra, b 还被引用,请写出优化后地三地址代码序列(2)假设基本块出口时只有 解:(1)DAG:见右图(2) 优化后地四元式10 +b9 +e6 5 ++ 324 1 4cb8 c7山 11^A:= 5*T4 B:= T3+ T4GXRw1kFW5s版权申明本文部分内容,包括文字、图片、以及设计等在网上搜集整理•版权为个人所有This article in eludes some parts, in cludi ng text, pictures, and desig n. Copyright is pers onal own ership. UTREX49%9用户可将本文地内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律地规定,不得侵犯本网站及相关权利人地合法权利.除此以外,将本文任何内容或服务用于其他用途时,须征得本人及相关权利人地书面许可,并支付报酬.8PQN3NDYyPUsers mayuse the contents or services of this article for personal study, research or appreciation, and other non-commercial or non-profit purposes, but at the same time, they shall abide by the provisi ons of copyright law and other releva nt laws, and shall not infringe upon the legitimate rights of this website and its releva nt obligees. In additi on, when any content or service of this article is used for other purposes, writte n permissi on and remun erati on shall be obta ined from the pers on con cer ned and the releva nt obligee. mLPVzx7ZNw转载或引用本文内容必须是以新闻性或资料性公共免费信息为使用目地地合理、善意引用,不得对本文内容原意进行曲解、修改,并自负版权等法律责任.AHP35hB02dReproducti on or quotati on of the content of this article must be reas on able and good-faith citatio n for the use of n ews or in formative public free information. Itshall not misinterpret or modify the originalintention of the content of this article, and shall bear legal liabilitysuch as copyright. NDOCB14BT。
编译原理习题及答案(整理后)
第一章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、编译程序工作过程中,第一段输入是,最后阶段的输出为程序。
4、编译程序是指将程序翻译成程序的程序。
单选解答1、将编译程序分成若干个“遍”是为了使编译程序的结构更加清晰,故选b。
2、构造编译程序应掌握源程序、目标语言及编译方法等三方面的知识,故选d。
3、对编译而言,变量既持有左值又持有右值,故选c。
4、编译程序打交道最多的就是各种表格,因此选d。
5、目标代码包括汇编指令代码、可重定位指令代码和绝对指令代码3种,因此不是目标代码的只能选d。
(完整版)编译原理第五章作业参考答案
第五章自顶向下语法分析方法1.对文法G[S]S→a|∧|(T)T→T,S|S(1)给出(a,(a,a))和(((a,a),∧,(a)),a)的最左推导。
(2)对文法G,进行改写,然后对每个非终结符写出不带回溯的递归子程序。
(3)经改写后的文法是否是LL(1)的?给出它的预测分析表。
(4)给出输入串(a,a)#的分析过程,并说明该串是否为G的句子。
解:(1) (a,(a,a))的最左推导为S→(T)→(T,S)→(S,S)→(a,(T))→(a,(T,S))→(a,(S,a))→(a,(a,a))(((a,a),∧,(a)),a)的最左推导为S→(T)→(T,S)→(S,a)→((T),a)→((T,S),a)→((T,S,S),a)→((S,∧,(T)),a)→(((T),∧,(S)),a) →(((T,S),∧,(a)),a)→(((S,a),∧,(a)),a)→(((a,a),∧,(a)),a)(2)由于有T→T,S的产生式,所以消除该产生式的左递归,增中一个非终结符U有新的文法G/[S]:S→a|∧|(T)T→SUU→,SU|ε分析子程序的构造方法对满足条件的文法按如下方法构造相应的语法分析子程序。
(1) 对于每个非终结号U,编写一个相应的子程序P(U);(2) 对于规则U::=x1|x2|..|xn,有一个关于U的子程序P(U),P(U)按如下方法构造:IF CH IN FIRST(x1) THEN P(x1)ELSE IF CH IN FIRST(x2) THEN P(x2)ELSE ......IF CH IN FIRST(xn) THEN P(xn)ELSE ERROR其中,CH存放当前的输入符号,是一个全程变量;ERROR是一段处理出错信息的程序;P(xj)为相应的子程序。
(3) 对于符号串x=y1y2...yn;p(x)的含义为:BEGINP(y1);P(y2);...P(yn);END如果yi是非终结符,则P(yi)代表调用处理yi的子程序;如果yi是终结符,则P(yi)为形如下述语句的一段子程序IF CH=yi THEN READ(CH) ELSE ERROR即如果当前文法中的符号与输入符号匹配,则继续读入下一个待输入符号到CH中,否则表明出错。
编译原理课后答案第五章代码优化
第五章 代码优化
A= 0 I= 1
B1
B= J+ 1 B′2
L1: C= B+ I
B2
A= C+ A
if I= 100 g2oto L
第五章 代码优化
所以d必有通路到达M中任一结点ni,而M中任一结 点又可以通过n到达d(n→d为回边),从而M中任意两个 结点之间必有一通路,L中任意两个结点之间亦必有一 通路。此外,由M中结点性质可知:d到M中任一结点ni 的通路上所有结点都应属于M,ni到n的通路上所有结 点也都属于M。因此,L中任意两结点间通路上所有结 点都属于L,也即,L是强连通的。
L1: E= B*B
B3
F= F+ 2
E= E+ F
write(E)
if E> 100 g2oto L
halt B4 L2: F= F- B15 goto1 L
图5-1 程序流图
第五章 代码优化
5.4 基本块的DAG如图5-2所示。若: (1) b在该基本块出口处不活跃; (2) b在该基本块出口处活跃; 请分别给出下列代码经过优化之后的代码: (1) a=b+c (2) b=a-d (3) c=b+c (4) d=a-d
if I= 100 g2oto L
F
T
I= I+ 1 B3 goto 1L
L2: write AB4 halt
图5-5 习题5.8的程序流图
第五章 代码优化
(2) 很容易看出,B3→B2是流图中的一条有向边, 并且有B2 DOM B3,故B3→B2为流图中的一条回边。循 环可通过回边求得,即找出由结点B2、结点B3以及有通 路到达B3但不经过B2的所有结点。所以,由回边组成的 B3→B2循环是{ B2,B3}。
编译原理及其习题解答(武汉大学出版社)课件chap5
a, Z0 / aZ0 q0
ε, Z0 /ε
10
下推自动机 例2
例2:构造PDA M,识别语言L(M)={ωcωR|ω∈{a,b}* }。 解题思路:
(1)从状态q0接受句子ω ,将输入保存到栈中,状态不变, 直到看到中心标记c;
(2)当到达c时,将状态变为q1,栈不变; (3)将输入与栈顶内容匹配,状态不变,退栈,直至栈空。
上下文无关文法与下推自动机,是描述上下文无关语言 的不同方式。给定一个CFG和由它产生的语言L(G),必存在 一个下推自动机M接受语言L(M),使得L(M)= L(G),反之 亦然。给定CFG G,构造对应PDA M的过程可描述为:
(1)把文法的开始符号放到栈中。
(2)重复下述步骤: a.当栈顶为非终结符A时,则非确定地选择一个关于A的产生 式,并且把栈中的栈顶A替换为该产生式右边的符号串。 b.当栈顶为终结符a时,则读输入中的下一个符号,并把它 与a比较:匹配则转向(2),否则该非确定分支被拒绝。
FIRST(A)=FIRST(a)∪FIRST(cA)={a,c}
FIRST(B)=FIRST(b)∪FIRST(dB)={b,d}
26
练习题
1. 文法G[E]:
E→TE1
T→FT1 F→(E) | a
E1→+T E1 | ε
T1→*F T1 | ε
求G中的每一个符号的FIRST集合。 解:FIRST(E)=FIRST(T)=FIRST(F)={(, a} FIRST(E1)={+, ε} FIRST(T1)={*, ε}
8
下推自动机 例1 的PDA 状态转换图
例1:构造一个PDA M,能够识别语言L(M)={ anbn| n>=1 }。 a, Z0 / aZ0 a, a / aa q1
编译原理课后习题答案
第一章1.典型的编译程序在逻辑功能上由哪几部分组成?答:编译程序主要由以下几个部分组成:词法分析、语法分析、语义分析、中间代码生成、中间代码优化、目标代码生成、错误处理、表格管理。
2. 实现编译程序的主要方法有哪些?答:主要有:转换法、移植法、自展法、自动生成法。
3. 将用户使用高级语言编写的程序翻译为可直接执行的机器语言程序有哪几种主要的方式?答:编译法、解释法。
4. 编译方式和解释方式的根本区别是什么?答:编译方式:是将源程序经编译得到可执行文件后,就可脱离源程序和编译程序单独执行,所以编译方式的效率高,执行速度快;解释方式:在执行时,必须源程序和解释程序同时参与才能运行,其不产生可执行程序文件,效率低,执行速度慢。
第二章1.乔姆斯基文法体系中将文法分为哪几类?文法的分类同程序设计语言的设计与实现关系如何?答:1)0型文法、1型文法、2型文法、3型文法。
2)2. 写一个文法,使其语言是偶整数的集合,每个偶整数不以0为前导。
答:Z→SME | BS→1|2|3|4|5|6|7|8|9M→ε | D | MDD→0|SB→2|4|6|8E→0|B3. 设文法G为:N→ D|NDD→ 0|1|2|3|4|5|6|7|8|9请给出句子123、301和75431的最右推导和最左推导。
答:N⇒ND⇒N3⇒ND3⇒N23⇒D23⇒123N⇒ND⇒NDD⇒DDD⇒1DD⇒12D⇒123N⇒ND⇒N1⇒ND1⇒N01⇒D01⇒301N⇒ND⇒NDD⇒DDD⇒3DD⇒30D⇒301N⇒ND⇒N1⇒ND1⇒N31⇒ND31⇒N431⇒ND431⇒N5431⇒D5431⇒75431N⇒ND⇒NDD⇒NDDD⇒NDDDD⇒DDDDD⇒7DDDD⇒75DDD⇒754DD⇒7543D⇒75431 4. 证明文法S→iSeS|iS| i是二义性文法。
答:对于句型iiSeS存在两个不同的最左推导:S⇒iSeS⇒iiSesS⇒iS⇒iiSeS所以该文法是二义性文法。
编译原理课后答案 第五章
#)Na
#)N
#)
#
(
(
a
a
a
,
,
a
a
)
)
#
a,a)#
a,a)#
,a)#
,a)#
,a)#
a)#
a)#
)#
)#
#
#
S→(T)
T→SN
S→a .
N→,SN
S→a
N→ε
可见输入串(a,a)#是文法的句子。
satttss1给出对aaa的最左推导2改写文法去除左递归3判断新文法是否ll1文法如是给出其预测分析表4给出输入串aa的分析过程判断其是否文法g的句子
第五章
文法G[S]:S->a|^|(T)
T->T,S|S
(1)给出对(a,(a,a))的最左推导
(2)改写文法,去除左递归
(3)判断新文法是否LL1文法,如是,给出其预测分析表
(4)给出输入串(a,a)#的分析过程,判断其是否文法G的句子。
答:
(1)(a,(a,a))的最左推导为S→(T)→(T,S)→(S,S)→(a,(T))→(a,(T,S))→(a,(S,a))→(a,(a,a))
(2)改写文法为:
0) S→a
1) S→∧
2) S→( T )
3) T→S N
4) N→, S N
5) N→ε
(3)
非终结符
FIRST集
FOLLOW集
S
{a,∧,(}
{#,,,)}
T
{a,∧,(}
{)}
N
{,,,ε}
{)}
对左部为N的产生式可知:
FIRST(→,SN)={,}
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
练习5.1解答:输入(4*7+1)*2n,带注释的分析树如下:练习5.2解答: (1)根据表5.3中的语法制导定义建立表达式((a)+(b))的分析树和语法树(2)根据图5.17的翻译模式构造((a)+(b))的分析树和语法树练习5.3解答:设置下面的函数和属性:expr1||expr2:把表达式expr2拼写在表达式expr1后面。
deletep(expr):去掉表达式expr左端的‘(’和右端的‘)’。
E.expr,T.expr,F.expr:属性变量,分别表示E,T,F的表达式。
E.add,T.add,F.add,属性变量,若为true,则表示其表达式中外层有‘+’号,否则无‘+’号。
E.pmark,T.pmark,F.pmark,属性变量,若为true,表示E,T,F的表达式中左端为‘(’,右端是‘)’。
语法制导定义如下:产生式语义规则E -> E1 +T if(T.pmark==true)THEN E.expr=E1.expr||'+'||deletep(T.expr) ELSE E.expr:=E1.expr||'+'||T.expr;E.add:=true;E.pmark:=false;E -> T if(T.pmark==true)THEN E.expr:=deletep(T.expr)ELSE E.expr:=T.expr;E.add:=T.add;E.pmark:=false;T -> T1*F T.expr:=T1.expr||'*'||F.expr; T.add:=false;T.pmark:=false;T -> F T.expr:=F.expr; T.add:=F.add;T.pmark:=F.pmark;F -> (E) if(E.add==false)THEN BEGINF.expr:=E.expr;F.add:=false;F.pmark:=false;ENDELSE BEGINF.expr:='('||E.expr||')';F.add:=true;F.pmark:=true;END;F -> id F.expr:=id.lexval;F.add:=false;F.pmark:=false;练习5.4解答: (1)语法制导定义如下:产生式语义规则E -> E1+T if(E1.type==int) AND (T.type==int) THEN E.type:=intELSE E.type:=real;E -> T E.type:=T.type;T -> num T.type:=int;T -> num.num T.type:=real;(2)设E.pf和T.pf分别是E和T的前缀形式,||是两个字符串的连接,语法制导定义如下:产生式语义规则E -> E1+T if(E1.type==int) AND (T.type==int)THEN E.type:=intELSE BEGINE.type:=real;if(E1.type==int) AND (T.type==real)THEN E1.pf:='inttoreal'||E1.pfELSE if(E1.type==real)AND(T.type==int)THEN T.pf:='inttoreal'||T.pfEND;E.pf:='+'||E1.pf||T.pf;E -> T E.type:=T.type; E.pf:=T.pf;T -> num T.type:=int; T.pf:=int.lexval;T ->num.numT.type:=real; T.pf:=real.lexval;练习5.5解答: (1)用综合属性决定s.val的语法制导定义:产生式语义规则S -> L S.val:=L.val;S ->L1.L2S.val:=L1.val+L2.val*L2.p;L -> B L.val:=B.val; L.p:=2-1;L -> L1B L.val:=L1.val*2+B.val; L.p:=L.p*2-1;B -> 0 B.val:=0;B -> 1 B.val:=1;注:L.p表示恢复L.val的因子。
(2)分析:设B.c是B的综合属性,是B产生的位对最终值的贡献。
要求出B.c,必须求出B产生位的权,设B.i。
B.i的求法请参看下面的图示:另外,设L.fi为继承因子,L.fs为综合因子,语法制导定义如下:产生式语义规则S -> L L.i:=1; L.fi:=2; L.fs:=1; S.val:=L.val;S -> L1.L2L1.i=1; L1.fi=2; L1.fs:=1;L2.i=2-1; L2.fi=1; L2.fs:=2-1; S.val:=L1.val+L2.val;L -> B L.s:=L.i; B.i:=L.s; L.val:=B.c;L -> L1B L1.i:=L.i*L1.fi; L.s:=L1.s*L1.fs; B.i:=L.s;L.val:=L1.val+B.c;B -> 0 B.c:=0;B -> 1 B.c:=B.i;若把文法改写成如下形式,则语法制导定义会更清楚:S -> L.R | LL -> LB | BR -> RB | BB -> 0 | 1产生式语义规则S -> L L.i:=1; S.val:=L.val;S -> L.R L.i=1; R.i=2-1; S.val:=L.val+R.val;L -> L1B B.i:=L.i; L1.i:=L.i*2; L.val:=L1.val+B.c;L -> B B.i:=L.i; L.val:=B.c;R -> R1B R1.i:=R.i; R.s:=R1.s*2-1;B.i:=R.s;R -> B R.s:=R.i; B.i:=R.s; R.val:=B.c;B -> 0 B.c:=0;B -> 1 B.c:=B.i;练习5.6解答:产生式语义规则D -> D1,id D.type:=D1.type; addtype(id.entry,D1.type);D -> T id D.type:=T.type; addtype(id.entry,T.type);T -> int T.type:=int;T -> real T.type:=real;练习5.7解答:(1)产生式语义规则E -> TR R.i:=T.type; E.type:=R.s;R -> +TR1if(R.i==int) AND (T.type==int) THEN R1.i:=intELSE R1.i:=real;R.s:=R1.s;R -> εR.s:=R.i;T ->num.numT.type:=real;T -> num T.type:=int;(2)产生式语义规则E -> TR R.itype:=T.type; R.ipf:=T.pf;E.pf:=R.spf; E.type:=R.stype;R -> +TR1if(R.itype==int) AND (T.type==int)THEN R1.itype:=intELSE BEGINR1.itype:=real;if(R.itype==real) AND (T.type==int)THEN T.pf:='inttoreal'||T.pfELSE if(R.itype==int)AND(T.type==real)THEN R.ipf:='inttoreal'||R.ipfEND;R1.ipf:='+'||R.ipf||T.pf;R.stype:=R1.stype; R.spf:=R1.spf;R -> εR.stype:=R.itype; R.spf:=R.ipf;T -> num T.type:=int; T.pf:=int.lexval;T ->num.numT.type:=real; T.pf:=real.lexval;注:R.ipf是R的继承属性,是它的前缀表示。
R.spf是R的综合属性,是它的前缀表示。
练习5.8解答:设计两个函数lookup(name)和enter(name,type),lookup(name)查找符号表,若查到,则返回name在符号表中的地址;否则返回NULL。
enter(name,type)在符号表中建立name的符号表项,并填写上name的类型type。
翻译模式如下:D -> T {L.in:=T.type} LL -> {L1.in:=L.in}L1,id {if(lookup())then errorelse enter(,L.in)}L -> id {if(lookup())then errorelse enter(,L.in)}T -> int {T.type:=int}T -> real {T.type:=real}练习5.9解答:(1) 翻译模式如下:D -> id L {addtype(id.entry,L.type)}L -> , id L1 {L.type:=L1.type;addtype(id.entry,L.type)}L -> : T {L.type:=T.type}T -> integer {T.type:=integer}T -> real {T.type:=real}(2) 预测翻译程序由如下过程组成:PROCEDURE D;V AR L.type:(integer,real);id.entry:^id-entry;BEGINid.entry:=id.lexval;match(id);L.type:=L;addtype(id.entry,L.type)END;FUNCTION L:(integer,real);V AR L.type,L1.type:(integer,real);id.entry:^id-entry;BEGINif(lookahead==',')THEN BEGINmatch(',');match(id);id.entry:=id.lexval;L1.type:=L;L.type:=L1.type;addtype(id.entry,L.type);ENDELSE BEGINmatch(':');L.type:=T;END;return(L.type);END;FUNCTION T:(integer,real);V AR T.type:(integer,real);BEGINif(lookahead=='integer')THEN BEGINmatch(integer);T.type:=id.lexvalENDELSEif(lookahead=='real')THEN BEGINmatch(real);T.type:=id.lexval;ENDELSE ERROR;return (T.type);END;练习5.10解答:(1) 对于F1 sub F2 sub F3,其最左推导和分析树如下:S => L=> B=> B sub F3=> B sub F2subF3=> F1 sub F2 SubF3显然,F3.ps:=shrink(F2.ps);F2.ps:=shrink(F1.ps);为此,为B设一个综合属性B.pt,其值等于其下标F的继承属性F.ps。