编译原理34Word文件下载.docx
- 文档编号:20941701
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:27
- 大小:28.55KB
编译原理34Word文件下载.docx
《编译原理34Word文件下载.docx》由会员分享,可在线阅读,更多相关《编译原理34Word文件下载.docx(27页珍藏版)》请在冰豆网上搜索。
(注:
上图中的(空)列表示没有该列。
即上图为两个独立的表)
P1
状态转换图为:
0,1
简化为:
∴R=1(0|1)*|0的DFAM为:
⑵R1=1010*|1(010)*1对应的DFAM为:
q8
S13
R2=(1010*|1(0|0)*1)*对应的DFAM为:
S9
P11
对应R=1(1010*|1(010)*1)*0的DFAM为:
P14
P9
8.解:
(a)
Ia
Ib
{0}
{0,1}
{1}
φ
∴DFA的状态转换矩阵为:
a
b
q0
q1
q2
化简:
p0=q0=q1p1=q2
a
状态图为:
b
P0
10.解:
它所识别的语言为:
(1010)*
第四章语法分析
P80
1.解:
(见课本)
文法有左递归,故先改写文法:
error
A
A∷=(B)|dBeB∷=c{c}
下面给出两个分析子程序的框图:
Sym=’c’(?
)
B
Y
N
两分析子程序如下:
procedureA;
IFsym=’(‘THEN
Begin
Nextsym;
B;
Ifsym=’)’Then
Else
Error
End;
ELSE
Ifsym=’d’Then
ifsym=’e’then
Nextsym
else
Error;
ProcedureB;
IFsym=’c’THEN
Whilesym=’c’do
End
/*程序中nextsym为读字符子程序,error为出错处理子程序*/
/*主程序*/
programG;
VARsym:
CHAR;
BEGIN
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).三个分析子程序框图如下:
errror
nextsym
Sym=’a’(?
B
三个分析子程序为:
procedureZ;
ifsym=’c’then
begin
Ifsym=’c’then
Else
End;
Ifsym=’a’then
Ifsym=’d’then
Else
ProcedureA;
Ifsym=’c’then
Whilesym=’a’do
ProcedureB;
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).构造其分析表如下:
∧
(
)
*
+
#
E
ETE’
E’
E’ε
E’+E
T
TFT’
T’
T’T
T’ε
F
FPF’
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)文法。
一个文法是文法的充要条件是:
∨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)
解:
步骤
对象栈
算符栈
关系
读入符号
符号串
#
a+b*(c+d)-e#
+b*(c+d)-e#
2
+
b*(c+d)-e#
3
#+
*(c+d)-e#
4
ab
(c+d)-e#
5
#+*
(
c+d)-e#
6
#+*(
c
+d)-e#
7
abc
d)-e#
8
#+*(+
d
)-e#
9
abcd
-e#
10
abf
11
-
e#
12
ag
13
h
14
#-
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;
for每个非终结符U和终结符ado
=false;
For每条形如U:
=…a或U:
=…aV规则do
INSERT(U,a);
WhileSTACK非空DO
将STACK栈顶弹出,记为(V,a);
for每条形如U:
=…V规则do
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.
符号栈
优先关系
i
+i#
#i
i#
#N
#N+
#N+i
#N+N
接受
所以i+i是符合文法的句子。
*(i*i)#
(i*i)#
#N*
i*i)#
#N*(
*i)#
#N*(i
i)#
#N*(N
#N*(N*
)#
#N*(N*i
#N*(N*N
#N*(N)
#N*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#-->
2.
(1)
栈内容
输入串
活前缀
句柄
i+i-i#
0i3
+i-i#
0T2
T
0E1
E
0E1+6
i-i#
E+
0E1+6i3
-i#
E+i
0E1+6T8
E+T
0E1-7
E-
0E1-7i3
E-i
0E1-7T9
E-T
0E1#5
E#
所以,i+i-i#为合法输入串。
(2)
(i+i)-i#
0(4
i+i)-i#
0(4i3
+i)-i#
(i
0(4T2
(T
0(4E10
(E
0(4E10+6
i)-i#
(E+
0(4E10+6i3
)-i#
(E+i
0(4E10+6T8
(E+T
0(4E10)11
(E)
17
所以(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
步骤
栈内容
输入串
活前缀
句柄
wyyz#
2
0w2
yyz#
w
0w2y6
yz#
wy
3
0w2y6y6
z#
wyy
4
0w2y6y6z7
#
wyyz
5
0w2y6y6X11
wyyx
yx
6
0w2y6X11
wyx
7
0w2X5
wx
wx
8
9
0E1#4
E#
10
accept
xyyyz#
0x3
yyyz#
x
0x3y9
yyz#
xy
0x3y9y9
xyy
0x3y9y9y9
xyyy
0x3y9y9y9z10
xyyyz
6
0x3y9y9y9Y12
xyyyY
yY
0x3y9y9Y12
xyyY
8
0x3y9Y12
xyY
0x3Y8
xY
11
12
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:
Follow(E)={#,+,>
}*不属于Follow(E)
Follow(P)={#,+,>
*}↑不属于Follow(P)
∴该文法构成的分析表不会出现多重定义出口。
它是SLR
(1)文法。
(c)构造分析表为:
状态
S
P
F
↑
C0
C1
C2
C3
C4
S5
S6
S8
S7
r1
r3
r5
S10
C5
r7
C6
C11
C7
C8
C12
C9
C13
C10
C14
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 34
![提示](https://static.bdocx.com/images/bang_tan.gif)