一、自下而上分析基本問題
1、歸約(其實就是上一章自上而下的分析的逆向)
定義:是指根據文法的產生式規則,把產生式的右部替換成左部符號。
2、規範規約
推出了短語、直接短語、控制代碼的概念。乙個句型的最左直接短語稱為該句型的控制代碼。
規範歸約(最左規約)是關於是乙個最右推導(規範推導)的逆過程。由於規範句型由最右推導推出的句型,故該句型的控制代碼右邊只含有終結符號。
語法樹有五個特徵:①每個句型都有一棵語法樹與之對應;②每棵語法樹的葉結點自左至右排列就組成乙個句型;③每棵子樹的葉結點自左至右排列就組成乙個短語;④每棵簡單子樹的葉結點自左至右排列就組成乙個直接短語;⑤每棵最左簡單子樹的葉結點自左至右排列就組成乙個控制代碼。
3、符號棧的使用與語法樹的表示
有四類操作:「移進」、「歸約」、「接受」、「出錯處理」。
任何可歸約串的出現必在棧頂,不會在棧的內部。
二、算符優先分析
算符優先分析法不是一種規範歸約法。算符優先關係有三種:<.>. =.
1、算符優先文法及優先表構造
怎麼構造優先表?首先需要對g的每乙個非終結符p構造兩個集合firstvt(p)和lastvt(p)。構造這兩個集合的目的其實就是方便比較優先順序。
2、算符優先分析演算法
首先引入「素短語」的概念:至少含有乙個終結符,並且除它自身之外不再含有任何更小的素短語。需要注意的是,出現在左端或者右端的非終結符一定屬於這個素短語。
三、lr分析法
這裡的l表示從左到右掃瞄輸入串,r表示構造乙個最右推導的逆過程。
能用lr分析器分析的文法類,包含能用ll(1)分析器分析的全部文法類。
1、lr分析器
核心部分是一張分析表。action[s,a]規定了當狀態s面臨輸入符號a時應採取什麼動作。goto[s,x]規定了狀態s面對文法符號x(終結符或非終結符)時下乙個狀態是什麼。
2、lr文法
lr(k)文法:最多向前看k個的符號就可以決定動作的lr分析器所分析的文法成為lr(k)文法。
非lr結構:存在移進、歸約衝突的文法。lr文法肯定是無二義的,乙個二義文法決不會是lr的。
3、lr(0)專案集族和lr(0)分析表的構造
活字首是指規範句型的乙個字首,這種字首不含控制代碼之後的任何符號。在右邊增添一些終結符號之後,就可以使它成為乙個規範句型。
構造識別乙個文法活字首的dfa的專案集(狀態)的全體稱為這個文法的lr(0)專案集規範族。
4、lr(0)專案集規範族的構造
通過閉包函式(closure)來求dfa乙個狀態的專案集。
5、lr(0)分析表的構造
lr(0)專案集規範族不存在移進-歸約,或歸約-歸約衝突,稱為lr(0)文法。
只有是lr(0)文法,才能構造相應的lr(0)分析表,才能用lr(0)分析法對句子進行分析。
作業:(不知道怎麼調過來了....)
第五章 自下而上分析
1 移進歸約 1 基本思想 用乙個寄存符號的先進後出棧,把輸入符號乙個乙個地移進到棧裡,當棧頂形成某個產生式的候選式時,即把棧頂的這一部分替換成 歸約為 該產生式的左部符號。2 歸約 是指根據文法的產生式規則,把產生式的右部替換成左部符號。自下而上分析過程 邊輸入單詞符號,邊歸約。核心問題 識別可歸...
第五章 自下而上分析
一 知識點 自下而上分析法是從輸入串開始,逐步進行 規約 直至規約到文法的開始符號 或者說,從語法樹的末端開始,步步向上 規約 直至根結。歸約 1 短語 令g是乙個文法,s是文法的開始符號,假定 是文法g的乙個句型,如果有s a 且s 則稱 是句型 相對於非終結符的短語。2 直接短語 特別是,如果有...
編譯原理 第五章 自下而上分析
一.移進規約 1.基本思想 用乙個寄存符號的先進後出棧,把輸入符號乙個乙個地移進到棧裡,當棧頂形成某個產生式的候選式時,即把棧頂的這一部分替 換成 歸約為 該產生式的左部符號。2.規約 是指根據文法的產生式規則,把產生式的右部替換成左部符號。二.規範規約 1 短語 定義 令g是乙個文法,s是文法的開...