編譯原理 自頂向下分析

從頂部的根節點到底部的葉節點分析方法叫做自頂向下分析。我們知道頂部的根節點可以表示成一個文法的開始符號S,所以說,自頂向下分析可以看成是從文法的開始符號S推導出詞串w的過程。

                                        

例如,我們以輸入id + (id + id)爲例分析自頂向下的分析方法。首先從開始符號E(也就是樹的根節點)開始推導。首先用第一個產生式生成三個子節點。然後對新的E => ( E )等等,知道把根節點的E替換成 id + (id + id). 因爲這些都在樹的葉節點上,所以這個句子也就是該語言的一個句子。

在自底向上的分析中,總是採用最左歸約的方式,也就是產生式每次都把最左邊的符號進行歸約。和他對應的逆過程是最右推導。我們來看一個例子:

                                                           

比如說輸入爲id + id * id,我們如何自頂向下的構造分析樹呢?

首先從開始符號E開始。因爲E只有一個產生式 E -> TE'那麼就用這個產生式推導,展開。之後從左到右分析T和E'.因爲T也只有一個產生式,所以用此產生式推導,有T -> FT'。 然後再對樹的最左邊F節點進行分析。F有兩個產生式: F->(E)或者F->id。因爲輸入指針指向的是id,所以用第二個產生式,形成了輸入的最左邊。 

之後輸入指針右移,指向的+。而我們看T'的產生式是*FT'或者e,那麼只能選擇空串e. 之後在看右邊E'展開有E' -> +TE',+ 對上; 輸入的+,那麼輸入指針右移,看T。 諸如此類,最後展開成所有的非終結符在葉子節點上。從左到右看就是id + (id * id).

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章