自上而下的語法分析(遞歸下降法,LL(1)預測分析法,預測分析表)

※遞歸下降法:

簡而言之,就是比如文法是

STTFM, F+MMa


用僞代碼表示這個文法

則首先要寫 procedure S 

BEGIN

T;

END

然後寫 procedure T

BEGIN

F;

M;

END

Procedure F

BEGIN

+M;

END

Procedure M

BEGIN

匹配a

END

這樣的過程是遞歸下降的過程。遞歸下降方法僅表示一種思路,沒有特別的



LL(1)預測分析法:

第一個L表示從左到右掃描輸入串

第二個L表示最左推導

1表示分析時每步只需向前查看一個符號


考慮First集和FOLLOW集:

First,FIRST( α)是由α推導出的所有的第一個終結符號組成的集合

FOLLOW:FOLLOWA)是由所有句型中緊跟在A後面的終結符a組成的集合

引入FOLLOW集的意義是,在有空轉換的文法裏,有時候不能確定是否把這個非終結符變成空,這就要看看這個非終結符跟着的元素,是否有可能匹配下一個元素。如果能匹配,那麼就可以把它變成空



預測分析表

文法:

自上而下的語法分析(遞歸下降法,LL(1)預測分析法,預測分析表) - 小鏡子~ - 菜園子
 

各個非終結符的first集合:

自上而下的語法分析(遞歸下降法,LL(1)預測分析法,預測分析表) - 小鏡子~ - 菜園子
 

關於follow集合我們只要考慮有可能變成空轉換的非終結符:

自上而下的語法分析(遞歸下降法,LL(1)預測分析法,預測分析表) - 小鏡子~ - 菜園子
 

根據FIRST集和FOLLOW集可以生成一張LL(1)文法的預測分析表:

自上而下的語法分析(遞歸下降法,LL(1)預測分析法,預測分析表) - 小鏡子~ - 菜園子


 

預測分析表法的分析過程:

要以表格的形式,列出分析棧的變化,輸入,和輸出動作:

以下是上面的文法對於id+id*id串的分析過程

自上而下的語法分析(遞歸下降法,LL(1)預測分析法,預測分析表) - 小鏡子~ - 菜園子

 

錯誤恢復:同步符號

有時候輸入的串可能有點小錯誤摻雜了一些不該有的符號,可以利用同步符號synch跳過這些符號,使語法分析能夠繼續:

這就要考慮所有非終結符的FOLLOW集合:


以上面的文法的預測分析表做例子

FOLLOW集合:

自上而下的語法分析(遞歸下降法,LL(1)預測分析法,預測分析表) - 小鏡子~ - 菜園子
 

加入錯誤處理的預測分析表:

自上而下的語法分析(遞歸下降法,LL(1)預測分析法,預測分析表) - 小鏡子~ - 菜園子

 

串  )id+*id 的分析過程:

自上而下的語法分析(遞歸下降法,LL(1)預測分析法,預測分析表) - 小鏡子~ - 菜園子
 

發佈了61 篇原創文章 · 獲贊 23 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章