第四章 作业【编译原理】
- 前言
- 推荐
- 第四章 作业
- 1
- 2
- 3
- 随堂练习
- 随堂练习03-27
- 随堂练习03-27
- 最后
前言
2023-3-28 18:32:18
以下内容源自《【编译原理】》
仅供学习交流使用
推荐
第三章 作业(78CE)【编译原理】
第四章 作业
1
考虑下面文法G1:
S→a|∧|(T)
T→T,S|S
(1)消除G1的左递归。然后,对每个非终结符,写出不带回溯的递归子程序。
(2)经改写或的文法是否是LL(1)的?给出它的预测分析表。
(1)①
消除G1的左递归
S→a|∧|(T)
T->ST'
T'->,ST'|ε
分析--消除G2的左递归
S→a|∧|(T) 无左递归
T→T,S|S 左递归
生成 S{,S} 转为右递归
T->ST'
T'->,ST'|ε
(1)②
写出不带回溯的递归子程序
PROCEDURE S;
BEGIN
IF SYM='a' OR SYM='∧'
THEN ADVANCE;
ELSE IF SYM='('
THEN BEGIN
ADVANCE T;
IF SYM=')'
ADVACE
ELSE
ERROR
END
ELSE
ERROR
END;
PROCEDURE T;
BEGIN
S;T
END;
PROCEDURE T';
BEGIN
IF SYM=','
THEN BEGIN
ADVANCE
S;T'
END
END;
(2)①
是LL(1)文法
分析--是否是LL(1)文法
①不含左递归
②非终结符的各个产生式首符集不相交
First(S)={a,∧,(}
Filrst(T)={a,∧,(}
Filrst(T')={,,ε}
③T'首符集存在ε
Filrst(T')={,,ε}
Follow(T')={)}
First(T')∩Follow(T')=∅
(2)②
给出它的预测分析表
a ∧ ( ) , #
S S->a S->∧ S->(T)
T T->ST' T->ST' T->ST'
T' T->ε T->,ST'
.
2
2.对下面的文法G:
E→TE’
E’→+ Elε
T→FT’
T’→Tlε
F→PF’
F’→*F’lε
P→(E)|a|b|^
(1)计算这个文法的每个非终结符的FIRST和 FOLIOW。
(2证明这个文法是LL(1)的。
(3)构造它的预测分析表。
(1)
FIRST FOLLOW
E {(,a,b,∧} {#,)}
E' {+,ε} {#,)}
T {(,a,b,∧} {+,),#}
T' {(,a,b,∧,ε} {+,),#}
F {(,a,b,∧} {(,a,b,∧,+,),#}
F' {*,ε} {(,a,b,∧,+,),#}
P {(,a,b,∧} {*,(,a,b,∧,+,),#}
(2)
是LL(1)文法
分析--是否是LL(1)文法
①不含左递归
②非终结符的各个产生式首符集不相交
③对于文法中的每一个非终结符A,首符集存在ε
First(A)∩Follow(A)=∅
(3)构造它的预测分析表。
+ * ( ) a b ∧ #
E E->TE' E->TE' E->TE' E->TE'
E' E'->+E E'->ε E'->ε
T T->FT' T->FT' T->FT' T->FT'
T' T'->ε T'->T T'->ε T'->T T'->T T'->T T'->ε
F F->PF' F->PF' F->PF' F->PF'
F' F'->ε F'->ε F'->ε F'->ε F'->ε F'->ε F'->ε F'->ε
P P->(E) P->a P->B P->∧
3
3.下面文法中,哪些是LL(1)的,说明理由。
(1)
S->Abc
A->a|ε
B→b|ε
(2)
S->Ab
A→a|B|ε
B->b|ε
(3)
S→ABBA
A->a|ε
B->b|ε
(4)
S->aSe|B
B→bBe|C
C->cCe|d
(1)是LL(1)文法
FIRST(S)={a,b} FOLLOW(S)={#}
FIRST(A)={a,ε} FOLLOW(A)={b}
FIRST(B)={b,ε} FOLLOW(B)={#}
(2)不是LL(1)文法
FIRST(S)={a,b} FOLLOW(S)={#}
FIRST(A)={a,b,ε} FOLLOW(A)={b}
FIRST(B)={b,ε} FOLLOW(B)={b}
(3)不是LL(1)文法
FIRST(S)={a,b,ε} FOLLOW(S)={#}
FIRST(A)={a,ε} FOLLOW(A)={a,b,#}
FIRST(B)={b,ε} FOLLOW(B)={a,b,#}
(4)是LL(1)文法
FIRST(S)={a,b,c,d} FOLLOW(S)={e,#}
FIRST(B)={b,c,d} FOLLOW(A)={e,#}
FIRST(C)={c,d} FOLLOW(B)={e,#}
随堂练习
随堂练习03-27
消除G2的左递归,判断改造后文法是否是LL(1)文法。
1(简答题)
表格结构文法G2:
S→a|∧|(T)
T→T,S|S
消除G2的左递归,判断改造后文法是否是LL(1)文法。
消除G2的左递归
S→a|∧|(T)
T->ST'
T'->,ST'|ε
是LL(1)文法
分析--消除G2的左递归
S→a|∧|(T) 无左递归
T→T,S|S 左递归
生成 S{,S} 转为右递归
T->ST'
T'->,ST'|ε
分析--是否是LL(1)文法
①不含左递归
②非终结符的各个产生式首符集不相交
First(S)={a,∧,(}
Filrst(T)={a,∧,(}
Filrst(T')={,,ε}
③T'首符集存在ε
Filrst(T')={,,ε}
Follow(T')={)}
First(T')∩Follow(T')=∅
2023-5-3 22:07:40
随堂练习03-27
1(简答题)
G[E]:
E→TE’
E’→+TE’|ε
T→FT’
T’→*FT’|ε
F→(E)|i
First(E’T’)={+,*,ε}
另外:
FIRST(E)={(,i}
FIRST(T)={(,i}
FIRST(F)={(,i}
FIRST(E')={+,ε}
FIRST(T')={*,ε}
Follow(E)={#,)}
Follow(T)={#,)}
Follow(F)={+,#,)}
Follow(E')={+,#,)}
Follow(T')={*,+,#,)}
最后
2023-5-3 22:38:35
祝大家逢考必过
点赞收藏关注哦