编译原理,陈意云 ,课后解答3
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• S -> (L)|a L -> SL’ L’-> ,SL’|ε
• FIRST(S) = {(, a} FIRST(L) = FIRST(S) = {(, a} FIRST(L’) = {,, ε}
• FOLLOW(S) = (FIRST(L’)-{ε}) + FOLLOW(L) + FOLLOW(L’) + {$} = {,, ), $} FOLLOW(L) = {)} FOLLOW(L’) = FOLLOW(L) = {),$}
L -> ∙ S
S -> ∙(L)
S -> ∙a
(
I6 S -> (L ) ∙
(
I4 S -> (L ∙ ) L -> L ∙ , S
,
a
( I7
a
I3 S -> a∙
a
L -> L , ∙ S S S -> ∙(L) S -> ∙a
I8 L -> L , S ∙
3.16 (续)
• SLR(1)分析表构造
1) 若A∙a∈I,且goto(I,a)=J,则 action[I,a]=sJ 2)若A∙ ∈ I,则action[I,b] = r A,b∈Follow(A) 3)若S‘S∙ ∈ I,则action[I,$] = acc
4)若goto(I,B)=K,则GOTO[I,B]=K
5)其它为空白/error
3.16 (续)
状
action
态( ) a , $
0 s2
s3
1 s2
s3
acc
2
3
r3
r3 r3
4 s5
s6
5
r5
r5
6
r2
r2 r2
7 s2
s3
8
r4
r4
goto SL 1 14
7
3.16 (续)
• S -> ( L ) | a L -> L , S | S
• FOLLOW(S) = {$} + FOLLOW(L) = {$, ), ,} FOLLOW(L) = {), ,}
3.26 (续)
I0 L’ -> ∙L, $ L -> ∙MLb, $ L -> ∙a, $ M -> ∙ , a
L I1 L’ -> L ∙, $
I2
M
L -> M ∙Lb, $ L -> ∙MLb, b
L -> ∙a, b
M -> ∙, a
a I3 L -> a ∙, $
L I4
b I7
L -> M L ∙ b, $
3.16 (续)
• 拓展文法: (1) S‘ -> S (2) S -> ( L ) (3) S -> a (4) L -> L , S (5) L -> S
• 初态:I0 = closure{S’ -> ∙S} =
I0 S’ -> ∙S S -> ∙(L) S -> ∙a
3.16 (续)
• Goto(I0, S) =
S -> a∙Ac, $ A -> ∙bAb, c
L -> M L b ∙, $
I5 M L -> M ∙ Lb, b
L -> ∙MLb, b
L -> ∙a, b
M -> ∙, a
a
a
I6 L -> a ∙, b
L I8 L -> ML ∙ b, b
b M
I9 L -> ML b ∙, b
3.26 (续)
• I0,I2,I5面临a时存在移进-规约冲突
• Goto(I2, S)=
I5 L -> S ∙
• Goto(I2, ()=I2 • Goto(I2, a)=I3
3.16 (续)
• Goto(I4, )) =
I6 S -> (L ) ∙
• Goto(I4, ,)=
I7 L -> L , ∙ S S -> ∙(L) S -> ∙a
3.16 (续)
I1 S’ -> S ∙
• Goto(I0, () =
I2 S -> (∙ L) L -> ∙ L , S L -> ∙ S S -> ∙(L) S -> ∙a
• Goto(I0, a) =
I3 S -> a∙
3.16 (续)
• Goto(I2, L) =
I4 S -> (L ∙ ) L -> L ∙ , S
3.30
• 下面哪个不是LR(1)文法?对非LR(1)文法 给出所有冲突的LR(1)项目集
➢S->aAc A->Abb|b
➢S->aAc A->bAb|b
ห้องสมุดไป่ตู้
3.30 (续)
• 第二个不是LR(1)文法 第二个文法在句子的正中心按A->b规约, 而只向后看一位是无法判断是否到达句子 的中心位置的
• 存在冲突的项目集:
• Goto(I6, S) =
I8 L -> L , S ∙
• Goto(I6, () =I2 • Goto(I6, a) =I3
3.16 (续)
I0 S’ -> ∙S
S -> ∙(L)
S -> ∙a
S
I1 S’ -> S ∙
I5 L -> S ∙
S
( I2 S -> (∙ L)
L -> ∙ L , S L
3.8(b) (续)
(
)
,
a
$
S S -> (L)
S -> a
L L -> SL’
L -> SL’
L’
L’ -> ε L’-> ,SL’
L’ -> ε
3.16
• 给出接收文法 S -> ( L ) | a L -> L , S | S
的LR(0)活前缀的DFA;并且在此基础上构 造SLR(1)分析表.
3.26
• 一个非LR(1)的文法如下: L -> MLb | a M -> ε
给出所有有移进-规约冲突的规范LR(1)项目 集
3.26 (续)
• 拓广文法: L’ -> L L -> MLb | a M -> ε
• I0
I0 L’ -> ∙L, $ L -> ∙MLb, $ L -> ∙a, $ M -> ∙ , $/a
编译原理习题课(3)
10.08.2020
3.8(a)
• (a) 消除3.1的左递归 (b) 在(a)的基础上构造LL(1)分析表
3.8(a) (续)
• S -> (L)|a L -> L,S|S
• 只有直接左递归 S -> (L)|a L -> SL’ L’-> ,SL’|ε
3.8(b) (续)
3.23
• 证明下面文法不是SLR(1)文法 S -> X X -> Ma | bMc | dc | bda M -> d
3.23 (续)
• S -> X X -> Ma | bMc | dc | bda M -> d
• 存在移进-规约冲突 如句子dc,当d进栈后,面临c,此时项目 [X -> d ∙ c]要求移进,而c在FOLLOW(M)中, 因此项目[M -> d ∙]要求规约
• FIRST(S) = {(, a} FIRST(L) = FIRST(S) = {(, a} FIRST(L’) = {,, ε}
• FOLLOW(S) = (FIRST(L’)-{ε}) + FOLLOW(L) + FOLLOW(L’) + {$} = {,, ), $} FOLLOW(L) = {)} FOLLOW(L’) = FOLLOW(L) = {),$}
L -> ∙ S
S -> ∙(L)
S -> ∙a
(
I6 S -> (L ) ∙
(
I4 S -> (L ∙ ) L -> L ∙ , S
,
a
( I7
a
I3 S -> a∙
a
L -> L , ∙ S S S -> ∙(L) S -> ∙a
I8 L -> L , S ∙
3.16 (续)
• SLR(1)分析表构造
1) 若A∙a∈I,且goto(I,a)=J,则 action[I,a]=sJ 2)若A∙ ∈ I,则action[I,b] = r A,b∈Follow(A) 3)若S‘S∙ ∈ I,则action[I,$] = acc
4)若goto(I,B)=K,则GOTO[I,B]=K
5)其它为空白/error
3.16 (续)
状
action
态( ) a , $
0 s2
s3
1 s2
s3
acc
2
3
r3
r3 r3
4 s5
s6
5
r5
r5
6
r2
r2 r2
7 s2
s3
8
r4
r4
goto SL 1 14
7
3.16 (续)
• S -> ( L ) | a L -> L , S | S
• FOLLOW(S) = {$} + FOLLOW(L) = {$, ), ,} FOLLOW(L) = {), ,}
3.26 (续)
I0 L’ -> ∙L, $ L -> ∙MLb, $ L -> ∙a, $ M -> ∙ , a
L I1 L’ -> L ∙, $
I2
M
L -> M ∙Lb, $ L -> ∙MLb, b
L -> ∙a, b
M -> ∙, a
a I3 L -> a ∙, $
L I4
b I7
L -> M L ∙ b, $
3.16 (续)
• 拓展文法: (1) S‘ -> S (2) S -> ( L ) (3) S -> a (4) L -> L , S (5) L -> S
• 初态:I0 = closure{S’ -> ∙S} =
I0 S’ -> ∙S S -> ∙(L) S -> ∙a
3.16 (续)
• Goto(I0, S) =
S -> a∙Ac, $ A -> ∙bAb, c
L -> M L b ∙, $
I5 M L -> M ∙ Lb, b
L -> ∙MLb, b
L -> ∙a, b
M -> ∙, a
a
a
I6 L -> a ∙, b
L I8 L -> ML ∙ b, b
b M
I9 L -> ML b ∙, b
3.26 (续)
• I0,I2,I5面临a时存在移进-规约冲突
• Goto(I2, S)=
I5 L -> S ∙
• Goto(I2, ()=I2 • Goto(I2, a)=I3
3.16 (续)
• Goto(I4, )) =
I6 S -> (L ) ∙
• Goto(I4, ,)=
I7 L -> L , ∙ S S -> ∙(L) S -> ∙a
3.16 (续)
I1 S’ -> S ∙
• Goto(I0, () =
I2 S -> (∙ L) L -> ∙ L , S L -> ∙ S S -> ∙(L) S -> ∙a
• Goto(I0, a) =
I3 S -> a∙
3.16 (续)
• Goto(I2, L) =
I4 S -> (L ∙ ) L -> L ∙ , S
3.30
• 下面哪个不是LR(1)文法?对非LR(1)文法 给出所有冲突的LR(1)项目集
➢S->aAc A->Abb|b
➢S->aAc A->bAb|b
ห้องสมุดไป่ตู้
3.30 (续)
• 第二个不是LR(1)文法 第二个文法在句子的正中心按A->b规约, 而只向后看一位是无法判断是否到达句子 的中心位置的
• 存在冲突的项目集:
• Goto(I6, S) =
I8 L -> L , S ∙
• Goto(I6, () =I2 • Goto(I6, a) =I3
3.16 (续)
I0 S’ -> ∙S
S -> ∙(L)
S -> ∙a
S
I1 S’ -> S ∙
I5 L -> S ∙
S
( I2 S -> (∙ L)
L -> ∙ L , S L
3.8(b) (续)
(
)
,
a
$
S S -> (L)
S -> a
L L -> SL’
L -> SL’
L’
L’ -> ε L’-> ,SL’
L’ -> ε
3.16
• 给出接收文法 S -> ( L ) | a L -> L , S | S
的LR(0)活前缀的DFA;并且在此基础上构 造SLR(1)分析表.
3.26
• 一个非LR(1)的文法如下: L -> MLb | a M -> ε
给出所有有移进-规约冲突的规范LR(1)项目 集
3.26 (续)
• 拓广文法: L’ -> L L -> MLb | a M -> ε
• I0
I0 L’ -> ∙L, $ L -> ∙MLb, $ L -> ∙a, $ M -> ∙ , $/a
编译原理习题课(3)
10.08.2020
3.8(a)
• (a) 消除3.1的左递归 (b) 在(a)的基础上构造LL(1)分析表
3.8(a) (续)
• S -> (L)|a L -> L,S|S
• 只有直接左递归 S -> (L)|a L -> SL’ L’-> ,SL’|ε
3.8(b) (续)
3.23
• 证明下面文法不是SLR(1)文法 S -> X X -> Ma | bMc | dc | bda M -> d
3.23 (续)
• S -> X X -> Ma | bMc | dc | bda M -> d
• 存在移进-规约冲突 如句子dc,当d进栈后,面临c,此时项目 [X -> d ∙ c]要求移进,而c在FOLLOW(M)中, 因此项目[M -> d ∙]要求规约