1.總結
語法分析的過程分兩種,自上而下的推導、自下而上的規約,本章學習的內容為後者。
自下而上分析法是一種「移進-規約」法,這種方法的基本思想是,用乙個寄存符號的先進後出棧,把輸入符號乙個乙個地移進到棧裡,當棧頂形成某個產生式的候選式時,即把棧頂的這一部分替換成(歸約為)該產生式的左部符號。
而規約是指根據文法的產生式規則,把產生式的右部替換成左部符號。
在形式語言中,最右推導常被稱為規範推導。由規範推導所得的句型稱為規範句型。如果文法g是無二義性的,那麼,規範推導的逆過程必是規範規約(最左規約)。
修剪語法樹,對語法樹有如下結論:
①每個句型都有一棵語法樹與之對應
②每棵語法樹的葉結點自左至右排列就組成乙個句型
③每棵子樹的葉結點自左至右排列就組成乙個短語
④每棵簡單子樹的葉結點自左至右排列就組成乙個直接短語
⑤每棵最左簡單子樹的葉結點自左至右排列就組成乙個控制代碼
我們常用的自下而上分析法有算符優先分析法和lr分析法。
算符優先分析法的基本思路是,定義算符之間優先關係,借助這種關係來尋找「可歸約串」和進行歸約。
定義兩個終結符『a』與『b』的優先關係
a =.b 表示a的優先性等於b,a =. b 當且僅當文法g中含有形如p→…ab…或p→…aqb…的產生式;
a >.b 表示a的優先性大於b,a>.b 當且僅當g中含有形如p→…rb…的產生式,而 r→
…a或r→
…aq;
a <.b 表示a的優先性小於b ,a <. b 當且僅當g中含有形如p→…ar…的產生式, 而r→
b…或r→
qb…。
如果乙個算符文法g中的任何終結符對(a,b)至多只滿足下述三關係之一: a=.b,a>.b, a<.b則稱g是乙個算符優先文法(opg文法)。
素短語指乙個句型的短語,它至少包括有乙個終結符號且除去它本身之外不再含任何更小的素短語,而處在句型最左端那個素短語成為最左素短語。
lr分析方法是一種適用於一大類上下文無關文法的分析方法比較複雜,不適於用手工實現,可借助於yacc/bison實現。根據歸約過程中向前看輸入符號串中字元的個數,定義不同的lr(k)分析方法,通常,k=0,1。
lr分析
器需要構建動作表和狀態轉換表,動作表:action[s,a]:當狀態s面臨輸入符號a時,應採取什麼動作;狀態轉換表:goto[s,x]:狀態s面對文法符號x時,下一狀態是什麼。
活字首:文法g的活字首是他的規範句型的字首,該字首不超過控制代碼的右端。活字首加上被分析串中未被分析的終結符,就可以構成乙個規範句型。
2.感悟
自上而下分析法是一種「移進規約」法,用乙個寄存符號的先進後出棧,把輸入符號乙個乙個的
移進到棧中,當棧頂形成某個產生式的乙個候選式時,即把棧頂的一部分替換成該產生式的左部符號。自上而下分析的中心問題是,怎樣判斷棧頂的符號串的可規約性,以及如何規約,共同特點是邊輸入符號邊規約,也就是從左到右進輸入串的過程中,一旦發現可規約串即進行規約。
第五章語法分析 自下而上分析
一 知識點總結 自下而上分析法是從輸入串開始,逐步進行 規約 直至規約到文法的開始符號 或者說,從語法樹的末端開始,步步向上 規約 直至根結。歸約 1 短語 令g是乙個文法,s是文法的開始符號,假定 是文法g的乙個句型,如果有s a 且s 則稱 是句型 相對於非終結符的短語。2 直接短語 特別是,如...
第五章自下而上的語法分析內容總結
自上而下分析法就是從輸入串開始,逐步進行規約,直至規約到文法的開始符號。第一部分是自下而上分析的基本問題 移進規約,規範規約和符號棧。移進規約的基本思想是用乙個寄存符號的先進後出棧把輸入符號乙個乙個移進棧裡,當棧頂形成某個產生式的候選式時,規約為產生是的右部符號。規範規約是依次使用控制代碼替換產生式...
編譯原理第五章語法分析 自下而上分析內容總結
一 學習內容 本章我們主要學習以自下而上的方法進行語法分析,首先需要了解移進和規約的基本思想,即用乙個寄存符號的先進後出棧,把輸入符號乙個乙個地移進到棧裡,當棧頂形成某個產生式的候選式時,即把棧頂的這一部分替換成 歸約為 該產生式的左部符號。規範規約是假定a是文法g的乙個句子,我們稱序列an,an ...