收藏 分享(赏)

编译原理考试习题及答案.ppt

上传人:weiwoduzun 文档编号:5692254 上传时间:2019-03-13 格式:PPT 页数:64 大小:639.52KB
下载 相关 举报
编译原理考试习题及答案.ppt_第1页
第1页 / 共64页
编译原理考试习题及答案.ppt_第2页
第2页 / 共64页
编译原理考试习题及答案.ppt_第3页
第3页 / 共64页
编译原理考试习题及答案.ppt_第4页
第4页 / 共64页
编译原理考试习题及答案.ppt_第5页
第5页 / 共64页
点击查看更多>>
资源描述

1、程 序 设 计 语 言,Chapter 3.词法分析,编译原理参考答案,2019/3/13,CH.3.练习题8(P64.),8. 给出下面的正规表达式。 (1) 以01结尾的二进制数串;正规式 (0|1)*01 (2) 能被5整除的十进制整数; 允许任意0开头:(0|1|2|3|4|5|6|7|8|9)*(0|5)不允许0开头(0本身除外):(0|5)|(1|2|3|9)(0|1|2|3|9)*(0|5),2019/3/13,CH.3.练习题7(P64.),7. (1) 1(0|1)*101 构造DFA。 解1: 正规式对应的NFA:,(1) 正规式 1(0|1)*101,DFA:,(1) 正

2、规式 1(0|1)*101,DFA:,2019/3/13,CH.3.练习题7(P64.),7. 构造下列正规式相应的DFA。(1) 1(0|1)*101 解2: 正规式对应的NFA:,0,4,1,2,3,1,1,0,1,1,0,DFA:,2019/3/13,7. 构造下列正规式相应的NFA。(P64.)(2) 1(1010*|1 (010)*1)*0,2019/3/13,7. 构造下列正规式相应的NFA。(P64.)(2) 1(1010*|1 (010)*1)*0,7. (2) 1(1010*|1 (010)*1)*0的NFA。,2019/3/13,CH.3.练习题14(P64.),(1) 正

3、规式: (10|0)*(2) NFA: 确定化:,DFA:,2019/3/13,CH.3.练习题14(P64.),(1) 正规式: (10|0)*(2) NFA:,DFA:,构造一个DFA,它接受 S0,1上所有满足如下条件的字符串:每个1都有0直接跟在右边。,DFA:(最简),程 序 设 计 语 言,Chapter 2.高级语言及其语法描述,编译原理参考答案,CH.2.练习题6(P36.),6.令文法G6为:N D|ND D 0|1|2|3|4|5|6|7|8|9 (1) G6的语言L(G6)是什么? 注意:集合的写法不正确 解:L(G6)=0,1,2,3,4,5,6,7,8,9+=09数字

4、构成的所有数字串,可以0开头 (2) 给出句子0127、34和568的最左和最右推导。 注意:1)步骤,和 的区别;2) 不能写为 解:0127的最左推导:NNDNDDNDDDDDDD0DDD01DD012D01270127的最右推导:NNDN7ND7N27ND27N127D1270127,+,CH.2.练习题8(P36.),8. 令文法为E T|E+T|E-TT F|T*F|T/FF (E)|i,(1) 给出 i+i*i、i*(i+i)的最左推导和最右推导。,解:此处仅以 i*(i+i) 为例给出答案,最左推导 E T T*F F*F i*F i*(E) i*(E+T) i*(T+T) i*

5、(F+T) i*(i+T) i*(i+F ) i*(i+i),最右推导 E 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),CH.2.练习题8(P36.),8. 令文法为E T|E+T|E-T T F|T*F|T/FF (E)|i,i-i-i 的语法树,(2) 给出 i+i+i、i+i*i和i-i-i的语法树。,i+i+i 的语法树,i+i*i 的语法树,注意:树枝和符号均不可随意增减!,2019/3/13,CH.2.练习题9(P36.),9. 证明下面的文法是二义的:S iSeS|iS|i

6、 证明: 因为存在句子 iiiei,它对应两棵不同的语法树,如右图:所以该文法是二义文法。 说明:按定义只要能给出一个反例即可,iiiei不是唯一的反例。,编译原理参考答案,程 序 设 计 语 言,Chapter 5.自下而上语法分析,2019/3/13,CH.5.练习题1(P133.),1.令文法G1为:EE+T|T TT*F|F F(E)|i 证明E+T*F是它的一个句型,指出这个句型的所有短语、直接短语和句柄。,证明1: 存在从开始符号E出发到E+T*F的推导: E E+T E+T*F E+T*F是G1的一个句型。 短语: E+T*F是句型相对于非终结符E的短语; T*F是句型相对于非终

7、结符T的短语。 直接短语: T*F是句型相对于规则TT*F的直接短语 句柄: T*F,2019/3/13,CH.5.练习题1(P133.),1.令文法G1为:EE+T|T TT*F|F F(E)|i 证明E+T*F是它的一个句型,指出这个句型的所有短语、直接短语和句柄。,证明2: 可构造出E+T*F的语法树,如右图所示, E+T*F是G1的一个句型。 证明3: (也可用归约来证明)(概念熟悉后,短语、直接短语和句柄可直接列出而不用说明)短语: E+T*F,T*F直接短语: T*F句柄: T*F,2019/3/13,CH.5.练习题2(P133.),2.考虑下面的表格结构文法G2:Sa|(T)

8、TT,S|S (1)给出(a,(a,a)的最左和最右推导。,(1) 解: (a,(a,a)的 最左推导: S (T) (T,S)(S,S) (a,S)(a,(T) (a,(T,S) (a,(S,S)(a,(a,S)(a,(a,a) 最右推导: S (T) (T,S)(T,(T) (T,(T,S)(T,(T,a)(T,(S,a)(T,(a,a) (S,(a,a)(a,(a,a),2019/3/13,CH.5.练习题2(P133.),2.(2)指出(a,(a,a)的规范归约及每一步的句柄。根据这个规范归约,给出“移进-归约”的过程,并给出它的语法树自下而上的构造过程。,2019/3/13,CH.5

9、.练习题2(P133.),2.(2).给出(a,(a,a)“移进-归约”的过程。,(2) 解: (a,(a,a)的“移进-归约”过程: 步骤 符号栈 输入串 动作 句柄1 # ( a ,(a,a)# a2 #( a ,(a,a)# 移进 (3 #( a ,(a,a)# 移进 a4 #( S ,(a,a)# 归约 S a S5 #( T ,( a ,a)# 归约 T S a6 #( T , ( a ,a)# 移进 ,7 #(T,( a ,a)# 移进 (8 #(T,( a ,a)# 移进 a,2019/3/13,CH.5.练习题2(P133.),2.(2).给出(a,(a,a)“移进-归约”的过

10、程。,(2) 解: (a,(a,a)的“移进-归约”过程: 步骤 符号栈 输入串 动作 句柄9 #(T,( S ,a)# 归约 S a S10 #(T,(T , a )# 归约 T S a11 #(T,(T, a )# 移进 ,12 #(T,(T, a )# 移进 a13 #(T,( T,S )# 归约 S a T,S14 #(T, (T ) )# 归约 T T,S (T)15 #(T, (T) )# 移进 )16 #( T, S )# 归约 S (T) T,S,2019/3/13,CH.5.练习题2(P133.),2.(2).给出(a,(a,a)“移进-归约”的过程。,(2) 解: (a,(

11、a,a)的“移进-归约”过程: 步骤 符号栈 输入串 动作 句柄 17 # (T ) # 归约 T T,S (T)18 # (T) # 移进 )19 # S # 归约 S (T)20 成功,分析结束,接受输入串,2019/3/13,CH.5.练习题2(P133.),2.(2).给出(a,(a,a)的语法树自下而上构造过程。,(2) 解:(a,(a,a)的语法树自下而上构造过程: 用序号表示,2019/3/13,CH.5.练习题3(P133.),3.(1) 计算练习2文法G2的FIRSTVT和LASTVT。Sa|(T) TT,S|S,(1) 解: (执行相应的算法可求得)FIRSTVT(S)=

12、a, , ( FIRSTVT(T)= , a, , ( LASTVT(S)= a, , ) LASTVT(T)= , , a, , ) ,2019/3/13,CH.5.练习题3(P133.),3.(2)计算文法G2的优先关系,G2是一个算符优先文法吗? Sa|(T) TT,S|S,(2) 解: FIRSTVT(S)= a, , ( FIRSTVT(T)= , , a, , ( LASTVT(S)= a, , ) LASTVT(T)= , , a, , ) 逐一考察 S(T) 和 TT, S 两两相邻的符号,得到算符优先关系, 如右图; G2是算符优先文法 。,.,.,.,.,.,.,.,.,.

13、,.,.,.,.,.,.,.,.,.,.,.,.,.,.,2019/3/13,3.(4)给出输入串(a,(a,a)的算符优先分析过程。,Sa|(T) TT,S|S,最左素短语,2019/3/13,.,.,.,.,.,.,.,.,.,.,.,.,.,3.(4)给出输入串(a,(a,a)的算符优先分析过程。,Sa|(T) TT,S|S,最左素短语,2019/3/13,5.(1) 考虑文法 SAS|b ASA|a列出这个文法的所有LR(0)项目。,CH.5.练习题5(P134.),解(1): 拓广文法,加入 SS拓广文法的LR(0)项目有:S.S SS. S.AS SA.SSAS. S.b Sb.

14、A.SAAS.A ASA. A.a Aa.,2019/3/13,5.(2) 构造文法 SAS|b ASA|a的LR(0)项目集规范族及识别活前缀的DFA。,1)拓广文法,加入 SS,2)画出 DFA,5.(2) 构造文法 SAS|b ASA|a的LR(0)项目集规范族及识别活前缀的DFA。,0: S.S S.AS S.bA.SA A.a,5: ASA. SA.S S.AS S.b A.SA A.a,7: SAS. AS.A A.SA A.a S.AS S.b,1: SS. AS.A A.SA A.a S.AS S.b,3: Sb.,4: Aa.,2: SA.S S.AS S.b A.SA A.

15、a,6: AS.A A.SA A.aS.AS S.b,S,b,a,A,A,S,b,a,A,S,a,b,S,a,b,A,S,A,b,a,S,a,b,A,2019/3/13,5.(3) 文法 SAS|b ASA|a是LR(0)文法吗?,不是LR(0)文法! 因为存在冲突,例如状态1、状态5,编译原理参考答案,程 序 设 计 语 言,Chapter 4. 自上而下语法分析,2019/3/13,CH.4.练习题1(P81.),1.考虑下面文法G1: Sa|(T)TT,S|S (1) 消去G1的左递归。然后对每个非终结符,写出不带回溯的递归子程序。,解(1) 消左后的文法G1: Sa|(T)TSTT ,

16、ST|,CH.4.练习题1(P81.),解(1) 不带回溯的递归子程序: Sa|(T)Procedure S;Beginif sym=a or sym= then advance else if sym=( thenbegin advance;T;if sym=) then advanceelse errorendelse errorEnd;,CH.4.练习题1(P81.),解(1) 不带回溯的递归子程序: TSTProcedure T;BeginS;Tend;,解(1) 不带回溯的递归子程序: T,ST|procedure T;begin if sym=, then begin advanc

17、e;S;TendEnd;,CH.4.练习题1(P81.),(2) 经改写后的文法是否是LL(1)的? 给出它的预测分析表。 消左后的文法G1 : Sa|(T)TST T ,ST|,(2) 因为G1 : 文法不含左递归; 对 Sa|(T)FIRST(a)=a, FIRST()=, FIRST( (T) )= ( , 集合互不相交且不含; 对 T,ST|FIRST( ,ST )= , , FIRST()=, 其交集为空。 但FIRST(T)=FIRST( ,ST )FIRST()=,, 然而,FOLLOW(T)= ) FIRST(T)=,, ,两者 不相交。所以,G1是LL(1)文法。,2019/

18、3/13,CH.4.练习题1(P81.),(2)构造G1的预测分析表: 对Sa|(T) 对TSTFIRST(a)=a FIRST(ST)=a,(FIRST()= 对 T,ST|FIRST(T)=( FIRST(,ST)=, 预测分析表: FOLLOW(T)=),CH4.1.(3) 给出对符号串(a,) 的分析过程,步骤 符号栈 输入串 动作, 所用产生式 .0 #S (a,)# 初始;用 S , ( 查表1 #)T( (a,)# S(T), 展开S2 #)T a,)# 匹配(;用 T , a 查表3 #)TS a,)# TST , 展开T; 用 S ,a 查表4 #)Ta a,)# S a,

19、展开S5 #)T ,)# 匹配a; 用T , , 查表6 #)TS, ,)# T ,ST, 展开T7 #)TS )# 匹配, ;用 S , 查表8 #)T )# S , 展开S9 #)T )# 匹配 ;用 T , )查表10 #) )# T,展 开T11 # # 匹配 )12 # # 分析成功, 结束分析,CH.4.练习题3(P82.),3.下面文法中, 哪些是LL(1)的, 说明理由。 (1) SABc A a| B b|。,解,因为 FOLLOW(S)=# 文法不含左递归; FIRST(S)=a,b,c 对 Aa|候选式的FIRST集合互不相交; FIRST(A) 但, FOLLOW(A)

20、=b,c FIRST(A)=a, 两者不相交。 Bb|其候选式的FIRST集合互不相交; FIRST(B)但, FOLLOW(B)=c FIRST(B)=b, 两者也不相交。所以,文法是LL(1)文法。,CH.4.练习题3(P82.),3.下面文法中, 哪些是LL(1)的, 说明理由。 (2) SAb A a|B| B b|。,解(1) 因为 FOLLOW(S)=#对 Aa|B| ; FIRST(S)=a,b FIRST(B)=b,与FIRST()=相交; 所以文法不是LL(1)文法。 解(2) 对 Aa|因为FIRST(A)= a,b, ,FOLLOW(A)=b, FOLLOW和FIRST两

21、者相交。所以文法不是LL(1)文法。,CH.4.练习题3(P82.),3.下面文法中, 哪些是LL(1)的, 说明理由。 (3) SABBA A a| B b|。,解,虽然 FOLLOW(S)=# 文法不含左递归; FIRST(S)=a, b, 对 Aa|,其候选式的FIRST集合不相交;对 Bb|,其候选式的FIRST集合也不相交;但 对 Aa| (由 Bb|出发证明也可)FOLLOW(A)= a, b, # , FIRST(A)= a, 两者相交。所以,文法不是LL(1)文法。,CH.4.练习题3(P82.),3.下面文法中, 哪些是LL(1)的, 说明理由。 (4) SaSe|B BbB

22、e|C CcCe|d。,解, 因为 文法不含左递归; 对 SaSe|B、BbBe|C 和 CcCe|d各产生式的候选式的FIRST集合均不相交; 即FIRST(aSe) FIRST(B)= ;FIRST(bBe) FIRST(C)= ;FIRST(cCe) FIRST(d)= ; FIRST(S)= a,b,c,d ,FIRST(B)= b,c,d FIRST(C)= c,d 均不含。所以,文法是LL(1)文法。,编译原理参考答案,程 序 设 计 语 言,Chapter 7. 语义分析和中间代码产生,2019/3/13,P217-1,a*(-b+c) 后缀式:ab-c+* a+b*(c+d/e

23、) 后缀式:abcde/+*+ -a+b*(-c+d) 后缀式:a-bc-d+*+ not A or not(C or not D)后缀式:A not C D not or not or (A and B)or(not C or D)后缀式:A B and C not D or or,2019/3/13,P217-3,-(a+b)*(c+d)-(a+b+c)的四元式序列: (1)(+,a,b,T1) (2)(-,T1,-,T2) (3)(+,c,d,T3) (4)(*,T2,T3,T4) (5)(+,a,b,T5) (6)(+,T5,c,T6) (7)(-,T4,T6,T7),2019/3/1

24、3,P218-4,自下而上分析过程中把赋值语句A := B * (-C + D)翻译成三地址码的步骤:(参看p179的语义子程序),语法分析 翻译过程: A := B * (-C + D)A := E1 * (-C + D) E1.place=k2A := E1 * (-E2 + D) E2.place=k3A := E1 * (E3 + D)A := E1 * (E3 + E4)A := E1 * (E5)A := E1 * E6A := E7S,产生一个新的中间变量T1 E3.place=k5 产生代码 k5:=uminus k3,k1 K2 k3 k4 k5 k6 k7,符号表,2019

25、/3/13,A := B * (-C + D)的三地址码,k5:=uminus k3 k6:= k5+ k4 k7:= k2* k6 k1:= k7,k1 K2 k3 k4 k5 k6 k7,符号表,(参看p179的语义子程序),2019/3/13,P218-6:用7.4.2节的办法,把A or (B and not(C or D)翻译成四元式序列,100:(jnz,A,-,0) 101:(j,-,-,102) 102:(jnz,B,-,104) 103:(j,-,-,0) 104:(jnz,C,-,.) 105:(j,-,-,106) 106:(jnz,D,-,.) 107:(j,-,-,.

26、),2019/3/13,P218-7,100:(j,A,C,102) 101:(j,-,-,115) 102:(j,B,D,104) 103:(j,-,-,115) 104:(j=,A,1,106) 105:(j,-,-,109) 106:(+,C,1,T1) 107:(:=,T1,-,C) 108:(j,-,-,100) 109:(j,A,D,111) 110:(j,-,-,100) 111:(+,A,2,T2) 112:(:=,T2,-,A) 113:(j,-,-,109) 114:(j,-,-,100) 115:,用7.5.1节的办法,把下面的语句翻译成四元式序列:while A C a

27、nd B D doif A=1 then C:=C+1 elsewhile A D do A:=A+2;,编译原理参考答案,程 序 设 计 语 言,Chapter 8. Chapter 11.,2019/3/13,CH8. CH11.,1. 什么是符号表?符号表有哪些重要作用? 2. 符号表的表项常包括哪些部分?各描述什么? 3. 有哪些存储分配策略?并叙述何时用何种存储分配策略? 4. 代码优化的常用措施和优化的三个层次。,编译原理参考答案,程 序 设 计 语 言,补充题,2019/3/13,补充题,1. 画出编译程序的总体逻辑结构图,简述各部分的主要功能。,2019/3/13,补充题,2.

28、 已知文法GZ:Z0U|1VU1Z|1V0Z|0 请写出此文法描述的只含有个符号的全部句子。 GZ产生的语言是什么? 该文法在Chomsky文法分类中属于几型文法?,2019/3/13,【解】,(1)0101,0110,1010, 1001 (2)分析GZ所推导出的句子的特点:由Z开始的推导不外乎图1所示的四种情形。由Z推导出10或01后就终止或进入递归,而Z的每次递归将推导出相同的符号串:10或01。所以GZ产生的语言L(GZ)=x|x(10|01)+ (3) 该文法属于3型文法。,Z0U|1V U1Z|1 V0Z|0,2019/3/13,补充题,3. 已知文法和它的LR分析表如下,给出串d

29、bdb# 的LR分析过程。GS:(1) SAdB (2)Aa (3) A(4) Bb (5)BBdb (6)B,LR分析表,2019/3/13,【解】,串dbdb# 的LR分析过程如下:,补充题,4 . 给定文法和语义动作如下: A aB print “0” A c print “1” B Ab print “2” 问:按照以上的语义子程序,aacbb 经翻译后的输出结果是什么?请给出翻译过程。,aacbb翻译后的输出结果是打印出下面的字符串: 12020,b,B,c,A,A,a,B,A,a,b,A aB print “0” A c print “1” B Ab print “2”,2019/3/13,翻译过程和翻译结果,语法分析: aacbbaaAbb (1)aaBb (2)aAb (3)aB (4)A (5),翻译过程:(1) print “1”(2) print “2”(3) print “0”(4) print “2”(5) print “0”,A aB print “0” A c print “1” B Ab print “2”,翻译结果:打印出字符串 12020,2019/3/13,补充题,5. 课堂上讲过的以及课件中给出的有代表性的例题都要亲自动手独力做一遍。 6. 参阅“编译原理_(V_jx_Summary_精简=完全)”,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报