編譯原理:語法分析(自頂向下)
文章目錄
一、最左推導與最右規約
是對產生式來進行操作的,通過產生式中元素的替換,完成非終結符向目標句子的生成:

每一次都替換最左邊的非終結符,稱為最左推導,它的逆過程稱為最右規約。
二、文法轉換
文法轉換的過程是構建新的與原來文法等價的文法的過程。
1.消除直接左遞歸


2.消除間接左遞歸

3.處理多個替換式

三、LL(1)文法
1.含義
第一個“ L”表示從左向右掃描輸入。
第二個“ L”表示產生最左推導。
“1”表示在每一步中只需要向前看一個輸入符號來決定語法分析動。
2.內容

四、FIRST集,FOLLOW集與SELECT集
1.FIRST集

FIRST集為非終結符能推出的句型的首部為終結符的終結符的集合。
2.FOLLOW集
FOLLOW集為非終結符后面可以接的終結符的集合。

- 首先將能出現在最右側的元素的FOLLOW集都加入$,發現這五個都可以。
- 產生式最左端的元素的FOLLOW集都是產生式最右端的FOLLOW集(反之不成立)。進行更新。
- 看每一個產生式的右邊,E’在T右邊,E’的FIRST集就是T的FOLLOW集。T’在F的右邊,T’的FIRST集就是F的FOLLOW集。依次類推,遍歷完一遍。
按照這個順序循環進行更新,直到表不再更新了為止,得到的就是FOLLOW集。
3.SELECT集

首先將|符號拆成兩個產生式,當右側不是空的時候,SELECT集就是左側的FIRST集,如果為空則SELECT集就是左側的FALLOW集。
根據SELECT可以生成分析表,這個表在非遞歸方法中使用:

五、遞歸與非遞歸分析方法
1.遞歸的方法

使用遞歸的方式進行寫程序,無論遞歸和非遞歸都要求SELECT集,其中右側第一個為終結符就很容易看出FIRST集了,同時也是SELECT集,右側為空的時候就看FOLLOW集,從而生成該產生式的SELECT集。
2.非遞歸方法

3.非遞歸方法錯誤處理



浙公網安備 33010602011771號