资源描述
编译原理复习题一简答题:1) 什么是句子? 什么是语言?*解答:句子设G是一个给定的文法,S是文法的开始符号,如果S x(其中xVT*),则称x是文法的一个句子。语言语言是句子的集合。或设GS是给定文法,则由文法G所定义的语言L(G)可描述为:L(G)xSx,xVT* 。2) DFA与NFA有何区别 ? 解答:DFA与NFA的区别表现为两个方面:一是NFA可以有若干个开始状态,而DFA仅只有一个开始状态。另一方面,DFA的映象M是从K到K,而NFA的映象M是从K到K的子集,即映象M将产生一个状态集合(可能为空集),而不是单个状态。3) 自顶向下的语法分析方法的基本思想是什么?解答:从文法的开始符号开始,根据给定的输入串并按照文法的产生式一步一步的向下进行直接推导,试图推导出文法的句子,使之与给定的输入串匹配。4) 自底向上的语法分析方法的基本思想是什么?解答:从给定的输入串(终结符串)开始,根据文法的规则一步一步的向上进行直接归约,试图归约到文法的开始符号。5) 一个上下文无关文法G包括哪四个组成部分?解答:一组非终结符号,一组终结符号,一个开始符号,以及一组产生式。6) 在自底向上的语法分析方法中,分析的关键是什么?解答:关键是寻找句柄。7) 在自顶向下的语法分析方法中,分析的关键是什么?解答:关键是选择候选式。8)什么是属性文法?答:是在上下文无关文法的基础上,为每个文法符号(含终结符和非终结符)配备若干个属性值,对文法的每个产生式都配备了一组属性计算规则(称为语义规则)。在语法分析过程中,完成语义规则所描述的动作,从而实现语义处理。一个属性文法形式的定义为一个三元组AG,AG=(G,V,E)。 其中G为一个上下文无关文法;V为属性的有穷集;E为一组语义规则。9)语法制导翻译语法制导翻译:定义翻译所必须的语义属性和语义规则,一般不涉及计算顺序。语法制导翻译(Syntax-Directed Translations): 一个句子的语义翻译过程与语法分析过程同时进行。 在文法中,文法符号有明确的意义,文法符号之间有确定的语义关系。属性描述语义信息,语义规则描述属性间的的关系,将语义规则与语法规则相结合,在语法分析的过程中计算语义属性值。10)词法分析的主要任务是什么? 目标代码静态数据栈堆解答:词法分析器的任务是对构成源程序的字符串从左到右逐个字符逐个字符地进行扫描,依次把它们识别为一个一个具有独立意义的单词,并确定其属性,再转换为长度统一的属性字并输出。 11)图示运行时存储空间的划分(分为哪几个区)。 解答: 一般分为静态区和动态区: 程序代码区、静态数据区、栈区和堆区12)常用的中间语言种类有哪几种?解答: 常用的中间语言种类有逆波兰表示、三元式、四元式和树形表示。13)文法G所描述的语言是什么的集合?解答:是由文法的开始符号推出的所有终结符串的集合。或说是句子的集合。14)乔姆斯基把文法分为四种类型,即0型、1型、2型、3型。其中2型文法叫什么?解答: 2型文法叫上下文无关文法。15)常见的动态存贮分配策略有哪两种?解答:常见的两种动态存贮分配策略是栈式动态分配策略和堆式动态分配策略。16)语法分析的任务是什么?解答:语法分析的任务是识别给定的终结符串是否为给定文法的句子。17)局部优化是局限于一个什么范围内的一种优化?解答: 是局限于一个基本块范围内的一种优化。18)通常一个编译程序中应包括哪七个部分?解答: 通常一个编译程序中应包含词法分析,语法分析,语义分析与中间代码生成,代码优化,目标代码生成以及表格处理和出错处理等七个部分。19)代码优化的主要目标是什么?解答: 代码优化的主要目标是如何提高目标程序的运行速度和如何减少目标程序运行时所需的空间。20).符号表的组织方式有哪几种?答:一个编译程序对符号表的总体组织可有三种选择:第一种: 把属性种类完全相同的那些符号组织在一起,构造出表项是分别为等长的多个符号表。这样组织的最大优点是每个符号表的属性个数和结构完全相同。则表项是等长的,并且表项中的每个属性栏都是有效的,对于单个符号表示来说,这样使得管理方便一致,空间效率高。但这样组织的主要缺点是一个编译程序将同时管理若干个符号表,增加了总体管理的工作量和复杂度。而且对各类符号共同属性的管理必须设置重复的运行机制。使得符号表的管理显得臃肿。第二种: 把所有语言中的符号都组织在一张符号表中。组成一张包括了所有属性的庞大的符号表。这样组织方式的最大优点是总体管理非常集中单一,且不同种类符号的共同属性可一致地管理和处理。这样组织所带来的缺点是,由于属性的不同,为完整表达各类符号的全部属性必将出现不等长的表项,以及表项中属性位置的交错重叠的复杂情况,这就极大地增加了符号表管理的复杂度。为使表项等长且实现属性位置的唯一性,可以把所有符号的可能属性作为符号表项属性。这种组织方法可能有助于降低符号表管理复杂性,但对某个具体符号,可能增加了无用的属性空间,从而增加了空间开销。第三种:折衷方式是根据符号属性相似程度分类组织成若干张表,每张表中记录的符号都有比较多的相同属性。这种折衷的组织方式在管理复杂性及时空效率方面都取得折衷的效果,并且对复杂性和效率的取舍可由设计者根据自己的经验和要求及目标系统的客观环境和需求进行选择和调整。21). 在整个编译期间,对于符号表的操作有哪些?答:在整个编译期间,对于符号表的操作大致可归纳为五类:对给定名字,查询此名是否已在表中;往表中填入一个新的名字;对给定名字,访问它的某些信息;对给定名字,往表中填写或更新它的某些信息;删除一个或一组无用的项。22).符号表的作用有哪些?答:在编译程序中符号表用来存放语言程序中出现的有关标识符的属性信息,这些信息集中反映了标识符的语义特征属性。起主要作用是: 收集符号属性; 上下文语义的合法性检查的依据; 作为目标代码生成阶段地址分配的依据。23). 简述优化的原则是什么? 答:编译程序提供的对代码优化必须遵循的原则是:(1) 等价原则。经过优化后不应改变程序运行的结果。(2) 有效原则。使优化后所产生的目标代码运行时间较短,占用的存储空间较小。(3) 合算原则。应尽可能以较低的代价取得较好的优化效果。24)简述常用的优化技术有哪些?答:编译程序中常用的优化技术有:删除公共子表示式;复写传播;删除无用代码;代码外提;强度削弱;删除归纳变量;合并常量。25).何谓优化?按所涉及的程序范围可分为哪几级优化?答:优化:对程序进行各种等价变换,使得从变换后的程序出发,能产生更有效的目标代码。 三种级别:局部优化、循环优化、全局优化。26)、编译程序目标代码运行时的存储区通常被划分为几部分?答: 目标代码区、静态数据区、栈区、堆区。27)、数组的内情向量包含哪些内容?在编译程序对数组说明进行语义处理时,须把数组的类型type、维数n、各维的上、下界lk,uk等有关信息记录下来。此外,如果数组是常界的,还可将各维的界差dk以及计算数组元素地址的常量C记录下来。为了便于引用,通常是把上述信息存放于数组相应的“内情向量”之中.对数组内情向量的访问,可通过数组在符号表中相应登记项的ADDR域以间接寻址方式进行(即将其ADDR域作为指针用于存放内情向量的首地址)。28)、文法分为几种类型?其分类依据是什么?答:分为四类:短语文法(0型文法)、前后文有关文法(1型文法)、前后文无关文法(2型文法)、正规文法(3型文法)。分类依据:对产生式家约束。29)、一般来说编译程序至少包含哪几部分?各部分的作用是什么?答:词法分析,语法分析,语义分析和目标代码生成是必须的,代码优化是为了提高目标代码的质量而引入的,不是必须的,没有代码优化编译程序同样生成目标代码。各部分的作用参见教材30)、分程序结构的栈式存储管理中的活动记录包括哪些内容?答:临时工作单元、局部变量、保存机器状态、存取链、控制链、实参,也称形式单元、返回地址,保存该被调过程返回后的地址。31)、有人认为编译程序的五个组成部分缺一不可,这种看法正确吗?为什么?答:不正确 词法分析,语法分析,语义分析和目标代码生成是必须的,代码优化是为了提高目标代码的质量而引入的,不是必须的,没有代码优化编译程序同样生成目标代码。二、 应用题1)写一个文法,使其语言是奇数集,且每个奇数不以0开头。 解:文法G(N): NAB|B AAC|D B1|3|5|7|9 DB|2|4|6|8 C0|D2)写一个文法,使其语言是无符号二进制实数(不含指数)。解答:文法G(N): NL.L|L LLB|B B0|13)给出上下文无关文法的定义。一个上下文无关文法G是一个四元式(VT,VN,S,P),其中: VT是一个非空有限集,它的每个元素称为终结符号; VN是一个非空有限集,它的每个元素称为非终结符号,VTVN=; S是一个非终结符号,称为开始符号; P是一个产生式集合(有限),每个产生式的形式是P,其中,PVN,(VTVN)*。开始符号S至少必须在某个产生式的左部出现一次。4)给出正规式与正规集的递归定义。(1)和都是上的正规式,它们所表示的正规集分别为和;(2)任何a,a是上的一个正规式,它所表示的正规集为a;(3)假定U和V都是上的正规式,它们所表示的正规集分别记为L(U)和L(V),那么,(U|V)、(UV)和(U)*也都是正规式,它们所表示的正规集分别为L(U)L(V)、L(U)L(V)(连接积)和(L(U)*(闭包)。仅由有限次使用上述三步骤而得到的表达式才是上的正规式。仅由这些正规式所表示的字集才是上的正规集。5)设文法G为: SaAcB|BdS ABaB|aBc|a BaScA|cAB|b 对于输入串aacabccb,给出最左推导。答: S=aAcB=aaBccB=aacABccB=aacaBccB=aacabccB=aacabccb6) 设文法G为: SBA ABS|d BaA|bS|c 对于输入串adccd,给出最左推导。答: S=BA=aAA=adA=adBS=adcS=adcBA=adccA=adccdSFDAabab7)给定正规文法G: SaS|bA|b AaS请构造与之等价的有限自动机。8)给定正规文法G: SaA AbA|aB|b BaAABDFbbaaSa请构造与之等价的有限自动机。24D3abaa1ba9)对下面给出的NFA确定化。SFDAababa10).将文法GS 改写为等价的GS,使GS不含左递归和左公共因子。GS: SbSAe | bA AAb | d答:文法GS 改写为等价的不含左递归和左公共因子的GS为:SbB BSAe | AAd A A bA | 11) 消除下列文法GA的左递归。AAaBBBBbCCCeDDD(A)d解答:消除文法GA的左递归后得到:A BA AaBAB CBBbcBCeDDD(A)d12) 正规式(a|b)*a(a|b) 构造一个等价的有限自动机。a,baab012解答:13)将下图的NFA确定化为DFA。答:用子集法确定化如下表IIaIb状态X,1,21,2.1,2,31,2,Y1,2.1,2.1,2,Y1,2.1,2,31,2,31,2,31,2,3X123确定化后如下图:14). 已知文法 G(E)E T|ETTF|T *FF (E)|i(1)给出句型(T *Fi)的最右推导;(2)给出句型(T *Fi)的短语、简单短语、句柄、素短语、最左素短语。解: (1) 最右推导:E -T-F-(E)-(E T)-(E F)-(E i)-(Ti)-(T*Fi)(2) 短语:(T*Fi) ,T*Fi ,T*F,i简单短语:T*F,i句柄:T*F素短语:T*F,i最左素短语:T*F15). 构造正规式 1(0|1)*101 相应的 DFA 。解:先构造 NFA :确定化:重新命名,令 AB 为 B、AC 为 C、ABY 为 D 得:所以,可得 DFA 为:16). 文法:S-MH|a H -LSo| K -dML| L -eHfM-K|bLM判断 G 是否为 LL(1) 文法,如果是,构造 LL(1) 分析表。 解:各符号的 FIRST 集和 FOLLOW集为: 预测分析表由于预测分析表中无多重入口,所以可判定文法是 LL(1)的17). 对下面的文法 G :E -TEE-+E| T -FTT -T| F- PFF- *F| P-(E)|a|b|(1)计算这个文法的每个非终结符的 FIRST 集和 FOLLOW 集。 (4 分)(2)证明这个方法是 LL(1) 的。(4 分) (3)构造它的预测分析表。(2 分) 解:(1)计算这个文法的每个非终结符的 FIRST 集和 FOLLOW集。FIRST 集合有:FIRST(E)=FIRST(T)=FIRST(F)=FIRST(P)=(,a,b,;FIRST(E)=+, FIRST(T)=FIRST(F)=FIRST(P)=(,a,b,;FIRST(T)=FIRST(T)U=(,a,b, ;FIRST(F)=FIRST(P)=(,a,b,;FIRST(F)=FIRST(P)=*, ;FIRST(P)=(,a,b,;FOLLOW 集合有:FOLLOW(E)=),#;FOLLOW(E)=FOLLOW(E)=),#; FOLLOW(T)=FIRST(E)UFOLLOW(E)=+,),#;/不包含FOLLOW(T)=FOLLOW(T)=FIRST(E)UFOLLOW(E)=+,),#; FOLLOW(F)=FIRST(T)UFOLLOW(T)=(,a,b,+,),#;/不包含FOLLOW(F)=FOLLOW(F)=FIRST(T)UFOLLOW(T)=(,a,b,+,),#; FOLLOW(P)=FIRST(F)UFOLLOW(F)=*,(,a,b,+,),#;/不包含(2)证明这个方法是 LL(1)的。各产生式的 SELECT 集合有:E-TE: FIRST(T)=(,a,b,;E-+E: FIRST(+E ) =+;E-: FOLLOW(E)=),#T-FT: FIRST(F)=(,a,b,;T-T: FIRST(T)=(,a,b,;T-: FOLLOW(T/)=+,),#;F-PF: FIRST(P)=(,a,b,;F-*F: FIRST(*F)=*;F- : FOLLOW(F)=(,a,b,+,),#;P-(E) FIRST(E) =(P-a FIRST(a )=aP-b FIRST(b)=bP- FIRST()=可见,相同左部产生式 若不能推出为空,其产生式右部的交集均为空,相同左部产生式,若其中有一个能推出为空,其不能推出为空的产生式右部FIRST集合和左部的FOLLOW交集均为空,所以文法 GE是 LL(1)文法。(3)构造它的预测分析表。 文法 GE的预测分析表如下:18)设有文法G: SS*F|F FFP|P P(S)|i 完成下列算符优先关系表,并判断是否为算符优先文法(请说明理由)。*()i#*()i#由于该文法的任何产生的右部都不含两个相继的非终结符,故属于算符文法。从上表可以看出,任何两个终结符之间至少满足、 、三种关系之一,故G为算符优先文法。 给出句型S*P(S)对应的语法树,指出该句型的短语、句柄SSF*FP()SP短语:S*P(S) P(S) P (S)句柄: P19) 已知文法G(S) ST | S-T TF | T / F F(S) | i (1)给出句型 T/ F-i 的最右推导;(2)画出句型 T/F-i 规范规约的语法树及算符优先分析规约的语法树框架;(3)给出句型 T / F-i 的短语、素短语。答:(1) 最右推导:ETF(E) (ET) (EF) (Ei) (Ti) (T*Fi) (2) 略(3) 短语:(T*Fi),T*Fi,T*F,i 素短语:T*F, i 20) 某语言的拓广文法G为:(0) SS(1) S Db|B(2) D d|(3) B Ba|证明G不是LR(0)文法而是SLR(1)文法,请给出SLR(1)分析表。答:拓广文法G,增加产生式SS在项目集I0中:有移进项目D d 归约项目D 和B 存在移进-归约和归约-归约冲突,所以G不是LR(0)文法。若产生式排序为:(0) SS(1) S Db(2) S B(3) D d(4) D (5) B Ba(6) B G的LR(0)项目集族及识别活前缀的DFA如下图:由产生式知Follow(S)=# Follow(D)= bFollow(B)= a ,#在I0中:Follow(D) d= b d=Follow(B) d= a ,# d=Follow(D) Follow(B)= ba ,# =在I3中:Follow(S) a=#a=所以在I0,I3中的移进-归约和归约-归约冲突可以由Follow集解决,所以G是SLR(1)文法, 构造的SLR(1)分析表如下表:状态ACTIONGOTObda#SDB0r4S4r6r61231acc2S53S6r24r35r16r5r521)、下面文法G 为:(0)E E(1)E r B (2)B B ; d(3)B d判断G 是SLR(1)还是LR(1),说明理由,并构造相应的分析表 I0:E EE rBI2: E rBB B;dB dI3: E rB B B ;dI4: B d I5: B B;dI1: E E I6: B B;d ErdB;d状态I3中含项目: ErB 为归约项目 BB; i为移进项目所以 不是LR(0)文法FOLLOW(S)=# FOLLOW(S):为空,所以该文法是SLR(1)文法。状态ACTIONGOTOr;d#EB0S211acc2S433S5r14r3r35S66r2r222)、设文法G(S): S(F) |d S |d FF ; S | S (1) 消除左递归和回溯; (2) 列出第一小题完成后的文法,并计算每个非终结符的FIRST和FOLLOW; (3) 构造预测分析表。解: (1) S(F) SdS SS S 2分 FSF F ,S F F 2分评分细则:消除左递归2分,提公共因子2分。 (2) FIRST(S)(,d FOLLOW(S) # , ,, ) FIRST(S)d , FOLLOW(S) # , ,, ) FIRST(L)(,d FOLLOW(L) ) FIRST(L),, FOLLOW(L ) 3分因为: FIRST (S(F)FIRST (SdS)=FIRST (SS)FOLLOW (S )=FIRST (F ,S F)FIRST (F )=所以,此文法是LL(1)文法 (4) 预测分析表 d,()#SdS(F)SS S FSFSFF,S F23). 设有基本块:(1) a:=b-c (6) c:=b-f(2) d:=a+4 (7) b:=b-c(3) e:=a-b (8) f:=b+f(4) f:=a+4 (9) a:=a-f(5) b:=b+c (1) 画出DAG图;(2) 假设基本块出口时只有a,b还被引用,请写出优化后的三地址代码序列。解答:(1)给出DAG如右:(2)重写三地址代码如下: a:=b-cd:=a+4 e:=a-bf:=db:=b+c c:=b-fb:=b-cf:=b+fa:=a-f24).设有基本块 T1:2T2:10/T1T3:SRT4:SRA:T2 * T4B:AT5:SRT6:T3 * T5B:T6(1) 画出DAG图;(2) 假设基本块出口时只有A,B还被引用,请写出优化后的三地址代码序列。解:(1)DAG:见右图 (2) 优化后的四元式 T3:SR T4:SR A:5*T4 B:T3T425) 将下面的条件语句表示成四元式序列: if ab then x:=a+b*c else x:=b-a;答:(1) ( j, a, b, (3) (2) ( j, , , (7) ) (3) ( *, b, c, T1) (4) ( +, a, T1, T2) (5) ( :=, T2, , x) (6) ( j, , , (9) (7) ( -, b, a, T3) (8) ( :=, T3, , x) (9) ( )26) 翻译成四元式序列。Whilea0 b0do Begin X:X1; if a0 then a:a1 else b:b1 End; 答:(1) (j,a,0,5) (2) (j,3) (5) (,1,T1) (6) (:,T1,) (7) (j,a,0,9) (8) (j,12)(9) (,a,1,T2) (10) (:,T2,a) (11) (j,1) (12) (,b,1, T3) (13) (:,T3,b) (14) (j,1) (15)27) 设有基本块: t1:=3*At2:=2*Ct3:=t1+t2t4:=t3+5t5:=2*Ct6:=3*At7:=t6+t5E:=t7-1F:=t4-Ea)画出DAG图;b)假设基本块出口时只有E,F还被引用,请写出优化后的三地址代码序列。解答:5+*+*t4t1,t62A3n11n2n3n5n6n8En7F1n4t2,t5t3,t7n9Cn10n11n12a)构造DAG:见右图。b)优化后的三地址代码序列为:t1:=3*At2:=2*Ct3:=t1+t2t4:=t3+5E:=t3-1F:=t4-E五、填空题:1.编译程序的工作过程一般可以划分为 词法分析,语法分析,语义分析,之间代码生成,代码优化 等几个基本阶段,同时还会伴有 表格处理 和 出错处理 .2.若源程序是用高级语言编写的,目标程序是 机器语言程序或汇编程序 ,则其翻译程序称为编译程序.3.对编译程序而言,输入数据是 源程序 ,输出结果是 目标程序 .4.一个典型的编译程序中,不仅包括词法分析、语法分析、中间代码生成、代码优化、目标代码生成等五个部分,还应包括表格处理和出错处理。其中,词法分析器用于识别 单词 。5.所谓最右推导是指: 任何一步都是对中最右非终结符进行替换的 。6.一个上下文无关文法所含四个组成部分是 一组终结符号、一组非终结符号、一个开始符号、一组产生式 。7.产生式是用于定义 语法成分 的一种书写规则。8.设GS是给定文法,则由文法G所定义的语言L(G)可描述为: L(G)xSx,xVT* 。9.设G是一个给定的文法,S是文法的开始符号,如果Sx(其中xV*),则称x是文法的一个句型 。10.设G是一个给定的文法,S是文法的开始符号,如果Sx(其中xVT*),则称x是文法的一个句子。11.语法分析最常用的两类方法是 自上而下 和 自下而上 分析法。12.语法分析的任务是识别给定的终极符串是否为给定文法的句子。13.自顶向下的语法分析方法的关键是 如何选择候选式 的问题。14.自顶向下的语法分析方法的基本思想是:从文法的 开始符号 开始,根据给定的输入串并按照文法的产生式一步一步的向下进行直接推导,试图推导出文法的 句子 ,使之与给定的输入串匹配。15.自底向上的语法分析方法的基本思想是:从给定的终极符串开始,根据文法的规则一步一步的向上进行直接归约,试图归约到文法的 开始符号 。16.自底向上的语法分析方法的基本思想是:从输入串入手,利用文法的产生式一步一步地向上进行 直接归约 ,力求 归约 到文法的 开始符号 。17.在LR(0)分析法的名称中,L的含义是 自左向右的扫描输入串 ,R的含义是 最左归约 ,0 的含义是 向貌似句柄的符号串后查看0个输入符号 。18.在SLR(1)分析法的名称中,S的含义是 简单的 。19.所谓属性文法是 一个属性文法是一个三元组:A(G,V,F),一个上下文无关文法G;一个属性的有穷集V和关于属性的断言或谓词的有穷集F。每个断言与文法的某产生式相联。 19.综合属性是用于 “自下而上”传递信息。20.继承属性是用于 “自上而下”传递信息。21.符号表中的信息栏中登记了每个名字的 属性和特征等有关信息 ,如类型、种属、所占单元大小、地址等等。22.常用的两种动态存贮分配办法是 栈式 动态分配和 堆式 动态分配。23.局部优化是局限于一个 基本块 范围内的一种优化。24.代码优化的主要目标是如何提高 目标程序的运行速度 和如何减少 目标程序运行时所需的空间 。编译原理期末考试试卷(A卷)一、简述编译程序的工作过程。(10) 编译程序的工作过程,是指从输入源程序开始到输出目标程序为止的整个过程,是非常复杂的,就其过程而言,一般可以划分为五个工作阶段:词法分析,对构成源程序的字符串进行扫描和分解,识别出一个个的单词;语法分析,根据语言的语法规则,把单词符号串分解成各类语法单位;语义分析与中间代码产生,即对各类语法单位,分析其汉一并进行初步翻译;代码优化,以期产生更高效的代码;目标代码生成,把中间代码变换成特定机器上的低级语言指令形式。二、给出下面的正规表达式(15)(1) 以01结尾的二进制数串;(2) 能被5整除的十进制整数;(3) 包含偶数个1或偶数个0的二进制数串。(1)(0|1)*01(2)digit=0|1|2|3|4|5|6|7|8|9digit*(0|5)(3)(0*10*1)*0*)|(1*01*0)*1*)三、对下面的文法G: Sa | b | (T)TT,S | S(1) 消去文法的左递归,得到等价的文法G2;(2) 判断文法G2是否LL(1)文法,如果是,给出其预测分析表。(15) G2: Sa | b | (T) T ST T,S T | G2是LL(1)文法。ab(),#SSa Sb S(T)TT STT STT STTT T,S T 四、对下面的文法G: SABAA00 | 0BB11 | 1 (1) 消去文法的左递归,得到等价的文法G2;(2) 判断文法G2是否LL(1)文法,如果是,给出其预测分析表。(15)G: SAB A0A A00A | B1B B11B |文法GS是LL(1)文法。预测分析表:01#SSABAA0AAA00AABB1BBB11B B五、设有文法GA:ABCc | gDBBbCDE |CDaB | caDdD |EgAf | c(1) 计算该文法的每一个非终结符的FIRST集和FOLLOW集;(2) 试判断该文法是否为LL(1)文法。(15)FIRSTFOLLOWABCDEA,b,c,d,gbA,c,dDC,gA,c,dC,d,gA,b,c,g(2) 是LL(1)文法。编译原理期末考试试卷(B卷)三、应用题(1、4、5每题10分,2、3每题15分,共60分)1、为正规式(a|b)*a(a|b)构造等价且状态最少的确定有限自动机。(要求给出主要步骤)2、有文法如下: S BAA BS | dB aA | bS | c(1). 计算文法的每个非终结符的FIRST和FOLLOW集合;(2). 判断文法是否LL(1)文法,如果是,给出其预测分析表,否则说明理由。4、有文法如下:T T*F | F F PF | PP (T) | i 证明T*iP是该文法的一个句型,但不是规范句型;指出T*iP的所有短语、直接短语、素短语、句柄。三、应用题(1、4、5每题10分,2、3每题15分,共60分)1、对于符号串T*iP存在如下推导:(或画一颗语法树证明是句型)T T*F T*PF T*PP T*iP所以T*iP是该文法的一个句型,但不存在一个规范推导能推导出该句型,所以不是规范句型。(5分) 短语:T*iP、iP、i、p直接短语:i、p素短语:i句柄:i2、已知文法GSSS*aF | aF | *aFF+aF | +a消除文法左递归和提公共左因子。 答:消除左递归SaFS | *aFSS*aFS | F+aF | +a提公共左因子,文法 G(S) SaFS | *aFSS*aFS | F+aFFF |3、设文法G(S): S | a | (T) TT,S | S 消除左递归; 构造相应的FIRST和FOLLOW集合; 构造预测分析表 (1)消除左递,文法变为GS:S | a | (T)TST | ST,ST |此文法无左公共左因子。4、设文法G(S): S(T) | aS | a TT,S | S 消除左递归和提公共左因子; 构造相应的FIRST和FOLLOW集合; 构造预测分析表。 .(1) S (L) | aS SS | LSL L,SL |(2) FIRST(S)=a, ( FIRST(S)=a, (, FIRST(L)=a, ( FIRST(L)=, FOLLOW(S)=, ), # FOLLOW(S)=, ), #FOLLOW(L)= ) FOLLOW(L)= )(3) ( ) a , # SS (L)S aSSSSSSSSSLLSLLSLL,SL LL5、已知文法G(S):Sa|(T)TT,S|S给出句子(a,a),a)的最左推导并画出语法树;给出句型(T,a,(T)所有的短语、直接短语、素短语、最左素短语、句柄和活前缀。解:(1)最左推导:S(T)(T,S)(S,S) (a,S)(a,(T)(a,(T,S)(a,(S,S)(a,(a, S)(a,(a,a)语法树:如图A-16所示。图A-16 (a,(a,a)的语法树(2)句型(T, a, (T)的短语、直接短语、素短语、最左素短语、句柄、活前缀及语法树(图A-17)。短语:a | T,a | (T) | T , a , (T) | (T , a , (T)直接短语:a | (T)素短语:a | (T)最左素短语:a句柄:a活前缀: | ( | (T | (T , | (T , a 图A-17 (T,a,(T)的语法树6、构造下列正则表达式的确定性的有限状态自动机。 (12%)aba(a|b)*a答:7、设S=0,1上的正规集S由倒数第二个字符为1的所有字符串组成,请给出该字集对应的正规式,并构造一个识别该正规集的DFA。(8分)答:构造相应的正规式:(0|1)*1(0|1) (3分)NFA: (2分) 1 110432 e e e e 1 0 0确定化:(3分)I0,1,21,21,2,31,21,21,2,31,2,31,2,41,2,3,41,2,41,21,2,31,2,3,41,2,41,2,3,4 0 143210 0 1 0 0 0 1 1 1
展开阅读全文