编译原理习题课

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

F ),(,
TT+F *,(
非终结符在前, 终结符在后
S’ #S#
F)V*
VViT
TT+F
算符优先关系
i
+
*
(
)
#
i






+






*




(




)





#





是算符优先文法
(+(i(的分析过程
步骤 栈
1
#
2
#(
3
#F
4
#F+
5
#F+(
6
#F+F
7
#F
8
#Fi
6 {5}

7 {7}

8 {4,19,17}

9 {9}

10 {5,18}

11 {12}

{7} {5,18}
{4,19,17}





{8}
{12}







用LR(0)项目代替DFA状态图
A
1: S → ·A A → ·Ab A →·bBa
FIRST(E)=FIRST(T)=FIRST(F)=FIRST(P)={(,a,b,^}; FIRST(E’)={+,ε} FIRST(T)=FIRST(F)=FIRST(P)={(,a,b,^}; FIRST(T‘)=FIRST(T)∪{ε}={(,a,b,^,ε}; FIRST(F)=FIRST(P)={(,a,b,^}; FIRST(F’)=FIRST(P)={*,ε}; FIRST(P)={(,a,b,^};
SELECT(FPF’)=FIRST(P)={(,a,b,^};
SELECT(F‘*F‘)={*}; SELECT(F’ε)=FOLLOW(F/)={(,a,b,^,+,),#};
SELECT(P(E))={(} SELECT(Pa)={a} SELECT(Pb)={b} SELECT(P^)={^}
(1)给出该句子的相应的最左推导和最右推导
(2)该文法的产生式集合P可能有哪些元素?
S
(3)找出该句子的所有的短语、简单短语、句柄。
• SABSaBSaSBBS aBBS
A
B
S
abBSabbSabbAaabbaa
最左推导 最右推导略
a SBBA a
• 产生式集合:
S→ABS
b
1
3
6
b
d
a
5
最小化后的DFA
该DFA用正规式表示为: b*a(c|da)*bb*
习题解答
2.对下面的文法G:
ETE’ E’+E|ε TFT’ T’T|ε FPF’ F’*F’|ε P(E)|a|b|^
1. S为文法开始符号,#一定是FOLLOW(S)元素 2. 设A B是一个产生式,则First()的非空元素 属于FOLLOW(B) 如果*ε,则FOLLOW(A)的元素就要加入到 FOLLOW(B)中,因为:
7等价,所以3,4等价。 由于F(1,b)=F(2,b)=2,F(1,a)=3,F(2,a)=4,而3,4等价,所以1,2
等价。 由于状态5没有输入字符b,所以与1,2,3,4都不等价。 综上所述,上图DFA的状态可最细分解为:P={{1,2},{3,4},
{5},{6,7}}。
b
c
a
3[Q]
6[D]
2[A]
7[B]
2[A]
7[B]
3[Q]
6[D]
因为4,5状态包含Z,所以都是终态,1,2,3,6,7都是非终态;
1态输入b后为3,是非终态;2和3输入b后为4和5是终态,所以1和2,3是不同的状态;
2和3是相同等价状态;4和5是等价状态;6何是等价状态;
所以,最后剩下:a1,2,4,6四个状态.
S’ #S# SV VT | ViT TF | T+F F)V* | ( 1. 给出(+(i(的规范推导。 2. 指出句型F+Fi(的短语,句柄,素短语。 3. G[S]是否为OPG?若是,给出(1)中句子的分析过程。
给每个产生式加标号
• SV[1] • VT [2] • V ViT [3] • TF[4] • T T+F [5] • F)V*[6] • F ( [7]
9. 将图4.18的DFA最小化,并用正规式描述它所识别的语言:
1 b 2 b
ac 3 c
a 4
b
d 5
d ab
6b b 7
因为6,7是DFA的终态,其他是非终态,可将状态集分成两个子集: P1={1,2,3,4,5},P2={6,7}。
由于F(6,b)=F(7,b)=6,而6,7又没有其他输入,所以6,7等价。 由于F(3,c)=F(4,c)=3,F(3,d)=F(4,d)=5,F(3,b)=6,F(4,b)=7,而6,

• 直接短语
F,(

• 最左的直接短语为句柄(普通)


i
F
• 素短语:
(, F+F
T
(
• 算符优先意义的句柄:
T
+
F
(
F
G[S]是否为OPG?
求所有非终结符的FIRSTVT 求所有非终结符的LASTVT 根据产生式求出所有优先关系:
相等关系 小于关系:终结符在前,非终结符在后,利用
给出(+(i(的规范推导——最右推导
• S V[1] ViT[2] ViF[4] Vi([7] T[2]i( T+F[5]i( T+([7] i( F[4]+( i( ([7] +( i (
指出句型F+Fi(的短语,句柄,素短语
• 短语:
F+Fi(, F,F+F,(
证明这个方法是LL(1)的
SELECT(ETE/)=FIRST(T)={(,a,b,^};
SELECT(E‘+E)={+}; SELECT(E’ε)=FOLLOW(E/)={),#}
SELECT(TFT‘)=FIRST(F)={(,a,b,^};
SELECT(T‘T)=FIRST(T)={(,a,b,^}; SELECT(T’ε)=FOLLOW(T/)={+,),#};
16
B→a·Ab
A
17
B→aA·b
b
18 B→aAb·
有穷自动机的确定化
a
b
c
A
B
1 {1,3,6}

{7,10,13,15} {2,4}

2 {7,10,13,15} {11,14,16,3 ,6}

{8}
3 {2,4}

{5}


4 {11,14,16,3,6}
5 {8}
{9}
a
a
b
aA
bB
b
D
b
b
Z
a b
b
Q a
简化产生式后生成的NFA
I 1[S] 2[A] 3[Q] 4[B,Z] 5[D,Z] 6[D] 7[B]
Ia = ε-closure(MoveTo(I,a)) Ib = ε-closure(MoveTo(I,b))
2[A]
3[Q]
2[A]
4[B,Z]
3[Q]
5[D,Z]
非终结符 E E’ T T‘ F F’ P
FIRST集合
(,a,b,^ +,ε
(,a,b,^ (,a,b,^,ε (,a,b,^
*,ε (,a,b,^
FOLLOW集合
),# ),# +,),# +,),# (,a,b,^,+,),# (,a,b,^,+,),# *,(,a,b,^,+,),#
计算每个非终结符的FIRST集合
• D 1A1 • A B 两个产生式,在推导过程中,可能会出现这样的句型
S*…1A1… *…1B1… *…1B1…
计算这个文法的每个非终结符的FIRST集和FOLLOW 集。
证明这个方法是LL(1)的。
构造它的预测分析表。
计算每个非终结符的FIRST和FOLLOW集合
3.构建NFA
6
ε
A →·bBa
ε
εb
εε
3
ε
A → ·Ab
ε
A
ε
1
S → ·A
A
10
ε
B →·aAc
a
13
ε
B → ·a
a
15
ε
B →·aAb
a
7
A→b·Ba
B
4 A → A·b
b
2
S → A·
8
A→bB·a
a
5 A → Ab·
11Fra Baidu bibliotek
B→a·Ac
A
14 B→a·
19
B→aA·c
c
9 A→bBa·
12 B→aAc·
习题课
令文法G[E]为: E→TE+TE-T T→FT*FT/F F→(E)i
证明E+T*F是它的句型,指出这个句型的所有短语、直接短语
和句柄
• EE+TE+T*F
E
• 短语: E+T*F和T*F
• 直接短语: T*F • 句柄: T*F
E
+
T
T
*
F
一个上下文无关文法生成的句子abbaa的推导树如图。
习题 第7题
证明下列文法不是LR(0)但是SLR(0) • S→ A • A → Ab bBa • B → aAc a aAb
1.首先拓展文法
• S→ A • A → Ab • A → bBa • B → aAc •B → a • B → aAb
2.分解LR(0)项目
• S → ·A;S → A·; • A → ·Ab;A → A·b;A → Ab· ; • A →·bBa;A→b·Ba;A→bB·a;A→bBa·; • B →·aAc;B→a·Ac;B→aA·c;B→aAc· ; • B → · a; B → a · ; • B →·aAb;B→a·Ab;B→aA·b;B→aAb· ;
B
5: A→bB·a
b
2:
A→b·Ba
B →·aAc
B → ·a
B →·aAb
b
6: A → Ab·
11: B→aAc·
c
3: S → A· A → A·b a
4: B→a·Ac B→a· B→a·Ab
A → ·Ab
A →·bBa 7:
A→b·Ba b
bba
B→SBB
S→Aa
S→
B→b
A→a
短语、句柄
习题解答
7.给文法G[S]:
– SaA|bQ
– AaA|bB|b
– BbD|aQ
– QaQ|bD|b
– DbB|aA
S
– EaB|bF
– FbD|aE|b
构造相应的最小的DFA。
由于从S出发任何输入串都 不能到达状态E和F,所以, 状态E,F为多余的状态, 不予考虑。
计算每个非终结符的FOLLOW集合
FOLLOW(E)={),#}; FOLLOW(E’)=FOLLOW(E)={),#}; FOLLOW(T)=FIRST(E’)∪FOLLOW(E)={+,),#};//不包含ε FOLLOW(T’)=FOLLOW(T)=FIRST(E’)∪FOLLOW(E)={+,),#}; FOLLOW(F)=FIRST(T’)∪FOLLOW(T)={(,a,b,^,+,),#};//不包
含ε
FOLLOW(F’)=FOLLOW(F)=FIRST(T’)∪FOLLOW(T)={(,a,b,^,+ ,),#};
FOLLOW(P)=FIRST(F’)∪FOLLOW(F)={*,(,a,b,^,+,),#};//不 包含ε
在求FOLLOW集合时,要特别注意P76页的定义: A B,FOLLOW(B)包含的FIRST元素,如果*ε,则 FOLLOW(A)的元素就要加入到FOLLOW(B)中。
9
#Fi(
10
#FiF
11
#F
优先关系
#≮( (≯+ #≮+ +≮( (≯i +≯i #≮i i≮( (≯# i≯# #≡#
当前符号
( + + ( i i i ( # # #
剩余输入 串
(+(i(# (i(# (i(# i(# (# (# (# #
移进或归 约
移进 归约 移进 移进 归约 归约 移进 移进 归约 归约 接受
a
a
b
1
a2
1
ba
2
a
a
4
3
5 ab
b a
bb 6 7b
b a
6 b
b
4
a
b
最小化的DFA
8.给出下述文法所对应的正规式
S0A|1B A1S|1 B0S|0 将 A1S|1 和 B0S|0 分别代入 S0A|1B 得:
S=01S|01 S=10S|10
得产生式:S=01S|10S|01|10 化简得: S=(01|10) S | (01|10) S=(01|10)*(01|10) 得正规式: (01|10)*(01|10)
预测分析表
+
*
(
)
a
b
^
#
E
TE‘
TE’ TE‘ TE’
E’ +E
ε
ε
T
FT‘
FT’ FT‘ FT’
T‘ ε
T ε T
T
T ε
F
PF‘
PF’ PF‘ PF’
F’ ε *F‘ ε ε ε ε ε ε
P
(E)
a
b
^
习题.第3题
• 有文法G[S]:
非终结符的FIRSTVT ; 大于关系:非终结符在前,终结符在后,利用
非终结符的LASTVT ;
FIRSTVT和LASTVT
FIRSTVT
S i,+,),(
终结符在前, 非终结符在后
LASTVT
S’ #S# i,+,*,(
V i,+,),( F)V* i,+,*,(
T +,),(
VViT +,(,*
相关文档
最新文档