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