各章练习题(编译原理).doc_第1页
各章练习题(编译原理).doc_第2页
各章练习题(编译原理).doc_第3页
各章练习题(编译原理).doc_第4页
各章练习题(编译原理).doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三章复习重点:1.文法与语言的对应关系语言L(G)=L(G)文法G文法Gbn | n0BbB | bBBb | bbn | n0PbP |PPb |abn | n0SDBDaBbB | bSaBBBb | bbna | n0TPDDaPbP |TPaPPb |(ab)n | n0UEU | EEabUUab | abambn|m0,n0VABAaA | aBbB | bVaV | aBBbB | bambn|m0,n0WABAaA |BbB | bWaW | BBbB | banbn | n0XaXb | ab(akcd) nbn | k,n0XDXH | DHDAcdAaA |aHba2n+1bn| n=0YaaYb |aYKYH | aKaaHb思路要点:注意结构拆分技巧:如何将表示语言的通用字符串形式作适当的“切割”?例:已知语言:L1 = axb2xcy | x, y = 0,给出此语言的文法,并证明此语言是上下文无关语言。提示:该题实际上要求为相应语言设计上下文无关文法。一个文法设计好后,严格来说应当证明此文法是否对应于该语言。解:GS: S AB A e | aAbb B e | cB推导过程:S AB + axAb2xB /*使用A aAbb x次*/ axb2xB /*使用A e 一次*/ axb2xcxB /*使用B cB x次*/ axb2xcx /*使用B e 一次*/举一反三:已知语言L2 = axb2ycy | x, y = 0,给出此语言的文法,并证明此语言是上下文无关语言。解:GS: S AB A e | aA B e | bBcc练习:14:写出下列语言对应的文法(1).anbnambm|n,m02. 1n0m0m0n|n,m0 3. 1n0m0m0n|n0,m04. anbmck|n,m,k0 G1: SAA G2: SABAaAb| AaAb| BaBb|G: S1S0 SA A0A1 A G: S1S0|A S1S0|0A1 A0A1|01 A0A1|2. 给出文法,证明文法符号串是否为文法的句型,若是句型,找出这个句型的所有短语、直接短语、句柄。1. 令文法GE为: ZbMb Ma|(L LMa) 符号串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分)已知文法GT: TT*F | F ;FFP | P ; P(T) | i(1)用最右推导法证明:T*P(T*F) 是GT的一个句型;(2)画出的语法树;(3)写出的全部短语、直接短语和句柄。(1) T=T*F=T*FP=T*F(T)= T*F(T*F) =T*P(T*F) 证毕。 (2) 如图 (3)短语:T*P(T*F) ;P(T*F) ;(T*F) ;T*F ;P 直接短语:T*F ;P 句柄: P3. 证明一个文法是二义性文法。证明下述文法GS是二义的。 (5分) S-iSeS|iS|i解: S S i S e S i S i S i S e S可见,句型iises有两种不同的语法树,所以GS是二义的。练习:证明下述文法G:SaSbS|aS|d是二义性文法。解:一个文法,如果存在某个句子有不只一棵语法分析树与之对应,那么称这个文法是二义性文法。SaSSabSdd句子aadbd有两棵语法树。如下图:dSSabSSad(1) (2)由此可知,SaSbS|aS|d定义的文法是二义性文法。第四章: 重点:1. NFADFA的确定化及DFA的最小化。2. 试写出描述语言L的正规式,构造能识别该语言L等价的NFA,再确定化将下图所示的NFA确定化,再最小化。(2010年出过)X431baaeeaee2Y用子集法确定化如下表:编号IIaIbAAX,1,2,4B1,2,3,4C1,2,4,YBB1,2,3,4B 1,2,3,4C1,2,4,YCC1,2,4,YB 1,2,3,4C1,2,4,Y由于对于非终态的状态A和B来说,它们输入a、b的下一个状态都是一样的,故状态A和B可以合并,将合并后的状态重命名为A,而终态则重命名为B,则合并后的状态转换矩阵为: SabAABBAB由此可以得到最小化的DFA,如下图所示: ABab练习1:给出接受字母表=a,b,语言为以b开头,以aa结尾的字符串集合的正规表达式,并构造与之等价状态的DFA。(2010年出过)答:依题意,以b开头,以aa结尾的字符串集合的正规表达式可写为: b(a|b)*aa画NFA,如下图所示 X12baYa0ba 用子集法确定化如下表 IIaIbXA1 B1,2C1,2,YD-1,2C1,2,YD1,2,YD.1B1 B1 B1 BABCbaDababb(10分)将下图的NFA确定化为DFA。(2011年重修卷A出过)答:用子集法确定化如下表用子集法对所给图的确定化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确定化后如下图第五章重点:1.LL(1)的判别要点:(1)计算FirstFollowSelect集,然后判断是否是LL(1)文法。(2)如果是LL(1)文法,则构造预测分析表。(消除左递归和左公共因子也要了解)例:(10分)已给文法 GS : S PS S aPS| fS |e P qP P bP |e (1)该文法是否是LL(1)文法,并说明理由。(2)给出该文法的预测分析表。答:(10 分)(1)Select(S PS)=first(P)=qSelect(S aPS)=aSelect(S fS)=fSelect(S e)=follow(S)=follow(S)=#Select(P qP)=qSelect(P bP)=b Select( P e)=follow(P)=follow(P)=first(S)- efollow(S)=a,f#=a,f,#Select(S aPS) Select(S fS) Select(S e)=Select(P bP) Select( P e)=所以文法是LL(1)文法。 (7分)(2)预测分析表:(3分)a b f q#S PSSaPSfSePqPPebPee(15分)写出下列文法中各候选式的FIRST集和各非终结符的FOLLOW集,构造该文法的LL(1)分析表,并说明它是否为LL(1)文法。(2011年重修卷A出过) S aA|BAA cB|eB bB|e各候选式的FIRST集 (4分) FIRST(aA)=a FIRST(BA)= b,c,e FIRST(cB)=cFIRST(e)=e FIRST(bB)= b FIRST(e)=e各非终结符的FOLLOW集 (4分)FOLLOW(S)= # FOLLOW(A)= # FOLLOW(B)= c,#LL(1)分析表 (5分) a b c # S S aA S BA S BA S BA A A cB A e B B bB B e B e 说明它是否为LL(1)文法 (2分) 判断1分,理由1分因为LL(1)分析表无冲突,所以该文法是LL(1)文法。2. 设文法G(S): S | a | (T) TT,S | S 消除左递归; 构造相应的FIRST和FOLLOW集合; 构造预测分析表解:(1)消除左递,文法变为GS:S | a | (T)TST | ST,ST |此文法无左公共左因子。(2)构造相应的FIRST和FOLLOW集合: FIRST(S)=a, , (, FOLLOW(S)=#, , )FIRST(T)=a, , ( ,FOLLOW(T)=FIRST(T)=, ,FOLLOW(F)=)(3)构造预测分析表:a(),#SSaSS(T)TTSTTSTTSTTTT,ST第七章重点:1. 识别活前缀的有限自动机的构造,判断某个文法是否是LR(0)文法,或SLR(1)文法或LR(1)文法,若不是,请说明理由,若是,构造相应的LR分析表。2. 查LR分析表,进行句子的识别。典型例题:文法GS及其LR分析表如下,请给出串baba#的LR分析过程。(1) S DbB(2) D d(3) D (4) B a(5) B Bba(6) B LR分析表状态ACTIONGOTObDa#SBD0r3s3121acc2S43r24r6S5r665r4r46S7r17S88r5r5(注:答案格式为 步骤状态栈符号栈输入串 ACTION GOTO)答案:步骤状态符号输入串 ACTION GOTO00#baba# r3 2102#Dbaba# S42024 #Db aba# S530245#Dbaba# r4 640246#DbBba# S7502467#DbBba# S86024678 #DbBba # r5 670246#DbB# r1 1801#S# acc2. (8分) 已知拓广文法GS:SS SAS AaAb(1)试构造以LR(1)项目集为状态的识别活前缀的有穷自动机;ASabbI2I1I5SAS,#I4Ab,a/b/#I3AaA,a/b/#AaA,a/b/#Ab,a/b/#I6I0SAabAaSS,#(2)试判断文法是否是LR(1)文法,并说明理由。( 1 ) I0: I2: I6:SS,#SAS,#S,#AaA,a/b/#Ab,a/b/# SAS,#SAS,#S,#AaA,a/b/#Ab,a/b/# AaA,a/b/# (2)有穷自动机所有的状态都不含有“移进归约”、“归约归约”冲突,因而该文法是LR(1)文法。练习:. (20 分 ) 给定文法 GS : S SaA|a A AbS|b (8 分 ) 请构造该文法的以 LR(0) 项目集为状态的识别规范句型活前缀的 DFA 。 (4 分 ) 请构造该文法的 LR(0) 分析表。 (4 分 ) 什么是 LR(0) 文法?该文法是 LR(0) 文法吗?为什么? (4 分 ) 什么是 SLR(1) 文法?该文法是 SLR(1) 文法吗?为什么?答:拓广文法 1 分 GS : S S S SaA S a A AbS A b 该文法的以 LR(0) 项目集为状态的识别规范句型活前缀的 DFA : 该文法的 LR(0) 分析表: 状态 ACTION GOTO a b # S A 0 S 2 1 1 S 3 acc 2 r 3 r 3 r 3 3 S 5 4 4 r 2 r 2 /S 6 r 2 5 r 5 r 5 r 5 6 S 2 7 7 r 4 /S 3 r 4 r 4 LR(0) 文法:该文法的以 LR(0) 项目集为状态的识别规范句型活前缀的 DFA 中没有冲突状态。 该文法不是 LR(0) 文法 因为存在冲突状态: I 4 和 I 7 SLR(1) 文法:该文法的以 LR(0) 项目集为状态的识别规范句型活前缀的 DFA 中有冲突状态,冲突可用 FOLLOW 集解决。 该文法不是 SLR(1) 文法。 因为 FOLLOW(S)=a,b,# ,所以无法解决冲突 。其它练习可以直接做书本上我们布置的作业!第八章:1.给出代码,写成代码对应的四元式(三地址码形式!)重点:(1). 赋值语句 (2). For语句 (3).if then语句 (4)数组赋值 (5).while语句例:写出下面语句经语法制导翻译后所生成的四元式代码序列。 (共10分) if xc do c:=c+1 else x:=x+5 (依次翻译,再考虑回填!) 解:假设初始为100,则四元式代码序列为 100ifxcgoto104103goto109104M:=C+1105C:=M106goto102107N:=X+5108X:=N109(10分)试完成下列语句翻译的四元式序列。(2010年出过)while (AB) do if(CD) then X:=Y*Z else X:=Y+Z;(1) if AB goto (3)(2) goto (11)(3) _(4) goto (8)(5) _(6)X:=T1(7) _ (8)T2:=Y+Z(9)X:=T2(10) _(11)答:(3) if CA-B-B,画出程序运行到第二个B过程的时刻,栈内静态链、动态链的指示情况。Program Demo; Procedure A Procedure B Begin(*B*) If d then B else A; End(*B*) Begin(*A*) B; End(*A*) Begin(*Demo*) A End(*Demo *) 静态链动态链B的过程活动记录静态链动态链B的过程活动记录静态链动态链A的过程活动记录静态链动态链DEMO的过程活动记录静态链动态链B的过程活动记录静态链动态链B的过程活动记录静态链动态链A的过程活动记录静态链动态链DEMO的过程活动记录练习1:考虑下面的程序:procedure p(x, y, z);beginy:=x+y;z:=z*z; end beginA:=2;B:=A*2;P(A, A, B);Print A, B end.试问,若参数传递的方式分别采用传地址和传值时,程序执行后输出 A, B的值是什么?解:传地址 A=4, B=16传值 A=2, B=4第十一章 重点:1、基本块划分,并画出程序流程图2.根据程序流程图,找出循环!典型习题:(8分)将下面程序划分为基本块,并画出其基本块程序流图。(2009年出过)(1) if ab goto (3)(2) halt(3) if cd goto (5)(4) goto (8)(5) t1:=y+z(6) x :=t1(7) goto (1)(8) t2:=y-z(9) x :=t2(10) goto (1)答: 2. 对以下给定流图, (2010年出过)(1)求出流图中B3、B4和B5的必经结点集D(n);(2)求出流图中的回边及其对应的循环。B1B2B3B4B5答:(1)B3的必经结点集是B1, B2 , B3。B4的必经结点集是B1, B2, B4。B5的必经结点集是B1, B2, B4, B5。(2)回边是B4B2,对应的循环是 B2, B3, B4。其它的第二章、第九章、第十二章均直接考PL/0的内容,所以代码阅读很重要重点:1. PL/0符号表的生成2. PL/0某一个语法成分的程序填空。典型习题:练习1:8分)对PL/0语言扩充单词: (2009年出过) + +=请完成下列识别单词+,+和+=(设单词内码分别为PLUS,PLUSPLUS和PLUSBECOMES)的词法分析程序段:if ( CH=+ ) if ( ) SYM=PLUSBECOMES; GetCh(); else if ( CH=+

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论