6
#(N,a
)
#
a>)归约
7
#(N,N
)
#
>)归约
8
#(N
)
#
(=)移进
9
#(N)
#
)>#归约
10
#N
#
接受
四、对下面的文法G:
S→a|b|(T)
T→T,S|S
(1)消去文法的左递归,得到等价的文法G2;
(2)判断文法G2是否LL
(1)文法,如果是,给出其预测分析表。
(15)
G2:
S→a|b|(T)
T→ST’
T’→,ST’|ε
G2是LL
(1)文法。
a
b
(
)
,
#
S
S→a
S→b
S→(T)
T
T→ST’
T→ST’
T→ST’
T’
T’→ε
T’→,ST’
五、设有文法G[A]:
A→BCc|gDB
B→bCDE|ε
C→DaB|ca
D→dD|ε
E→gAf|c
(1)计算该文法的每一个非终结符的FIRST集和FOLLOW集;
(2)试判断该文法是否为LL
(1)文法。
(15)
FIRST
FOLLOW
A
B
C
D
E
A,b,c,d,g
b
A,c,d
D
C,g
A,c,d
C,d,g
A,b,c,g
是LL
(1)文法。
六、对表达式文法G:
E→E+T|T
T→T*F|F
F→(E)|I
(1)造各非终结符的FIRSTVT和LASTVT集合;
(2)构造文法的算符优先关系表。
(15)
FIRSTVT
LASTVT
E
T
F
*,+,(,i
*,(,i
(,i
*,+,),i
*,),i
),i
算符优先关系表
+
*
I
(
)
#
+
*
I
(
)
#
>
>
>
<
>
<
<
>
>
<
>
<
<
<
<
<
<
<
<
<
>
>
>
=
>
>
>
>
>
=
《编译原理》期末试题(六)
六对文法G[S]
S→aSb|P
P→bPc|bQc
Q→Qa|a
(1)它是否是算符优先文法?
请构造算符优先关系表
(2)文法G[S]消除左递归、提取左公因子后是否是LL
(1)文法?
请证实。
答:
1.求出G[S]的FIRSTVT集和LASTVT集:
FIERSTVT(S)={a,b}LASTBVT(S)={b,c}
FIERSTVT(P)={b}LASTBVT(P)={c}
FIERSTVT(Q)={a}LASTBVT(Q)={a}
构造优先关系表为:
a
b
c
a
<>
<
>
b
<>
c
>
>
由于在优先关系中同时出现了aa以及bb,所以该文法不是算符优先文法。
2.消除左递归和提取左公因子后的文法为:
S→aSb|P
P→bP’
P’→Pc|Qc
Q→aQ’
Q’→aQ’|ε
求具有相同左部的两个产生式的Select集的交集:
Select(S→aSb)∩Select(S→P)={a}∩First(P)={a}∩{b}=Ф
Select(P’→Pc)∩Select(P’→Qc)=First(P)∩First(Q)={b}∩{a}=Ф
Select(Q’→aQ’)∩Select(Q’→ε)={a}∩Follow(Q)={a}∩{c}=Ф
所以修改后的文法是LL
(1)文法。
八已知源程序如下:
prod:
=0;
i:
=1;
whilei≤20do
begin
prod:
=prod+a[i]*b[i];
i:
=i+1
end;
试按语法制导翻译法将源程序翻译成四元式序列(设A是数组a的起始地址,B是数组b的起始地址;机器按字节编址,每个数组元素占四个字节)。
【答案:
】
九设有以下程序段
procedureP(x,y,z)
begin
Y:
=y*3;
Z:
=X+z;
end;
begin
a:
=5;b:
=2;
p(a*b,a,a);
print(a);
end
若参数传递的方法分别为
(1)传值、
(2)传地址、(3)传名,试问结果分别什么?
(1)传值5;
(2)传地址25;(3)传名45
《编译原理》期末试题(七)
5.(6分)对下列四元式序列生成目标代码:
A:
=B*C
D:
=E+F
G:
=A+D
H:
=G*2
其中,H是基本块出口的活跃变量,R0和R1是可用寄存器
答:
LDR0,B
MULR0,C
LDR1,E
ADDR1,F
ADDR0,R1
MULR0,2
STR0,H
四、对于文法G(E):
(8分)
ET|E+T
TF|T*F
F(E)|i
1.写出句型(T*F+i)的最右推导并画出语法树。
2.写出上述句型的短语,直接短语、句柄和素短语。
答:
1.(4分)
ETF(E)(E+T)(E+F)
(E+i)(T+i)(T*F+i)
2.(4分)
短语:
(T*F+i),T*F+i,T*F,i
直接短语:
T*F,i
句柄:
T*F
素短语:
T*F,i
五、设文法G(S):
(12分)
1.构造各非终结符的FIRSTVT和LASTVT集合;
2.构造优先关系表和优先函数。
(12分)
答:
(6分)
FIRSTVT(S)={i,+,),(}
FIRSTVT(A)={+,),(}
FIRSTVT(B)={),(}
LASTVT(S)={i,+,*,(}
LASTVT(A)={+,*,(}
LASTVT(B)={*,(}
优先关系表:
(3分)
i
+
(
)
*
i
>
<
<
<
+
>
>
<
<
>
(
>
>
>
)
<
<
<
*
>
>
>
优先函数:
(3分)
i
+
(
)
*
f
2
6
6
1
6
g
1
4
6
6
1
七、(8分)将语句
if(A0)thenwhileC>0doC:
=C+D
翻译成四元式。
(8分)
答:
100(j<,A,X,102)
101(j,-,-,109)
102(j>,B,0,104)
103(j,-,-,109)
104(j>,C,0,106)
105(j,-,-,109)
106(+,C,D,T1)
107(:
=,T1,-,C)
108(j,-,-,104)
109
(控制结构3分,其他5分)
八、(10分)设有基本块如下:
T1:
=S+R
T2:
=3
T3:
=12/T2
T4:
=S/R
A:
=T1-T4
T5:
=S+R
B:
=T5
T6:
=T5*T3
B:
=T6
(2)设A,B是出基本块后的活跃变量,请给出优化后的四元式序列。
答:
(2)四元式序列:
(4分)
T1:
=S+R
T4:
=S/R
A:
=T1-T4
B:
=T1*4
《编译原理》期末大题
1.设有如下文法G(S),试消除其左递归。
G(S):
S—>Ac|c
A—>Bb|b
B—>Sa|a
解:
S→abcS′|bcS′|cS′,S′→abcS′|
2.试构造与下面G(S)等价的无左递归的文法。
G(S):
S—>Sa|Nb|c
N—>Sd|Ne|f
解:
S→fN′bS′|cS′,S′→aS′|dN′bS′|
N′→eN′|
3.设有文法G(S):
S—>aBc|bAB
A—>aAb|b
B—>b|ε
①求各产生式的FIRST集,FOLLOW(A)和FOLLOW(B),以及各产生式的SELECT集。
②构造LL
(1)分析表,并分析符号串baabbb是否是。
解:
(1)FIRST(aBc)={a},FIRST(bAB)={b}FIRST(aAb)={a},A→b:
FIRST(A→b)={b},B→b:
FIRST(b)={b},FIRST(ε)={ε}
FOLLOW(A)={b,#},FOOLOW(B)={c,#}
SELECT(S→aBc)={a},SELECT(S→bAB)={b},SELECT(A→aAb)={a},SELECT(A→b)={b},SELECT(B→b)={b},SELECT(B→
)={c,#}
因此,所得的LL
(1)分析表如表A-4所示。
表A-4LL
(1)分析表
输入
VN
输入符号
a
b
c
#
S
S→aBc
S→bAB
A
A→aAb
A→b
B
B→b
B→
B→
(2)分析符号串baabbb成功,baabbb是该文法的句子,如图A-16所示。
图A-16识别串baabbb的过程
4.对下列文法G(S):
S—>D(R)R—>R;P|P
P—>S|ID—>i
①计算文法G中每个非终结符的FIRSTVT集和LASTVT集。
②构造文法G的算符优先关系矩阵。
解:
(1)FIRSTVT(S)={(,i},FIRSTVT(D)={i},FIRSTVT(R)={;,(,i},FIRSTVT(P)={i,(},LASTVT(S)={)},LASTVT(D)={i},LASTVT(R)={;,),i},LASTVT(P)={i,)}
(2)算符优先矩阵,如表A-5所示。
表A-5优先矩阵
(
)
;
i
#
(
)
;
i
#
5.已知文法G(S):
S—>a|(T)
T—>T,S|S
①给出句子((a,a),a)的最左推导并画出语法树;②给出句型(T,a,(T))所有的短语、直接短语、素短语、最左素短语、句柄和活前缀。
解:
(1)最左推导:
S
(T)
(T,S)
(S,S)
(a,S)
(a,(T))
(a,(T,S))
(a,(S,S))
(a,(a,S))
(a,(a,a))
语法树:
如图A-16所示。
图A-16(a,(a,a))的语法树
(2)句型(T,a,(T))的短语、直接短语、素短语、最左素短语、句柄、活前缀及语法树(图A-17)。
短语:
a||T,a||(T)||T,a,(T)||(T,a,(T))
直接短语:
a||(T)
素短语:
a||(T)
最左素短语:
a
句柄:
a
活前缀:
||(||(T||(T,||(T,a
图A-17(T,a,(T))的语法树
四、综合题
1.已知文法G(E)
E→T|E+T
T→F|T*F
F→(E)|i
(1)给出句型(T*F+i)的最右推导;
(2)给出句型(T*F+i)的短语、简单短语、句柄、素短语、最左素短语。
解:
(1)最右推导:
E->T->F->(E)->(E+T)->(E+F)->(E+i)->(T+i)->(T*F+i)
(2)短语:
(T*F+i),T*F+i,T*F,i
简单短语:
T*F,i
句柄:
T*F
素短语:
T*F,i
最左素短语:
T*F
3.文法:
S->MH|a
H->LSo|ε
K->dML|ε
L->eHf
M->K|bLM
判断G是否为LL
(1)文法,如果是,构造LL
(1)分析表。
解:
各符号的FIRST集和FOLLOW集为:
各产生式SELECT集为:
SELECT
S->MH
{d,b,e,#,o}
S->a
{a}
H->LSo
{e}
H->ε
{#,f,o}
K->dML
{d}
K->ε
{e,#,o}
L->eHf
{e}
M->K
{d,e,#,o}
M->bLM
{b}
预测分析表
由于预测分析表中无多重入口,所以可判定文法是LL
(1)的。
4.对下面的文法G:
E->TE'
E'->+E|ε
T->FT'
T'->T|ε
F->PF'
F'->*F'|ε
P->(E)|a|b|^
(1)计算这个文法的每个非终结符的FIRST集和FOLLOW集。
(4分)
(2)证明这个方法是LL
(1)的。
(4分)
(3)构造它的预测分析表。
(2分)
解:
(1)计算这个文法的每个非终结符的FIRST集和FOLLOW集。
FIRST集合有:
FIRST(E)=FIRST(T)=FIRST(F)=FIRST(P)={(,a,b,^};
FIRST(E')={+,ε}