第五章語法分析 自下而上分析

2021-08-19 23:57:45 字數 2827 閱讀 8484

一:知識點總結

自下而上分析法是從輸入串開始,逐步進行」規約「,直至規約到文法的開始符號;或者說,從語法樹的末端開始,步步向上」規約「,直至根結。

ⅰ、歸約

1、短語:令g是乙個文法,s是文法的開始符號,假定αβδ是文法g的乙個句型,如果有s=*>αaδ,且s=+>β,則稱β是句型αβδ相對於非終結符的短語。

2、直接短語:特別是,如果有a=>β,則稱β是句型αβδ相對於規則的a->β的直接短語。

3、控制代碼:乙個句型的最左直接短語稱為該句型的控制代碼。

4、規範歸約:假定α是文法g的乙個句子,我們稱序列αn,αn-1,......,α0是α的乙個規範歸約,如果此序列滿足(1)α0=α;(2)α0為文法的開始符,即α0=s;(3)對任何i,0ⅱ、算符優先分析

1、優先順序關係:兩個相繼出現的終結符a和b(他們之間可能插有乙個非終結符)的優先關係可能有三種:

①、ab(a的優先順序高於b)【誰在前優先順序低

注意:aa,a=•b也不一定意味著b=•a。

2、算符文法:乙個文法,如果它的任一產生式的右部都不含有兩個相繼(並列)的非終結符,即不含如下形式的產生式右部:...qr...,則我們稱該文法為算符文法。

3、算符優先文法:如果乙個算符文法g中的任何終結符對(a,b)至多只滿足三種優先順序關係之一,則稱g為算符優先文法。

4、最左素短語:素短語是至少包含乙個終結符,並且,除它自身之外不再含任何更小的素短語。那麼最左素短語是指處於句型最左邊的那個素短語。

ⅲ、lr分析法

1、lr分析器

(1)、規範規約(最左規約-最右推導的逆過程)的關鍵問題是尋找控制代碼。

(2)、lr方法的基本思想是,在規範歸約的過程中,一方面記住已移進和歸約出的整個符號串;另一方面根據所用的產生式推測未來可能碰到的輸入符號。

(3)、lr分析器的核心部分是一張分析表。這張分析表包括兩部分:一是「動作」(action)表,另一是「狀態轉換」(goto)表。action【s,a】規定了當狀態s面臨輸入符號a時,應採取什麼動作。每一項action[s,a]所規定的四種動作不外是下述四種之一: 移進、歸約、接受、報錯。goto[s,x]規定了狀態s面對文法符號x時,下一狀態是什麼。顯然goto[s,x]定義了乙個以文法符號為字母表的dfa。

(4)、lr分析器工作過程:

第一步  分析開始時,首先將初始狀態so及句子左界符#推入分析棧中。

第二步  設在分析的某一步,分析棧及餘留的輸入符號串可表示為((0s1s2...sm/#x1x2...xm )aiai+1...an#)。 則以棧頂的狀態及正掃視的輸入符號ai組成符號對(sm,ai)去查分析動作表,並根據表元action[sm,ai]的指示完成相應的分析動作。

第三步  重複上述第二步的工作,直到在分析的某一步,棧頂出現「接受狀態」或「出錯狀態」為止。

(5)、lr文法:乙個文法,如果能構造出乙個所有條目都唯一的分析表。lr(k)文法:最多向前看k個的符號就可以決定動作的lr分析器所分析的文法成為lr(k)文法。一般研究的是lr(0)、lr(1)。

2、lr(0)專案集族和分析表的構造

(1)、活字首:文法g的活字首是他的規範句型的字首,該字首不超過控制代碼的右端。

活字首與控制代碼間的關係:活字首中已含有控制代碼的全部符號(控制代碼的符號即為其最右符號);活字首中含控制代碼的一部分符號(控制代碼開頭的 若干符號與活字首最右的若干個符號一致);活字首中全然不包含控制代碼的任何符號 。

(2)、構造識別活字首的nfa

1、構造文法的所有產生式的專案,每個專案都為nfa的乙個狀態。2、確定初態、控制代碼識別態、句子識別態。①由於s′(起始符)僅在第一產生式的左部出現 ,因此規定起始符相關的專案1為初態 。②其餘每個狀態都為活字首的識別態(終態)。③圓點在最後的專案為控制代碼識別態 。④第乙個產生式的控制代碼識別態為句子識別態 。

構成識別乙個文法活字首的dfa專案集(狀態)的全體稱為這個文法的lr(0)專案集規範族。lr(0)專案集規範族的專案型別分為如下四種:1)移進專案 a →α•aβ 。2)待約專案 a →α•bβ。3)歸約專案 a →α• 。4)接受專案 s『→s • 。

(3)lr(0)分析表的構造

lr(0)分析表相當於識別活字首的有限自動機dfa的狀態轉換矩陣。lr(0)分析表的構造演算法。

3、slr分析表

大多數程式語言的文法不能滿足 lr(0)文法的條件,即其規範族中會有含有衝突的專案集(狀態)。對於有衝突的狀態,向前檢視乙個符號,以確定採用的動作。

4、規範lr分析表

仍有許多文法構造的lr(0)專案集規範族存在的動作衝突不能用slr(1)方法解決。

lr(1)專案:構成:lr(1)專案[a→α•bβ,abc…] (搜尋符號)

搜尋符號的作用:搜尋符號僅對歸約專案有效。當輸入串中的符號和搜尋符號相同時,才進行歸約。搜尋符號可以有多個,一般只關心乙個,又稱為lr(1)專案。

二:課後習題

三、總結:

本章內容比較複雜,知識點概念較多,主要學習了歸約和符號棧的使用,符號優先順序問題,重點學習了lr(0)分析法和lr(1)的情況,識別活字首與確定有限自動機dfa。需要多花時間去理解去記憶做題的時候只要理解了並不困難,但是比較複雜,步驟較多,需要時刻細心與比對。

第五章 語法分析 自下而上分析

1.總結 語法分析的過程分兩種,自上而下的推導 自下而上的規約,本章學習的內容為後者。自下而上分析法是一種 移進 規約 法,這種方法的基本思想是,用乙個寄存符號的先進後出棧,把輸入符號乙個乙個地移進到棧裡,當棧頂形成某個產生式的候選式時,即把棧頂的這一部分替換成 歸約為 該產生式的左部符號。而規約是...

第五章自下而上的語法分析內容總結

自上而下分析法就是從輸入串開始,逐步進行規約,直至規約到文法的開始符號。第一部分是自下而上分析的基本問題 移進規約,規範規約和符號棧。移進規約的基本思想是用乙個寄存符號的先進後出棧把輸入符號乙個乙個移進棧裡,當棧頂形成某個產生式的候選式時,規約為產生是的右部符號。規範規約是依次使用控制代碼替換產生式...

編譯原理第五章語法分析 自下而上分析內容總結

一 學習內容 本章我們主要學習以自下而上的方法進行語法分析,首先需要了解移進和規約的基本思想,即用乙個寄存符號的先進後出棧,把輸入符號乙個乙個地移進到棧裡,當棧頂形成某個產生式的候選式時,即把棧頂的這一部分替換成 歸約為 該產生式的左部符號。規範規約是假定a是文法g的乙個句子,我們稱序列an,an ...