1、编译原理习题解答:第一次作业:P14 2、何谓源程序、目标程序、翻译程序、汇编程序、编译程序和解释程序?它们之间可能有何种关系?答:被翻译的程序称为源程序;翻译出来的程序称为目标程序或目标代码;将汇编语言和高级语言编写的程序翻译成等价的机器语言,实现此功能的程序称为翻译程序;把汇编语言写的源程序翻译成机器语言的目标程序称为汇编程序;解释程序不是直接将高级语言的源程序翻译成目标程序后再执行,而是一个个语句读入源程序,即边解释边执行;编译程序是将高级语言写的源程序翻译成目标语言的程序。关系:汇编程序、解释程序和编译程序都是翻译程序,具体见P4 图 1.3。P14 3、编译程序是由哪些部分组成?试述
2、各部分的功能?答:编译程序主要由8个部分组成:(1)词法分析程序;(2)语法分析程序;(3)语义分析程序;(4)中间代码生成;(5)代码优化程序;(6)目标代码生成程序;(7)错误检查和处理程序;(8)信息表管理程序。具体功能见P7-9。P14 4、语法分析和语义分析有什么不同?试举例说明。答:语法分析是将单词流分析如何组成句子而句子又如何组成程序,看句子乃至程序是否符合语法规则,例如:对变量 x:= y 符合语法规则就通过。语义分析是对语句意义进行检查,如赋值语句中x与y类型要一致,否则语法分析正确,语义分析则错误。补充:为什么要对单词进行内部编码?其原则是什么?对标识符是如何进行内部编码的
3、?答:内部编码从“源字符串”中识别单词并确定单词的类型和值;原则:长度统一,即刻画了单词本身,也刻画了它所具有的属性,以供其它部分分析使用。对于标识符编码,先判断出该单词是标识符,然后在类别编码中写入相关信息,以表示为标识符,再根据具体标识符的含义编码该单词的值。第二次作业:P38 1、设T111,010,T20,01,1001,计算:T2T1,T1*,T2+。T2T1011,0010,0111,01010,100111,1001010T1*,11,010,1111,11010,01011,010010T2+0,01,1001,00,001,01001,010,0101P38-39 8、设有文
4、法GS:SaAbABcA | BBidt | 试问下列符号串(1)aidtcBcAb (2)aidtccb(4)abidt是否为该文法的句型或句子。(1)SaAbaBcAbaidtcAbaidtcBcAb 句型但不是句子;(2)SaAbaBcAbaidtcAbaidtcBcAbaidtccAbaidtccBbaidtccb;是句型也是句子;(4)该文法的句子或句型的最后一个字符串一定是字符“b”;第三次作业:P39 11、试分别描述下列文法所产生的语言(文法开始符号为S):(1) S0S | 01(2) SaaS | bc(1) L(G)0n1| n1; 解题思路:将文法转换为正规表达式(2)
5、 L(G)a2nbc | n0。P39 12、试分别构造产生下列语言的文法: (1) abna | n=0,1,2,3 (3) aban | n1 (5) anbmcp | n,m,p0(1)GVN,VT,P,S,VNS,A ,VTa,b,P:SaAaAbA |(3)GVN,VT,P,S,VNS,A ,VTa,b,P:SabA AaA | a(5)GVN,VT,P,S,VNS,A ,B,C,VTa,b,c,P:SABCAaA |BbB |CcC | GVN,VT,P,S,VNS,VTa,b,c,P:SaS | bS | cS |P39 15. 设文法G规则为:S:=ABB:=a|SbA:=Aa
6、|bB对下列句型给出推导语法树,并求出其句型短语,简单短语和句柄。(2)baabaab (3)bBABb解(2) S A B A a S b b B A B a b B a a句型baabaab的短语a, ba, baa, baab, baabaab,简单短语a,句柄 a S(3) A B b B S b A B 短语bB, AB, ABb,bBABb 简单短语bB, AB, 句柄bB第四次作业P41 24. 下面文法那些是短语结构文法,上下文有关文法,上下文无关文法,及正规文法?1.S:=aB B:= cB B:=b C:=c2.S:=aB B:=bC C:=c C:=3.S:=aAb aA
7、:=aB aA:=aaA B:=b A:=a4.S:=aCd aC:=B aC:=aaA B:=b5.S:=AB A:=a B:=bC B:=b C:=c6. S:=AB A:=a B:=bC C:=c C:=7. S:=aA S:= A:=aA A:=aB A:=a B:=b8. S:=aA S:= A:=bAb A:=a短语结构文法(0) 4上下文有关文法(1) 3 上下文无关文法(2) 5 6 8 或者 2 5 6 7 8正规文法(3) 1 2 7 或者 1P42 29. 用扩充的BNF表示以下文法规则:1 Z:=AB|AC|A2 A:=BC|BCD|AXZ|AXY3 S:=aABb|a
8、b4 A:=Aab|解:1Z:=A(B|C|):=AB|C2A:=BC(|D)|X(Z|Y):= BCD|X(Z|Y)3A:=a(AB|)b) := aABb4A:=ab|:=ab第五次作业:P74 4. 画出下列文法的状态图:Z:=Be B:=Af A:=e|Ae 并使用该状态图检查下列句子是否该文法的合法句子:f, eeff, eefe。由状态图可知只有eefe是该文法的合法句子。P74 5. 设右线性文法G=(S, A, B, a, b, S, P),其中P组成如下:S:=bA A:=bB A:=aA A:=b B:=a画出该文法的状态转换图。P74 6. 构造下述文法GZ的自动机,该自
9、动机是确定的吗?它相应的语言是什么? Z:=A0 A:=A0|Z1|0 解1:将左线性文法转换为右线性文法,由于在规则中出现了识别符号出现在规则右部的情形,因此不能直接使用书上的左右线性文法对应规则,可以引入非终结符号B,将左线性文法变为Z:=A0 A:=A0|B1|0 B:=A0,具体为: A := Z1 A := B1 A := A01 Z := A0 B := A0 将所得的新左线性文法转换成右线性文法:此时利用书上规则,其对应的右线性文法为:A:=0A|0B|0 Z:=0A B:=1A解2:先画出该文法状态转换图:NFA=(S,A,Z,0,1,M,S,Z)其中M: M(S,0)=A M
10、(S,1)= M(A,0)=A,Z M(A,1)= M(Z,0)= M(Z,1)=A显然该文法的自动机是非确定的;它相应的语言为:0,1上所有满足以00开头以0结尾且每个1必有0直接跟在其后的字符串的集合;那么如何构造其相应的有穷自动机呢?SZ001A0ZS 先构造其转换系统:根据其转换系统可得状态转换集、状态子集转换矩阵如下表所示:II0I1S0 1S, SA0 1 AA, Z, Z1 2 A, Z, ZA, Z, ZA2 2 11201000则其相应的DFA为:P74 8. 设 (NFA) M = ( A, B, a, b, M, A, B ),其中M定义如下:M (A, a) = A,
11、B M (A, b) = B M (B, a) = M (B, b) = A, B请构造相应确定有穷自动机(DFA) M。解:构造一个如下的自动机(DFA) M, (DFA) M=K, a, b, M, S, ZK的元素是A B A, B由于M(A, a)=A, B,故有M(A, a)=A, B同样 M(A,b)=BM(B,a)= M(B,b)=A,B由于M(A,B,a)= M(A,a)U M(B,a)= A,BU = A,B故 M(A,B,a)= A,B由于M(A,B,b)= M(A,b)U M(B,b)=BU A,B = A,B故 M(A,B,b)= A,BS=A,终态集Z=A,B,B重新
12、定义:令0=A 1=B 2=A, B,则DFA如下所示:可以进一步化简,把M的状态分成终态组1,2和非终态组0由于1,2a=1,2b=21,2,不能再划分。至此,整个划分含有两组1,20令状态1代表1,2,化简如图:第六次作业:P74 11(1)(0 | 11*0)*解:先构造该正规式的转换系统:SZ(0 | 11*0)*SZ10213104SZ1011*0由上述转换系统可得状态转换集K=S, 1, 2, 3, 4, Z,状态子集转换矩阵如下表所示:II0I1K0 1S, 1, Z1, Z2, 3, 40 1 21, Z1, Z2, 3, 41 1 22, 3, 41, Z3, 42 1 33
13、, 41, Z3, 43 1 3由状态子集转换矩阵可知,状态0和1是等价的,而状态2和3是等价的,因此,合并等价状态之后只剩下2个状态,也即是最少状态的DFA。10010111113010 010112P74 12. 将图3.24非确定有穷自动机NFA确定化和最少化。10aa, ba图3.24 NFA状态转换图解:设(DFA)M = K, VT, M, S, Z,其中,K=0, 0, 1, 1,VT =a, b,M:M (1, a) =0 M (1, b) = M (0, 1, a) =0, 1 M (0, 1, b) =1M (0, a) =0, 1 M (0, b) =1S=1,Z=0,
14、0, 110abaa2b令0, 1=2,则其相应的状态转换图为:现在对该DFA进行化简,先把状态分为两组:终态组 0, 2 和非终态组 1,易于发现 0, 2不可以继续划分,因此化简后的状态转换图如下:ab1a0, 2P74 18. 根据下面正规文法构造等价的正规表达式:S:=cC | a A:=cA | aB B:=aB | c C:=aS | aA | bB | cC | a 解:由式可得 B= aB + c B=a*c 由式可得 A= cA + aB A= c*aa*c 由式可得 S= cC + a 由式可得 C= aS + aA + bB + cC + a C= c*( aS + aA
15、 + bB + a) C= c*( aS + ac*aa*c + ba*c + a) S= cc*( aS + ac*aa*c + ba*c + a) + a = cc*aS+ cc*( ac*aa*c + ba*c + a) + a = (cc*a)*( cc*( ac*aa*c + ba*c + a) + a) = (cc*a)*( cc*( ac*aa*c | ba*c | a) | a) 另一种答案是S= c(ac | c)*( ac*aa*c | ba*c | aa | a) | a第七次作业:P142 1. 试分别消除下列文法的直接左递归(采用两种方法重复法和改写法)(1)GE:E
16、:=T | EAT T:=F | TMF F:=(E) | i A:=+ | - M:=* | / 解:先采用“重复法”: 再采用“改写法”:E:=TAT E:=TET:=FMF E:= ATE | F:=(E) | i T:=FTA:=+ | - T:=MFT | M:=* | / F:=(E) | i A:=+ | - M:=* | /P142 2. 试分别消除下列文法的间接左递归(2)GZ:Z:=AZ | b A:=Z A | a 解:将式代入式可得,Z:=ZAZ | aZ | b 消除左递归后得到: Z:=(aZ | b)Z Z:=AZZ | A:=ZA | aP143 5. 对下面的
17、文法GE: E:=TE E:=+E | T:=FTT:=T | F:=PFF:=*F | P(E) |a |b |(1)计算这个文法的每个非终结符号的FIRST和FOLLOW;(2)证明这个文法是LL(1)文法;(3)构造它的LL(1)分析表并分析符号串a*b+b;解:(1)构造FIRST集:FIRST(E)=+, FIRST(F)=*, FIRST(E)=FIRST(T)=FIRST(F)=FIRST(P) = (,a,b,FIRST(T)= (,a,b, ,构造FOLLOW 集:规则一FOLLOW(E) FOLLOW(E)=#规则二)FOLLOW(E) FOLLOE(E)= ),#FIRS
18、T(E)-FOLLOW(T) FOLLOW(T)=+FIRST(T)-FOLLOW(F) FOLLOW(F)= (,a,b,FIRST(F)-FOLLOW(P) FOLLOW(P)=*规则三FOLLOW(E)FOLLOW(E) FOLLOW(E)=#,)FOLLOW(E)FOLLOW(T) FOLLOW(T)=,)FOLLOW(T)FOLLOW(T) FOLLOW(T)= ,)FOLLOW(T)FOLLOW(F) FOLLOW(F)= (,),a,b,FOLLOW(F)FOLLOW(F) FOLLOW(F)= (,),a,b,FOLLOW(F)FOLLOW(P) FOLLOW(P)= (,),
19、a,b,,*最后结果为:FIRST(E)=+, FIRST(F)=*, FIRST(E)=FIRST(T)=FIRST(F)=FIRST(P) = (,a,b,FIRST(T)= (,a,b, ,)FOLLOE(E)= ), FOLLOW(E)=,)FOLLOW(T)=,)FOLLOW(T)= ,)FOLLOW(F)= (,),a,b,FOLLOW(F)= (,),a,b,FOLLOW(P)= (,),a,b,,*(2)证明该文法是LL(1)文法:证明:对于规则E:=+E |,T:=T |,F:=*F | (仅有一边能推出空串)有FIRST(+E)=+FIRST()= ,FIRST(T)=(,
20、 a, b, FIRST()= FIRST(*F)=*FIRST()= ,FIRST(+E)=+FOLLOW(E)= #, )= FIRST(T)=(, a, b, FOLLOW(T)= +, #, )=FIRST(*F)=*FOLLOW(F)= (,),a,b,=所以该文法是LL(1)文法。(3)构造文法分析表ab+*()#EETEETEETEETEEE+EEETTFTTFTTFTTFTTT TT TT T TT T TT FFPFFPFFPFFPFFF F F F*FF F F F PP aP bP (E)P 下面分析符号串a*b+b步骤 分析栈 余留输入串 所用的产生式1 #E a*b+
21、b# ETE2 #ET a*b+b# TFT3 #ETF a*b+b# FPF4 #ETFP a*b+b# P a5 #ETFa a*b+b# 6 # ETF *b+b# F*F7 # ETF* *b+b#8 # ETF b+b# F 9 # ET b+b# T T10 # ET b+b# TFT11 # ETF b+b# FPF12 # ETFP b+b# P b13 #ETFb b+b#14 #ETF +b# F 15 #ET +b# T 16 #E +b# E+E17 #E+ +b# 18 #E b# ETE19 #ET b# TFT20 #ETF b# FPF21 # ETFP b#
22、P b22 # ETFb b# 23 # ETF # F 24 # ET # T 25 #E # E26 # # 成功所以符号串a*b+b是该文法的句子;P144 6. 对下列文法,构造相应的FIRST和FOLLOW:(1)SaAdABCBb |Cc |(2)ABCc | gDBB| bCDECDaB | caD| dD EgAf | c解:(1)构造FIRST集FIRST(S)=aFIRST(B)=b,FIRST(C)=c,FIRST(A)=b,c,构造FOLLOW集规则一FOLLOW(S) FOLLOW(S)=#规则二dFOLLOW(A) FOLLOE(A)=dFIRST(C)- FOLL
23、OW(B) FOLLOW(B)=c规则三FOLLOW(A)FOLLOW(B) FOLLOW(B)=d,cFOLLOW(A)FOLLOW(C) FOLLOW(C)=d最后结果为:FIRST(S)=a FIRST(A)=b,c,FIRST(B)=b,FIRST(C)=c,FOLLOW(S)=#FOLLOW(A)=dFOLLOW(B)=d,cFOLLOW(C)=d(2)构造FIRST集规则二FIRST(A)=g,FIRST(B)=b,,FIRST(C)= c, FIRST(D)=d,,FIRST(E)= g,c .规则三FIRST(A)=g,b,c,FIRST(C)=a,c,d,FIRST(A)=
24、a,b,c,d,g.构造FOLLOW集规则一FOLLOW(A) FOLLOW(A)=#规则二fFOLLOW(A) FOLLOE(A)= f, cFOLLOW(C) FOLLOE(C)= c aFOLLOW(D) FOLLOE(D)= a FIRST(Cc)- FOLLOW(B) FOLLOW(B)=c,d,aFIRST(B)- FOLLOW(D) FOLLOW(D)=b,aFIRST(DE)- FOLLOW(C) FOLLOW(C)=d,g,cFIRST(E) FOLLOW(D) FOLLOW(D)=b,c,a,g规则三FOLLOW(A)FOLLOW(B) FOLLOW(B)=a,c,d,f,
25、#FOLLOW(A)FOLLOW(D) FOLLOW(D)=a,b,c, f,g,FOLLOW(B)FOLLOW(E) FOLLOW(E)= a,c,d,f,#FOLLOW(C)FOLLOW(B) FOLLOW(B)= a,c,d,g,f,#FOLLOW(B)FOLLOW(E) FOLLOW(E)= a,c,d,g,f,#最后结果为:FIRST(A)= a,b,c,d,g, FIRST(B)=b,,FIRST(C)=a,c,d,FIRST(D)=d,,FIRST(E)= g,c ,FOLLOE(A)= f, FOLLOW(B)= a,c,d,g,f,#,FOLLOW(C)=d,g,c,FOLL
26、OW(D)=a,b,c, f,g,,FOLLOW(E)= a,c,d,g,f,#.P144 9. 设已给文法GS:SSaB | bBASaBAc(1)将此文法改写为LL(1)文法(4)构造LL(1)分析表解:此题消除左递归之后,构造LL(1)分析表存在“多重入口”问题,故采用以下方法:(1)改写为LL(1)文法:SbBaBASaBAc(4)FIRST(S)= b , FIRST(A)=b,FIRST(B)=b,FOLLOE(S)=a,,FOLLOW(A)= c,FOLLOW(B)=a,.abc#SSbBaBAASaBBAcP144 10. 证明下述文法不是简单优先文法:(1) SbEbEE+T
27、 | T(2) SbEbEF | F+T | T | iTi | (E)证明:(1)画语法树: S b E b E + T可以得出b=E和bE,因此该文法不是简单优先文法。(2)因该文法中含E=iT=i右部两个产生式相同,故该文法不是简单优先文法.P145 11. 构造下述文法的优先关系矩阵,它们是简单优先文法吗? SM | UMiEtMeM | aUiEtS | iEtMeUEb解: S M U E i t e a b S M U E i t e a b S 0 0 0 0 0 0 0 0 0 S 0 1 1 0 0 0 0 0 0 M 0 0 0 0 0 0 1 0 0 M 0 0 0 0
28、 1 0 0 1 0BLB U 0 0 0 0 0 0 0 0 0 U 0 0 0 0 1 0 0 0 0 = E 0 0 0 0 0 1 0 0 0 = E 0 0 0 0 0 0 0 0 1 i 0 0 0 1 0 0 0 0 0 i 0 0 0 0 0 0 0 0 0 t 1 1 0 0 0 0 0 0 0 t 0 0 0 0 0 0 0 0 0 e 0 1 1 0 0 0 0 0 0 e 0 0 0 0 0 0 0 0 0 a 0 0 0 0 0 0 0 0 0 a 0 0 0 0 0 0 0 0 0 b 0 0 0 0 0 0 0 0 0 b 0 0 0 0 0 0 0 0 0 S
29、M U E i t e a b S M U E i t e a b S 0 0 0 0 0 0 0 0 0 S 0 1 1 0 1 0 0 1 0 M 0 0 0 0 0 0 1 0 0 M 0 0 0 0 1 0 0 1 0BL2BL+ U 0 0 0 0 0 0 0 0 0 U 0 0 0 0 1 0 0 0 0 = E 0 0 0 0 0 1 0 0 0 = E 0 0 0 0 0 0 0 0 1 i 0 0 0 1 0 0 0 0 0 i 0 0 0 0 0 0 0 0 0 t 1 1 0 0 0 0 0 0 0 t 0 0 0 0 0 0 0 0 0 e 0 1 1 0 0 0 0
30、0 0 e 0 0 0 0 0 0 0 0 0 a 0 0 0 0 0 0 0 0 0 a 0 0 0 0 0 0 0 0 0 b 0 0 0 0 0 0 0 0 0 b 0 0 0 0 0 0 0 0 0BL+BB = S M U E i t e a b S M U E i t e a b S 0 0 0 0 0 0 0 0 0 S 0 1 1 0 0 0 0 0 0 M 0 0 0 0 0 0 0 0 0 M 0 1 0 0 0 0 0 1 0BBR U 0 0 0 0 0 0 0 0 0 U 1 0 1 0 0 0 0 0 0 = E 0 0 0 0 0 0 0 0 0 = E 0 0 0 0 0 0 0 0 1 i 0 0 0 0 0 0 0 0 1 i 0 0 0 0 0 0 0 0 0 t 0 1 1 0 1 0 0 1 0 t 0 0 0 0 0 0 0 0 0 e 0 0 0 0 1 0 0 1 0 e 0 0 0 0 0 0 0 0 0 a 0 0 0 0 0 0 0 0 0 a 0 0 0 0 0 0 0 0 0 b 0 0 0 0 0 0 0 0 0 b 0 0 0 0 0 0 0 0 0 S M U E