编译原理34.docx
- 文档编号:7813704
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:27
- 大小:28.55KB
编译原理34.docx
《编译原理34.docx》由会员分享,可在线阅读,更多相关《编译原理34.docx(27页珍藏版)》请在冰豆网上搜索。
编译原理34
第三章
P67
e
1.解:
Z
其状态图为:
starte
由状态图知:
f,eeff不是合法的句子
eefe是该文法的句子。
2.解:
⑴正则文法为G[Z]:
Z∷=A1∣0A∷=A0∣0
⑵该文法的V={Z,A,1,0}Vn={Z,A}Vt={1,0}
⑶该文法所确定的语言为:
L﹙G[Z]﹚={0n1或0∣n≥1}
5.证明:
⑴A∣A={x∣x∈LA或x∈LA}={x∣x∈LA}=A
⑵(A*)*=(A*)0∪(A*)1∪(A*)2∪…∪(A*)n
=ε∪(A0∪A1∪A2∪…∪An)∪(A1…)=ε∪A0∪A1∪A2∪…∪An
=A
⑶ε︱AA*所表示的语言是{ε}∪LA·LA*=LA0∪LA(LA0∪LA1∪LA2∪…)
=LA0∪LA1∪LA2∪…=LA*
故ε︱AA*=A*
⑷(LALB)*LA=({ε}∪LALB∪LALBLALB∪LALBLALBLALB∪…)LA
=LA∪LALBLA∪LALBLALBLA∪LALBLALBLALB∪LA…
=LA∪({ε}∪LBLA∪LBLALBLA∪…)
=LA(LBLA)
∴(AB)*=A(AB)*
⑸三个表达式所描述的语言都是LALA中任意组合
P2
∴(A|B)*=(A*B*)=(A*|B*)*
start
6.解:
⑴R1=0︱1对应的自动机为
P3
ε
start
1
(R1)*=(0|1)*对应的自动机为M2’
将M2’确定化
状态输入
ε
0
1
P0
{P1,P3}
φ
φ
P1
φ
{P2}
{P2}
P2
{P1,P3}
φ
φ
P3
φ
φ
φ
I
I0
I1
(空)
状态输入
0
1
{P0,P1,P3}
{P1,P2,P3}
{P1,P2,P3}
P0’
P1’
P1’
{P1,P2,P3}
{P1,P2,P3}
{P1,P2,P3}
P1’
P1’
P1’
(注:
上图中的(空)列表示没有该列。
即上图为两个独立的表)
P1
状态转换图为:
0,1
简化为:
1
∴R=1(0|1)*|0的DFAM为:
⑵R1=1010*|1(010)*1对应的DFAM为:
q8
S13
R2=(1010*|1(0|0)*1)*对应的DFAM为:
0
start
S9
P11
对应R=1(1010*|1(010)*1)*0的DFAM为:
P14
P9
0
1
8.解:
(a)
I
Ia
Ib
{0}
{0,1}
{1}
{0,1}
{0,1}
{1}
{1}
{0}
φ
∴DFA的状态转换矩阵为:
状态输入
a
b
q0
q1
q2
q1
q1
q2
q2
q0
φ
化简:
p0=q0=q1p1=q2
a
状态图为:
b
a
start
P1
P0
10.解:
它所识别的语言为:
(1010)*
第四章语法分析
P80
1.解:
(见课本)
2.解:
文法有左递归,故先改写文法:
error
A
A∷=(B)|dBeB∷=c{c}
下面给出两个分析子程序的框图:
Sym=’c’(?
)
B
Y
Y
Y
N
Y
两分析子程序如下:
procedureA;
IFsym=’(‘THEN
Begin
Nextsym;
B;
Ifsym=’)’Then
Nextsym;
Else
Error
End;
ELSE
Ifsym=’d’Then
Begin
Nextsym;
B;
ifsym=’e’then
Nextsym
else
Error
End;
Else
Error;
ProcedureB;
IFsym=’c’THEN
Begin
Nextsym;
Whilesym=’c’do
Nextsym
End
ELSE
Error;
/*程序中nextsym为读字符子程序,error为出错处理子程序*/
/*主程序*/
programG;
VARsym:
CHAR;
BEGIN
Nextsym;
A;
END
3.解:
(1)。
FIRST(AcB)={c}FIRST(Bd)={a}
FIRST(AaB)={c}FIRST(c)={c}
FIRST(aA)={a}FIRST(a)={a}
(2).
若用不带回溯的自顶向下的语法分析程序,必须改写文法:
Z∷=AcB|BdA∷=c{aB}B∷=a[A]
因为调用分析子程序A的过程中,调用了B子程序,在B中又调用了A,相当于A间接的调用了A,所以该文法应编写成递归子程序。
(3).三个分析子程序框图如下:
A
Z
Y
Y
Sym=’c’(?
)
errror
Y
nextsym
Sym=’a’(?
)
N
Y
B
B
三个分析子程序为:
procedureZ;
ifsym=’c’then
begin
A;
Ifsym=’c’then
B;
Else
Error
End;
Else
Ifsym=’a’then
Begin
B;
Ifsym=’d’then
Nextsym;
Else
Error
End;
Else
Error;
ProcedureA;
Ifsym=’c’then
Begin
Nextsym;
Whilesym=’a’do
B;
End;
Else
Error;
ProcedureB;
Ifsym=’a’then
Begin
Nextsym;
Ifsym=’c’then
A;
End;
Else
Error;
P87
1.解:
(1)FIRST(P)={(,a,b,∧)}FOLLOW(E)={#,)}
FIRST(F’)={﹡,ε}FOLLOW(E’)={#,)}
FIRST(F)={(,a,b,∧)}FOLLOW(T)={#,),+}
FIRST(T’)={(,a,b,∧,ε)}FOLLOW(T’)={#,),+}
FIRST(T)={(,a,b,∧)}FOLLOW(F)={(,a,b,∧),+,#}
FIRST(E’)={+,ε}FOLLOW(F’)={(,a,b,∧),+#}
FIRST(E)={(,a,b,∧)}FOLLOW(P)={(,a,b,∧),+,#,*}
(2)证明:
对于E’→+E|ε
FIRST(+E)={+}FIRST(ε)={ε}FOLLOW(E’)={#,}}
∵FIRST(+E)∩FIRST(ε)=ФFIRST(+E)∩FOLLOW(E’)=Ф
对于T’→T|ε
FIRST(T)∩FOLLOW(T’)=Ф
对于F’*F’|ε
FIRST(*F’)∩FOLLOW(F’)=Ф
对于P(E)|a|b|∧
FIRST((E))={()FIRST(a)={a}FIRST{b}={b}FIRST{∧}={∧}
∴根据LL
(1)文法的充要条件可以断定该文法是LL
(1)文法.
(3).构造其分析表如下:
a
b
∧
(
)
*
+
#
E
ETE’
ETE’
ETE’
ETE’
E’
E’ε
E’+E
E’ε
T
TFT’
TFT’
TFT’
TFT’
T’
T’T
T’T
T’T
T’T
T’ε
T’ε
T’ε
F
FPF’
FPF’
FPF’
FPF’
F’
F’ε
F’ε
F’ε
F’ε
F’ε
F’*F’
F’ε
F’ε
P
Pa
Pb
P∧
P(E)
(注:
空白处均为ERROR)
2解:
(2)FIRST(aABbcd)={a};FIRST()={};
FIRST(Asd)={a,d};FRIST(SAh)={a,h};
FIRST(eC)={e};FRIST(Sf)={a,f};
FIRST(Cg)={g,a,f};FRITS(aBD)={a};
(3)对于CSf|Cg,FIRST(Sf)∩FIRST(Cg)={a,f}
此文法不是LL
(1)文法。
6.解:
一个文法是文法的充要条件是:
∨A€Vn,A的任何两条不同的规则A:
:
=α|β
有下列条件成立:
*
①FIRST(α)∩FIRST(β)=Φ
②β=>ε,则FIRST(α)∩FOLLOW(A)=Φ
证明:
充分性:
*
对于任意非终结符A若A:
:
=α|β满足上述条件,取分析表项M[A,a],a€Vt
若A=>a…假设α=>a…即a€FIRST(α)
∵FIRST(α)FIRST(β)=Φ
*
∴a€FIRST(β)分析表项M[A,a]=A:
:
=α
若β=>ε,且a€FOLLOW(A)a€FIRST(α)
M[A,a]=A:
:
=ε否则M[A,a]=error
综上,分析表的元素无多重定义,符合LL
(1)文法定义,是LL
(1)文法
必要性:
令对于LL(!
)文法G的∨A€Vn,A:
:
=α|β条件不成立
FIRST(α)FIRST(β)=B≠φFIRST(α)FIRST(β)=C≠φ
*
若a€β,则M[A,a]中,可同时存在A:
:
=α及A:
:
=β
若β=>ε则M[A,a]中,可同时存在A:
:
=αA:
:
=ε两条规则
这与定义相矛盾,假设错误
必要性得证。
P100
2.
(2)
解:
步骤
对象栈
算符栈
关系
读入符号
符号串
0
#
a+b*(c+d)-e#
1
#
a
+b*(c+d)-e#
2
a
#
+
b*(c+d)-e#
3
a
#+
b
*(c+d)-e#
4
ab
#+
*
(c+d)-e#
5
ab
#+*
(
c+d)-e#
6
ab
#+*(
c
+d)-e#
7
abc
#+*(
+
d)-e#
8
abc
#+*(+
d
)-e#
9
abcd
#+*(+
)
-e#
10
abf
#+*(
)
-e#
11
abf
#+*
-
e#
12
ag
#+
-
e#
13
h
#
-
e#
14
h
#-
e
#
15
he
#-
#
16
t
#
#
所以,a+b*(c+d)-e是文法的合法句子。
3.解:
procedureINSERT(u,a)
ifnotL[u,a]then
begin
L[u,a]:
=true;
将(u,a)压入栈STACK
end;
programMAIN;
begin
for每个非终结符U和终结符ado
L[u,a]:
=false;
For每条形如U:
:
=…a或U:
:
=…aV规则do
INSERT(U,a);
WhileSTACK非空DO
Begin
将STACK栈顶弹出,记为(V,a);
for每条形如U:
:
=…V规则do
INSERT(U,a);
End;
End
4.
短语素短语
E无无
TT无
iii
T*FT*FT*F
F*FF*F,FF*F
i*Fi*F,ii
F*iF*i,F,ii
F+F+FF+F+F,F+F,FF+F
5.
步骤
符号栈
优先关系
读入符号
符号串
0
#
#
i
i
+i#
1
#i
#
i
+
+
i#
2
#N
#
+
+
i#
3
#N+
+
i
i
#
4
#N+i
+
i
#
#
5
#N+N
#
+
#
#
6
#N
接受
所以i+i是符合文法的句子。
步骤
符号栈
优先关系
读入符号
符号串
0
#
#
i
i
*(i*i)#
1
#i
#
i
*
*
(i*i)#
2
#N
#
*
*
(i*i)#
3
#N*
*
(
(
i*i)#
4
#N*(
(
i
i
*i)#
5
#N*(i
(
i
*
*
i)#
6
#N*(N
(
*
*
i)#
7
#N*(N*
*
i
i
)#
8
#N*(N*i
*
i
)
)
#
9
#N*(N*N
(
i
)
)
#
10
#N*(N
(
)
)
#
11
#N*(N)
*
(
)
#
#
12
#N*N
#
*
#
#
13
#N
接受
P104
1.
(a)
(1)E+F*i#=>E+i*i#
所以活前缀的集合为{E,E+,E+i}
(2)E+P↑T#=>E+P↑P#=>E+P↑F#=>E+P↑(E)#=>E+P↑(E+T)#=>E+P↑(E+P)#=>
E+P↑(E+F)#=>E+P↑(E+i)#=>E+P↑(T+i)#=>E+P↑(P+i)#=>E+P↑(F+i)#=>
E+P↑(i+i)#
(b)
(1)i+i*i#的最右推导逆过程如下:
i+i*i#-->F+i*i#-->P+i*i#-->T+i*i#-->E+i*i#-->E+F*i#-->E+P*F#-->
E+P#-->E+T#-->E#
(2)i+i↑(i+i)#的最右推导的逆过程如下:
i+i↑(i+i)#-->F+i↑(i+i)#-->P+i↑(i+i)#-->T+i↑(i+i)#-->E+i↑(i+i)#-->E+F↑(i+i)#-->E+P↑(i+i)#-->E+P↑(F+i)#-->E+P↑(P+i)#-->
E+P↑(T+i)#-->E+P↑(E+i)#-->E+P↑(E+F)#-->E+P↑(E+P)#-->E+P↑(E+T)#-->E+P↑(E)#-->E+P↑F#-->E+P↑T#-->E+T#-->E#
2.
(1)
步骤
栈内容
输入串
活前缀
句柄
0
0
i+i-i#
1
0i3
+i-i#
i
i
2
0T2
+i-i#
T
T
3
0E1
+i-i#
E
4
0E1+6
i-i#
E+
5
0E1+6i3
-i#
E+i
i
6
0E1+6T8
-i#
E+T
E+T
7
0E1
-i#
E
8
0E1-7
i#
E-
9
0E1-7i3
#
E-i
i
10
0E1-7T9
#
E-T
E-T
11
0E1
#
E
12
0E1#5
E#
E#
13
0
接受
所以,i+i-i#为合法输入串。
(2)
步骤
栈内容
输入串
活前缀
句柄
0
0
(i+i)-i#
1
0(4
i+i)-i#
(
2
0(4i3
+i)-i#
(i
i
3
0(4T2
+i)-i#
(T
T
4
0(4E10
+i)-i#
(E
5
0(4E10+6
i)-i#
(E+
i
6
0(4E10+6i3
)-i#
(E+i
i
7
0(4E10+6T8
)-i#
(E+T
E+T
8
0(4E10
)-i#
(E
9
0(4E10)11
-i#
(E)
(E)
10
0T2
-i#
T
T
11
0E1
-i#
E
12
0E1-7
i#
E-
13
0E1-7i3
#
E-i
i
14
0E1-7T9
#
E-T
E-T
15
0E1
#
E
16
0E1#5
E#
E#
17
0
接受
所以(i+i)-i#为合法输入串。
P108
1.解:
(a)Ø
(b){F→(.E),E→.E-T,E→.T,T→.F,T→.F↑T,F→.i,F→.(E)}
(c){E→E-T.}
2.解:
I0=closure({S.E#})={S.E#,E.wX,E.xY}
I1=goto(I0,E)=closure({SE.#})={SE.#}
I2=goto(I0,w)=closure({Ew.X})={Ew.X,X.yX,X.z}
I3=goto(I0,x)=closure({Ex.Y})={Ex.Y,Y.yY,Y.z}
I4=goto(I1,#)=closure({SE#.})={SE#.}
I5=goto(I2,X)=closure({EwX.})={EwX.}
I6=goto(I2,y)=closure({Xy.X})={Xy.X,X.yX,X.z}
I7=goto(I2,z)=closure({X.z})={Xz.}
I8=goto(I3,Y)=closure({ExY.})={ExY.}
I9=goto(I3,y)=closure({Yy.Y})={YyY.}
I10=goto(I3,z)=closure({Yz.})={Yz.}
I11=goto(I6,X)=closure({XyX.})={XyX.}
I12=goto(I9,Y)=closure({Yy.Y})={Yy.Y}=I9
LR(0)机器为:
y
I0
z
3.解:
步骤
栈内容
输入串
活前缀
句柄
1
0
wyyz#
2
0w2
yyz#
w
2
0w2y6
yz#
wy
3
0w2y6y6
z#
wyy
4
0w2y6y6z7
#
wyyz
z
5
0w2y6y6X11
#
wyyx
yx
6
0w2y6X11
#
wyx
yx
7
0w2X5
#
wx
wx
8
0E1
#
E
9
0E1#4
#
E#
E#
10
0
accept
步骤
栈内容
输入串
活前缀
句柄
0
0
xyyyz#
1
0x3
yyyz#
x
2
0x3y9
yyz#
xy
3
0x3y9y9
yz#
xyy
4
0x3y9y9y9
z#
xyyy
5
0x3y9y9y9z10
#
xyyyz
z
6
0x3y9y9y9Y12
#
xyyyY
yY
7
0x3y9y9Y12
#
xyyY
yY
8
0x3y9Y12
#
xyY
yY
9
0x3Y8
#
xY
xY
10
0E1
#
E
11
0E1#4
#
E#
E#
12
0
accept
P116
1.给定下列产生式的文法:
S→E#E→T|E+TT→P|T*PP→F|F↑PF→i|(E)
(a)为该文法构造LR(0)机器。
(b)证明该文法是SLR
(1)。
(c)为该文法构造SLR
(1)分析表。
解:
(a)构造LR(0)机器
C0:
{S→.E#,E→.T,E→.E+T,T→.P,T→.T*P,P→.F,P→.F↑P,F→.i,F→.(E)}
C1:
{S→E.#,E→E.+T}
C2:
{E→T.,T→T.*P}
C3:
{T→P.}
C4:
{P→F.,P→F.↑P}
C5:
{F→i.}
C6:
{F→(.E),E→.T,E→.E+T,T→.P,T→.T*P,P→.F,P→.F↑P,F→.i,F→.(E)}
C7:
{S→E#.}
C8:
{E→E+.T,T→.P,T→.T*P,P→.F,P→.F↑P,F→.i,F→.(E)}
C9:
{T→T*.P,P→.F,P→.F↑P,F→.i,F→.(E)}
C10:
{P→F↑.P,P→.F,P→.F↑P,F→.i,F→.(E)}
C11:
{F→(E.),E→E.+T}
C12:
{E→E+T.,T→T.*P}
C13:
{T→T*P.}
C14:
{P→F↑P.}
C15:
{F→(E).}
(b)对于状态C2:
{E→T.,T→T.*P}
Follow(E)={#,+,>}*不属于Follow(E)
C4:
{P→F.,P→F.↑P}
Follow(P)={#,+,>,*}↑不属于Follow(P)
C12:
{E→E+T.,T→T.*P}
Follow(E)={#,+,>}*不属于Follow(E)
∴该文法构成的分析表不会出现多重定义出口。
它是SLR
(1)文法。
(c)构造分析表为:
状态
S
E
T
P
F
+
*
↑
i
(
)
#
C0
C1
C2
C3
C4
S5
S6
C1
S8
S7
C2
r1
S9
r1
r1
C3
r3
r3
r3
r3
C4
r5
r5
S10
r5
r5
C5
r7
r7
r7
r7
r7
C6
C11
C2
C3
C4
S5
S6
C7
A
C8
C12
C3
C4
S5
S6
C9
C13
C4
S5
S6
C10
C14
C4
S5
S6
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 34
![提示](https://static.bdocx.com/images/bang_tan.gif)