一個典型的編譯程序通常包含 8 個組成部分,它們是詞法分析程序、語法分析程序、語 義分析程序、中間代碼生成程序、中間代碼優化程序、目標代碼生成程序、表格管理程序和 錯誤處理程序。
詞法分析程序的主要任務: 掃描源程序,識別出具有獨立意義的單詞
詞法分析程序的其他任務: 濾掉空格,跳過注釋、換行符 追蹤換行標志,將行號與出錯信息相聯系起來。 宏展開,……
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,#},FOLLOW(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)分析表如表所示。


4.對下列文法
G(S):S——>D(R)
R—>R;P|P
P->S|I
D->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,)}

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))
語法樹:如圖所示。
(2)句型(T,a,(T))的短語、直接短語、素短語、最左素短語、句柄、活前綴及語法樹(圖)。
短語:a||T,a||(T)||T,a,(T)||(T,a,(T))
直接短語:a||(T)
素短語:a||(T)
最左素短語:a
句柄:a
活前綴:ε||(||(T|(T,||(T,a
6.設文法G(S)為:
s->a|aAb
s->b|bBa
A->1A0|ε
B->1B0|ε
求
①LR(0)項目集族;
②構造識別文法G(E)的DFA;
③構造文法G(E)的SLR(1)的分析表;
④分析句子a1100b的識別過程。
解:(1)、(2)LR(0)項目集族和識別活前綴的DFA,如圖所示。