編譯原理系列之五 自底向上優先分析(1)-簡單優先分析法


簡單優先分析法

1.基本概念

通過語法樹來理解這三個概念更加簡單:

文法G1[S]:
S→AB
A→bB
A→Aa
B→a
B→Sb

2869373-9da4aa12dcd3c1c7.png

語法樹

  1. 短語:若S=*=>αAδ且A=+=>β,則稱β是相對於非終結符A的句型αβδ的短語。

    即:語法樹中以非終結符的作為根的子樹的葉子所組成的字符串。

    如:ba是相對於非終結符A的句型AB的短語。句型baSb的短語有ba,a,Sb,baSb。

  2. 直接短語:若S=*=>αAδ且A=>β,則稱β是相對於非終結符A的句型αβδ的直接短語。

    即:語法樹中以非終結符的作為根的子樹,它的孩子都是葉子,沒有其他子樹。

    如:Sb是相對於非終結符B的句型AB的短語。句型baSb的短語有a,Sb。

  3. 句柄:位於句型最左邊的直接短語稱為該句型的句柄。

    即:位於語法樹中最左邊的直接短語。

    如:句型baSb的句柄是a。

2.優先關系定義

  1. X和Y優先級相等,表示為 X=·Y,當且僅當G中存在產生式規則A=>···XY···。

    解讀:X、Y的優先級相同,當XY存在一個句柄之中,它們將同時被歸約。表現在語法樹中S=·b。

2869373-6556e60491a33db0.png

優先級相等在語法樹中

  1. X優先級小於Y,表示為 X<·Y ,當且僅當G中存在產生式規則A=>···XB···,B=+=>Y···。

    解讀:X優先級小於Y,當XY存在一個句型中時,它們將不可能出現在同一個句柄中,Y一定比X先被規約。表現在語法樹中b<·a。

2869373-b21753552a961cd3.png

優先級小於語法樹中

  1. X優先級大於Y,表示為 X>·Y ,當且僅當G中存在產生式規則A=>··BD···,B=+=>···X,D=*=>Y···。

    解讀:X優先級大於Y,當XY存在一個句型中時,它們將不可能出現在同一個句柄中,X一定比Y先被規約。表現在語法樹中a>·S。

2869373-05b519d51cb0d7c0.png

優先級大於在語法樹中

  1. X和Y的優先級為空,表示在文法的任何句型中都不會出現該符號對相鄰出現的情況。

注意:以上優先關系之間不具有對成性。

3.簡單優先文法定義

一個文法是簡單優先文法,需要滿足以下兩個條件:

  1. 在文法符號集中V,任意兩個符號之間必須之后一種優先關系存在。(顯然滿足)
  2. 在文法中,兩個產生式不能有相同的右部。

4.簡單優先分析法的操作步驟

  1. 將輸入輸入串a1a2···an#依次壓棧,不斷比較棧頂符號ai和下一個待輸入符號aj的優先級,若ai>·aj則進行下一步,否則重復此步驟。

    解讀:停止條件是ai>·aj表示前面輸入串一定比后面先歸約,所以只需要在前面找句柄就行了。

  2. 棧頂符號ai即為句柄尾,從此處向左尋找句柄頭ak,滿足ak-1<·ak。

    解讀:從后向前找ak-1<·ak表示ak之前的輸入串一定比ai···ak后歸約,由此確定現在就是要歸約ai···ak。

  3. 由句柄ai···ak在文法中尋找右部為ai···ak的產生式;找到則將句柄替換為相應左部,找不到則說明該輸入串不是該文法的句子。

  4. 重復以上步驟直到歸約完成。

5.實例

由於還是以上面的例子不滿足簡單優先文法定義(b和b的優先關系不唯一),這里我們用另一個文法來舉例。

文法G2[S]:
S→bAb ①
A→(B ②
A→a ③
B→Aa) ④

輸入串為b(aa)b#

  1. 首先我們做出文法符號的優先關系矩陣:
  S A B a b ( ) #
S                
A       = =      
B       > >      
a       > >   =  
b   =   <   <    
(   < = <   <    
)       > >      
#                

這里#比其相鄰所有符號的優先性都要小。

  1. 然后按照簡單優先分析法進行歸約:
步驟 棧S 當前輸入符 輸入串剩余部分 動作
1 # b (aa)b# 移進
2 #b ( aa)b# 移進
3 #b( a a)b# 移進
4 #b(a a )b# 歸約③
5 #b(A a )b# 移進
6 #b(Aa ) b# 移進
7 #b(Aa) b # 歸約④
8 #b(B b # 歸約②
9 #bA b # 移進
10 #bAb #   歸約①
11 #S #   接受

其語法樹如下:

2869373-66185eacc00a4423.png

語法樹


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM