【編譯原理】第5章 自下而上的語法分析——優先分析法

5 自下而上的語法分析——優先分析法


在這裏插入圖片描述

一、自下而上語法分析概述

自下而上語法分析試圖將一個字符串反向規約至開始符號。
自下而上語法分析比自上而下語法分析更有效率,對語法的限制更少。
在這裏插入圖片描述
在這裏插入圖片描述
自下而上語法分析的策略移進–規約分析
移進就是將一個終結符推進棧
歸約就是將0個或多個符號從棧中彈出,根據產生式將一個非終結符壓入棧
移進-歸約過程是自頂向下最右推導的逆過程(規範歸約)在這裏插入圖片描述
我們如何決定什麼時候移進,什麼時候規約?
考慮 intint+intint | * int + int
我們可以用 T →int進行歸約,而得到 Tint+intT | * int + int
致命錯誤: 無法規約到開始符號 EE
一般的移進-歸約策略:若句柄在棧頂出現,則歸約;否則移進
句柄:句型的最左直接短語

衝突
實際應用中可能出現的衝突

  • 移進與歸約都合法,產生移進-歸約衝突
  • 歸約時可以適用兩個不同的產生式,產生歸約-歸約衝突

二義文法會導致‘衝突’,但應注意,許多的非二義文法同樣會導致‘衝突’
Conflict Solutions: 改寫文法;根據產生式出現的順序來選擇;根據算符的優先級;

二、自下而上的分析算法

自下而上的分析算法:

  • 優先分析法簡單優先分析法、算符優先分析法
  • LR分析

1、 簡單優先分析

方法簡潔、易接受、但是效率低

  • 按照文法符號(包括終結符和非終結符)的優先關係確定句柄。

1)優先關係

在這裏插入圖片描述
在這裏插入圖片描述

2)簡單優先文法的定義

滿足以下條件的文法是簡單優先文法
1)在文法符號集VV中,任意兩個符號之間最多隻有一種優先關係成立
2)在文法中任意兩個產生式沒有相同的右部
3)不含空產生式

2、算符優先分析

算符優先分析
在這裏插入圖片描述

1)如何確定算符優先關係?

  • ii的優先級最高
  • ↑ 優先級次於ii,右結合
  • *// 優先級次之,左結合
  • ++- 優先級最低,左結合
  • 括號‘((’,‘))’的優先級大於括號外的運算符,小於括號內的運算符,內括號的優先性大於外括號
  • #的優先性低於與其相鄰的算符

2)算符(OG)文法的定義

在這裏插入圖片描述
算符文法兩個條件:
①不含空產生式
②不含兩個連續非終結符同時出現在產生式右部,即形如U→…VW…

3)算符優先關係的定義

在這裏插入圖片描述

4)算符優先文法的定義

在OG文法 G 中,若任意兩個終結符間至多有一種算符優先關係存在,則稱G 爲算符優先文法(OPG)。
注意:允許b>c,c>b; 不允許b>c,b<c,b=c
結論 算符優先文法是無二義的。

算符優先文法的三個條件:
①不含空產生式
②不含兩個連續非終結符同時出現在產生式右部,即形如U→…VW…
③任意兩個終結符間至多有一種算符優先關係存在

5)算符優先關係表的構造及歸約過程

①由定義直接構造 ②由關係圖法構造算符優先關係表

求FIRSTVT、LASTVT集合:
在這裏插入圖片描述

如何計算算符優先關係
在這裏插入圖片描述
在這裏插入圖片描述

6)算符優先分析算法

歸約過程中,只考慮終結符之間的優先關係來確定句柄,而與非終結符無關。這樣去掉了單非終結符的歸約,所以用算符優先分析法的規約過程與規範歸約是不同的。
爲解決在算符優先分析過程中如何尋找句柄,引進最左素短語的概念
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

7)優先函數

優先函數2(n+1)(2(n+1))比優先矩陣(n+1)2((n+1)^2個內存單元)節省空間
優先函數的構造:

  • 1)由定義直接構造; 2)用關係圖構造優先函數

在這裏插入圖片描述


算符優先分析法的侷限性
一般語言的方法很難滿足算符優先文法的條件
很難避免把錯誤的句子得到正確的歸約

bingo~   ✨ Courage is resistance to fear,mastery of fear——not absence of fear.   勇敢並非沒有恐懼,而是克服恐懼,戰勝恐懼。

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