編譯原理(清華大學出版社)-- 文法和語言 -- 句型的分析


句型分析

  • 句型分析是一個識別輸入符號串是否為語法上正確的程序的過程
  • 在語言的編譯實現中,把完成句型分析的程序稱為分析程序識別程序分析算法又稱識別算法

該書介紹的都是從左到右的分析算法,從左到右地識別輸入符號串

兩大類分析算法

  • 自頂向下,從文法開始符號出發,反復使用各種產生式,尋找"匹配"於輸入符號串的推導 (正着推
  • 自底向上,從輸入符號串開始,逐步進行"歸約",直至歸約到文法的開始符號 (反着推
  • 從構造語法樹的角度看,自頂向下,從樹根開始構造;自底向上,從末端結點開始構造

自頂向下的分析方法

例題2.9 考慮文法G[S]

  • S→sAd
  • A→ab
  • A→a

S=>cAd=>cabd

自底向上的分析方法

例題2.9中的文法來為輸入符號 cabd 構造語法樹

 

句型分析的有關問題

在自頂向下分析方法中,回溯

  • 從各種可能的選擇中隨機挑選一種,並希望它是正確的
  • 如果它是錯誤的,必須退回去,再試另外的選擇

在自底向上分析方法中,句柄

  • 需要精確定義"可歸約串",稱為句柄
  • 令G是一個文法,S是文法的開始符號,αβδ是文法G的一個句型
  • 若有S  αAδ 且 A β,則稱β是句型αβδ相對於非終結符號A的短語
  • 如果有 A=>β,則稱β是句型αβδ相對於規則 A→β 的直接短語(簡單短語 
  •  一個右句型的直接短語,稱為該句型的句柄,句柄的概念只適用於右句型

  •  若所考慮的文法是無二義的,每個右句型有唯一的最右推導,句柄是唯一的;對於二義文法,右句型可能有 多個句柄

  • 對於無二義文法,一個右句型的唯一句柄是其所有直接短語中最左邊的那一個,該句型的最左直接短語即是它的句柄

舉例

考慮例2.8 中的無二義文法G[E]的一個句型 i*i + i,將句型寫作 i1 * i2 + i3 ,因為有 E  F * i2 + i3,且 F => i1,則稱 i1 是句型 i1 * i2 + i3 的相對於非終結符號F的短語,也是相對於規則 F→i 的直接短語

有關文法應用的一些說明

有關文法的實用限制

在實際應用中,應限制文法不得含有 有害規則多余規則

  • 有害規則,形為U→U的產生式,會引起文法的二義性
  • 多余規則,文法中那些連一個句子的推導都用不到的規則,以兩種形式出現
  • 第一種是文法中某些非終結符不在任何規則的右部出現,任何句子的推導中都不可能用到他
  • 第二種是文法中的非終結符號,不能夠從它推導出終結符來

例題 2.10 有文法 G[S]:

  • S→Be
  • B→Ce
  • B→Af
  • A→Ae
  • A→e
  • C→Cf
  • D→f

對文法G=(VN,VT,S,P)來說,為了保證其非終結符A在句子推導中出現,必須滿足以下兩個條件

  1. A必須在某句型中出現,有 S αAβ,其中α、β∈(VN ∪ VT*
  2. 必須能夠從A推出終結符號串t來,即 A t,其中∈V*T

在該例中,

  • 非終結符D不在任何規則右部,這種非終結符稱為不可到達
  • 在文法中,不能夠推導出終結符號串來,這種非終結符稱為不可終止

上下文無關文法的ε規則

上下文中某些規則可具有形式 A→ε,其中A∈VN,這種稱為ε規則

定理2.1

  • 若L是由文法G=(VN,VT,P,S)產生的語言,P中的每一個產生式的形式均為A→α,A∈VN,α∈(VN ∪ VT* 
  • L能由這樣的一種文法產生,每一個產生式或者為A→β形式,其中A為一個非終結符,即 A∈VN,β∈(VN ∪ VT
  • 或者為 S→ε,且S不出現再任何產生式的右邊

定理2.

  • 如果G=(VN,VT,P,S)是一個上下文有關文法,則存在另一個上下文有關文法G1,它所產生的語言與G相同,其中G1的開始符號不出現在G1的任何產生式的右邊
  • 如果G是一個上下文無關文法,也能找到一個上下文無關文法G1,如果G是一個正規文法,也能找到這樣一個正規文法G1


免責聲明!

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



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