語法分析-自下而上分析(一)


前言

  語法:語言學的一個分支,研究按確定用法來運用的"詞類"、"詞"的屈折變化表示相互關系的其他手段以及詞在句中的功能和關系。也就是說,語法的意義更多的是用來表達“詞”的功能和屬性

     語法分析器:將詞法分析程序所產生的的單詞符號流作為輸入串,按一定的規則分析檢查是否構成合法的句子,(通俗的點說,在單詞沒有寫錯的基礎上,檢查單詞組合是否出現問題)


 

自下而上分析的基本問題

  • 自下而上分析,字面意思從語法樹的底部向上分析(也即歸約)至語法樹的頂部,從而確定語法的正確性。
  • 實現自下而上分析關鍵問題如何找到“可規約串”,如何判斷棧頂的字符串的可歸約性及與候選式匹配(自下而上分析是一邊輸入一邊規約的),及實現如下效果:

  

  • 一般對於句子的理解,都是由左向右開始解讀,如同生活中閱讀一樣,同樣語法分析只是模擬了這個過程,觀察如下圖的語法樹,其語法為S->xAy,觀察的過程即模擬語法分析器的工作過程,從最左邊開始逐步向右分析。所以對於語法樹能找到最左邊的歸約項是由為重要的,也即句柄,下面是關於句柄定義的介紹。

    1)短語:對於文法S=>abc,若S=>aAc,且A=+>b,則稱b是句型abc相對於非終結符A的短語(語法樹中句型不含有”開叉“的非終結符)

    2)直接短語:對於文法S=>abc,若S=>aAc,且A=>b,則稱b是句型abc相對於非終結符A的短語

    3)句柄:一個句型最左邊的直接短語稱之為句柄

運用句柄對句子進行規約:1,短語有,"x*y",”*“。直接短語,“*”,也即句柄。

            2,當識別到“*”時與候選式A->*匹配規約,

            3,規約后識別到字符串xAy時與候選式S->xAy進行匹配規約為S結束。

 

  •  規范規約

a是文法G的一個句子,序列an......a0是a的一個規范規約

對於規范歸約而言,最關鍵的就是確定一個句型的句柄,不同的尋找句柄的算法即不同的規范歸約方法

PS:若文法G是無二意的,則規范退到的逆過程必然是規范歸約。


 算符優先分析

  • 算符優先分析:規定算符(即終結符)之間的優先順序和結合性質,借助這種關系尋找“可歸約串”。
  • 算符優先文法:一個文法,如果它的任一產生式的右部都不含有兩個相繼的非終結符,則我們稱該文法為算符文法;實際上,真正的算法優先分析方法中,需定義任意兩個相繼出現的終結符a和b之間的優先關系,一旦確定了這種優先關系,就可以用它來確定“可規約串”進行歸納。
  • 優先級關系

         

        

 

  • 優先關系矩陣

        

  • 構造集合FIRSTVT(P)

  1)若有產生式P->a...或P->Qa...,則a屬於FIRSTVT(p)

  2)若a屬於FIRSTVT(Q),且有產生式P->Q.....,則a屬於FIRSTVT(P)

  • 構造集合LASTVT(R)

  1)若有產生式P->.....a或P->.....aQ,則a屬於LASTVT(P)

  2)若有a屬於LASTVT(Q),且有產生式P->....Q,則a屬於LASRTVT(P)

  • 構造優先表

  1)a同級b,找出所有滿足“同級”的終結符對

  2)a優於b,a劣於b:找出滿足“優於”和“劣於”的終結符對

(PS:千萬別暈,目的都是為了構造ab,或者aQb)

  3)“#”同級“#”;“#”劣於FIRSTVT(開始符號);LASTVT(開始符號)優於“#”。

  • 素短語:至少含有一個終結符,並且除它自身之外不再含更小的素短語。(最左素短語即字面意思)
  • 一個算符優先文法G的任何句型的最左素短語是滿足如下條件:aj-1<Njaj....NiaiNi+1>ai+1

算法過程

  • 通過判斷移進的字符串是否滿足最左素短語的條件進行歸約

 

  • 優先函數:利用使每個終結符θ對應兩個優先函數f(θ),g(θ)來表達終結符之間的優先關系,從而實現算符優先分析算法。

  優點:便於作比較運算,並且節省存儲空間

  缺點:原先不存在優先關系的兩個終結符,由於與自然數相對應變成可比較的,因而可能會掩蓋輸入串的某些錯誤


免責聲明!

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



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