资源描述
《编译原理》习题解答:
第一次作业:
P14 2、何谓源程序、目标程序、翻译程序、汇编程序、编译程序和解释程序?它们之间可能有何种关系?
答:被翻译的程序称为源程序;
翻译出来的程序称为目标程序或目标代码;
将汇编语言和高级语言编写的程序翻译成等价的机器语言,实现此功能的程序称为翻译程序;
把汇编语言写的源程序翻译成机器语言的目标程序称为汇编程序;
解释程序不是直接将高级语言的源程序翻译成目标程序后再执行,而是一个个语句读入源程序,即边解释边执行;
编译程序是将高级语言写的源程序翻译成目标语言的程序。
关系:汇编程序、解释程序和编译程序都是翻译程序,具体见P4 图 1.3。
P14 3、编译程序是由哪些部分组成?试述各部分的功能?
答:编译程序主要由8个部分组成:(1)词法分析程序;(2)语法分析程序;(3)语义分析程序;(4)中间代码生成;(5)代码优化程序;(6)目标代码生成程序;(7)错误检查和处理程序;(8)信息表管理程序。具体功能见P7-9。
P14 4、语法分析和语义分析有什么不同?试举例说明。
答:语法分析是将单词流分析如何组成句子而句子又如何组成程序,看句子乃至程序是否符合语法规则,例如:对变量 x:= y 符合语法规则就通过。语义分析是对语句意义进行检查,如赋值语句中x与y类型要一致,否则语法分析正确,语义分析则错误。
补充:为什么要对单词进行内部编码?其原则是什么?对标识符是如何进行内部编码的?
答:内部编码从“源字符串”中识别单词并确定单词的类型和值;原则:长度统一,即刻画了单词本身,也刻画了它所具有的属性,以供其它部分分析使用。对于标识符编码,先判断出该单词是标识符,然后在类别编码中写入相关信息,以表示为标识符,再根据具体标识符的含义编码该单词的值。
第二次作业:
P38 1、设T1={11,010},T2={0,01,1001},计算:T2T1,T1*,T2+。
T2T1={011,0010,0111,01010,100111,1001010}
T1*={ε,11,010,1111,11010,01011,010010……}
T2+={0,01,1001,00,001,01001,010,0101……}
P38-39 8、设有文法G[S]:
S∷=aAb
A∷=BcA | B
B∷=idt |ε
试问下列符号串(1)aidtcBcAb (2)aidtccb(4)abidt是否为该文法的句型或句子。
(1)SaAbaBcAbaidtcAbaidtcBcAb 句型但不是句子;
(2)SaAbaBcAbaidtcAbaidtcBcAbaidtccAbaidtccBbaidtccb;是句型也是句子;
(4)该文法的句子或句型的最后一个字符串一定是字符“b”;
第三次作业:
P39 11、试分别描述下列文法所产生的语言(文法开始符号为S):
(1) S∷=0S | 01
(2) S∷=aaS | bc
(1) L(G)={0n1| n≥1}; {解题思路:将文法转换为正规表达式}
(2) L(G)={a2nbc | n≥0}。
P39 12、试分别构造产生下列语言的文法:
(1){ abna | n=0,1,2,3……}
(3){ aban | n≥1}
(5){ anbmcp | n,m,p≥0}
(1)G={VN,VT,P,S},VN={S,A },VT={a,b},
P:S∷=aAa
A∷=bA |ε
(3)G={VN,VT,P,S},VN={S,A },VT={a,b},
P:S∷=abA
A∷=aA | a
(5)①G={VN,VT,P,S},VN={S,A ,B,C},VT={a,b,c},
P:S∷=ABC
A∷=aA |ε
B∷=bB |ε
C∷=cC |ε
②G={VN,VT,P,S},VN={S},VT={a,b,c},
P:S∷=aS | bS | cS |ε
P39 15. 设文法G规则为:
S::=AB
B::=a|Sb
A::=Aa|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::=c
2.S::=aB B::=bC C::=c C::=ε
3.S::=aAb aA::=aB aA::=aaA B::=b A::=a
4.S::=aCd aC::=B aC::=aaA B::=b
5.S::=AB A::=a B::=bC B::=b C::=c
6. S::=AB A::=a B::=bC C::=c C::=ε
7. S::=aA S::= ε A::=aA A::=aB A::=a B::=b
8. S::=aA S::= ε A::=bAb A::=a
短语结构文法(0) 4
上下文有关文法(1) 3
上下文无关文法(2) 5 6 8 或者 2 5 6 7 8
正规文法(3) 1 2 7 或者 1
P42 29. 用扩充的BNF表示以下文法规则:
1. Z::=AB|AC|A
2. A::=BC|BCD|AXZ|AXY
3. S::=aABb|ab
4. A::=Aab|ε
解:
1.Z::=A(B|C|ε)::=A[B|C]
2.A::=BC(ε|D)|{X(Z|Y)}::= BC[D]|{X(Z|Y)}
3.A::=a((AB|ε)b) ::= a[AB]b
4.A::={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. 构造下述文法G[Z]的自动机,该自动机是确定的吗?它相应的语言是什么?
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(S,1)=ø
M(A,0)={A,Z} M(A,1)=ø
M(Z,0)=ø M(Z,1)={A}
显然该文法的自动机是非确定的;它相应的语言为:{0,1}上所有满足以00开头以0结尾且每个1必有0直接跟在其后的字符串的集合;那么如何构造其相应的有穷自动机呢?
S
Z’
0
0
1
A
0
Z
S’
ε
ε
先构造其转换系统:
根据其转换系统可得状态转换集、状态子集转换矩阵如下表所示:
I
I0
I1
S
0 1
{S’, S}
{A}
Ф
0
1 Ф
{A}
{A, Z, Z’}
Ф
1
2 Ф
{A, Z, Z’}
{A, Z, Z’}
{A}
2
2 1
1
2
0
1
0
0
0
则其相应的DFA为:
P74 8. 设 (NFA) M = ( {A, B}, {a, b}, M, {A}, {B} ),其中M定义如下:
M (A, a) = {A, B} M (A, b) = {B} M (B, a) = ø M (B, b) = {A, B}
请构造相应确定有穷自动机(DFA) M’。
解:构造一个如下的自动机(DFA) M’, (DFA) M’={K, {a, b}, M’, S, Z}
K的元素是[A] [B] [A, B]
由于M(A, a)={A, B},故有M’([A], a)=[A, B]
同样 M’([A],b)=[B]
M’([B],a)= ø
M’([B],b)=[A,B]
由于M({A,B},a)= M(A,a)U M(B,a)= {A,B}U ø= {A,B}
故 M’([A,B],a)= [A,B]
由于M({A,B},b)= M(A,b)U M(B,b)={B}U {A,B} = {A,B}
故 M’([A,B],b)= [A,B]
S=[A],终态集Z={[A,B],[B]}
重新定义:令0=[A] 1=[B] 2=[A, B],则DFA如下所示:
可以进一步化简,把M’的状态分成终态组{1,2}和非终态组{0}
由于{1,2}a={1,2}b={2}{1,2},不能再划分。至此,整个划分含有两组{1,2}{0}
令状态1代表{1,2},化简如图:
第六次作业:
P74 11(1)(0 | 11*0)*
解:先构造该正规式的转换系统:
S
Z
(0 | 11*0)*
S
Z
ε
1
0
ε
2
1
3
ε
1
0
ε
4
S
Z
ε
1
0
ε
11*0
由上述转换系统可得状态转换集K={S, 1, 2, 3, 4, Z},状态子集转换矩阵如下表所示:
I
I0
I1
K
0 1
{S, 1, Z}
{1, Z}
{2, 3, 4}
0
1 2
{1, Z}
{1, Z}
{2, 3, 4}
1
1 2
{2, 3, 4}
{1, Z}
{3, 4}
2
1 3
{3, 4}
{1, Z}
{3, 4}
3
1 3
由状态子集转换矩阵可知,状态0和1是等价的,而状态2和3是等价的,因此,合并等价状态之后只剩下2个状态,也即是最少状态的DFA。
1
0
0
1
0
1
1
1
1
1
3
0
1
0
0
1
0
1
1
2
P74 12. 将图3.24非确定有穷自动机NFA确定化和最少化。
1
0
a
a, b
a
图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) =[1]
M ([0], a) =[0, 1] M ([0], b) =[1]
S=[1],Z={[0], [0, 1]}
1
0
a
b
a
a
2
b
令[0, 1]=2,则其相应的状态转换图为:
现在对该DFA进行化简,先把状态分为两组:
终态组 {0, 2} 和非终态组 {1},易于发现 {0, 2}
不可以继续划分,因此化简后的状态转换图如下:
a
b
1
a
0, 2
P74 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 + 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)G[E]:
E::=T | EAT ……①
T::=F | TMF ……②
F::=(E) | i ……③
A::=+ | - ……④
M::=* | / ……⑤
解:先采用“重复法”: 再采用“改写法”:
E::=T{AT} E::=TE’
T::=F{MF} E’::= ATE’ | ε
F::=(E) | i T::=FT’
A::=+ | - T’::=MFT’ | ε
M::=* | / F::=(E) | i
A::=+ | -
M::=* | /
P142 2. 试分别消除下列文法的间接左递归
(2)G[Z]:
Z::=AZ | b ……①
A::=Z A | a ……②
解:将②式代入①式可得,Z::=ZAZ | aZ | b 消除左递归后得到:
Z::=(aZ | b)Z’
Z’::=AZZ’ | ε
A::=ZA | a
P143 5. 对下面的文法G[E]:
E::=TE’
E’::=+E |ε
T::=FT’
T’::=T |ε
F::=PF’
F’::=*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)={ ),#}
FIRST(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)= { (,),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)={(, 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)构造文法分析表
a
b
+
*
(
)
∧
#
E
E→TE’
E→TE’
E→TE’
E→TE’
E’
E’→+E
E’→ε
E’→ε
T
T→FT’
T→FT’
T→FT’
T→FT’
T’
T’ →T
T’ →T
T’ →ε
T’ →T
T’ →ε
T’ →T
T’ →ε
F
F→PF’
F→PF’
F→PF’
F→PF’
F’
F’ →ε
F’ →ε
F’ →ε
F’→*F’
F’ →ε
F’ →ε
F’ →ε
F’ →ε
P
P →a
P →b
P →(E)
P →∧
下面分析符号串a*b+b
步骤 分析栈 余留输入串 所用的产生式
1 #E a*b+b# E→TE’
2 #E’T a*b+b# T→FT’
3 #E’T’F a*b+b# F→PF’
4 #E’T’F’P a*b+b# P →a
5 #E’T’F’a a*b+b#
6 # E’T’F’ *b+b# F’→*F’
7 # E’T’F’* *b+b#
8 # E’T’F’ b+b# F’ →ε
9 # E’T’ b+b# T’ →T
10 # E’T b+b# T→FT’
11 # E’T’F b+b# F→PF’
12 # E’T’F’P b+b# P →b
13 #E’T’F’b b+b#
14 #E’T’F’ +b# F’ →ε
15 #E’T’ +b# T’ →ε
16 #E’ +b# E’→+E
17 #E+ +b#
18 #E b# E→TE’
19 #E’T b# T→FT’
20 #E’T’F b# F→PF’
21 # E’T’F’P b# P →b
22 # E’T’F’b b#
23 # E’T’F’ # F’ →ε
24 # E’T’ # T’ →ε
25 #E’ # E’→ε
26 # # 成功
所以符号串a*b+b是该文法的句子;
P144 6. 对下列文法,构造相应的FIRST和FOLLOW:
(1)S∷=aAd
A∷=BC
B∷=b |ε
C∷=c |ε
(2)A∷=BCc | gDB
B∷=ε| bCDE
C∷=DaB | ca
D∷=ε| dD
E∷=gAf | c
解:(1)
构造FIRST集
FIRST(S)={a}
FIRST(B)={b,ε}
FIRST(C)={c,ε}
FIRST(A)={b,c,ε}
构造FOLLOW集
规则一
#∈FOLLOW(S) FOLLOW(S)={#}
规则二
d∈FOLLOW(A) FOLLOE(A)={d}
FIRST(C)-{ ε}FOLLOW(B) FOLLOW(B)={c}
规则三
FOLLOW(A) FOLLOW(B) FOLLOW(B)={d,c}
FOLLOW(A) FOLLOW(C) FOLLOW(C)={d}
最后结果为:
FIRST(S)={a}
FIRST(A)={b,c,ε}
FIRST(B)={b,ε}
FIRST(C)={c,ε}
FOLLOW(S)={#}
FOLLOW(A)={d}
FOLLOW(B)={d,c}
FOLLOW(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)={ a,b,c,d,g}.
构造FOLLOW集
规则一
#∈FOLLOW(A) FOLLOW(A)={#}
规则二
f∈FOLLOW(A) FOLLOE(A)={ f,#}
c∈FOLLOW(C) FOLLOE(C)={ c}
a∈FOLLOW(D) FOLLOE(D)={ a}
FIRST(Cc)-{ ε}FOLLOW(B) FOLLOW(B)={c,d,a}
FIRST(B)-{ ε}FOLLOW(D) FOLLOW(D)={b,a}
FIRST(DE)-{ ε}FOLLOW(C) FOLLOW(C)={d,g,c}
FIRST(E) FOLLOW(D) FOLLOW(D)={b,c,a,g}
规则三
FOLLOW(A) FOLLOW(B) FOLLOW(B)={a,c,d,f,#}
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},
FOLLOW(D)={a,b,c, f,g,#},
FOLLOW(E)= { a,c,d,g,f,#}.
P144 9. 设已给文法G[S]:
S∷=SaB | bB
A∷=Sa
B∷=Ac
(1)将此文法改写为LL(1)文法
(4)构造LL(1)分析表
解:此题消除左递归之后,构造LL(1)分析表存在“多重入口”问题,故采用以下方法:
(1)改写为LL(1)文法:
S∷=bB{aB}
A∷=Sa
B∷=Ac
(4)
FIRST(S)={ b },
FIRST(A)={b},
FIRST(B)={b},
FOLLOE(S)={a,#},
FOLLOW(A)={ c},
FOLLOW(B)={a,#}.
a
b
c
#
S
S∷=bB{aB}
A
A∷=Sa
B
B∷=Ac
P144 10. 证明下述文法不是简单优先文法:
(1) S∷=bEb
E∷=E+T | T
(2) S∷=bEb
E∷=F | F+T | T | i
T∷=i | (E)
证明:
(1)画语法树: S
╱ │ ╲
b E b
╱ │ ╲
E + T
可以得出b=E和b<E,因此该文法不是简单优先文法。
(2)因该文法中含
E∷=i
T∷=i
右部两个产生式相同,故该文法不是简单优先文法.
P145 11. 构造下述文法的优先关系矩阵,它们是简单优先文法吗?
S∷=M | U
M∷=iEtMeM | a
U∷=iEtS | iEtMeU
E∷=b
解:
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 1 0 0 1 0
BL
B
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 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 0
BL2
BL+
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
BL+
B
B
= ×
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 0
B
BR
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
展开阅读全文