自底向上分析 LR方法

2021-08-04 04:53:33 字數 1631 閱讀 2931

lr(k)表示在分析時要求向前看k個符號(即看輸入流的前k個符號),以便唯一地確定分析動作。lr(k)一詞來自:left-to-right parse,rightmost-derivation,k-token lookahead。lr分析主要有lr(0)分析法,slr(1)分析法,lr(1)分析法以及salr(1)分析法。

lr方法的思想:從輸入流依次把符號移入到符號棧中,直至棧頂部中出現乙個控制代碼;之後對控制代碼進行規約,直至棧頂部中不出現控制代碼為止;再重複上述過程,直至最終規約為乙個開始符,且輸入流為空。注意:真正的lr分析器並不用符號棧,而是用狀態棧。lr分析法的主要動作是移入歸約

增廣文法:為處理方便,lr分析法通常要求文法的開始符不出現在任何產生式的右端。若不滿足要求,則只需增加一條產生式:z→

s 或z→

s #,其中z是新開始符,s是原開始符。這樣擴充後的文法被稱為原文法的增廣文法。

歸約順序:乙個句型可有多個簡單短語,因此,歸約順序可有多種。lr分析法採用用的是從左到右,即每次歸約最左簡單短語(稱為控制代碼)的辦法。也就是說,從左到右地掃瞄輸入串,並且一旦出現乙個簡單短語,就立即進行歸約(否則會出現倒退進行歸約的不合理的現象)。

短語:稱句型αη

β 中的

η 是乙個短語,若有:s∗

→αaβ

,a+→

η ,其中s是文法的開始符。換句話說,稱句型αηβ中的η是短語,如果存在乙個句型αaβ,a+

→η。簡單短語:稱句型αηβ中的η是乙個簡單短語,若有s∗

→αaβ

,a→β

控制代碼:乙個句型中可能有多個簡單短語,而控制代碼是其中最左簡單短語。是自底向上分析的核心動作歸約的單位。

規範推導:稱乙個句型推導為規範推導,如果它是最右推導的。

規範句型:規範推導匯出的句型。不一定每個句型都有規範推導。

規範歸約:如果歸約的是最左簡單短語(控制代碼),則稱其歸約為規範歸約(從左到右的歸約)。規範推導和規範歸約存在互逆的關係。

規範結論:如果給定句型是規範句型,則經規範歸約後得到的仍是規範句型。

規範字首:稱規範句型的字首為規範字首,如果其後部分不包含非終極符。顯然,每個規範句型的字首都是規範字首。

活字首:稱乙個規範字首

α 為活字首,如果包含以下任意條件:

α 不含簡單短語;

α 含乙個簡單短語,但其後沒有符號。

活字首的含義:它表示至今被處理的終極符串部分在語法上是正確的。活字首在分析格局中的邏輯關係如下圖所示。它表示符號棧內容是活字首

α ,符號棧內容和輸入串連起來恰好形成規範句型(如果輸入串是正確句子)。

編譯原理(六)自底向上分析之LR分析法

1.lr分析 從左到右掃瞄 l 自底向上進行規約 r 是規範規約,也即最右推導 規範推導 是自底向上分析方法的高度概括和集中。2.lr k 文法確定的分析器適用於一大類上下文無關文法的語法分析,基本上包括了所有無二義性的上下文無關文法的集合,包括了前面討論的ll k 和算符優先文法。3.優缺點 4....

自底向上設計

鄧輝 翻譯 長期以來,我們一直遵循這樣乙個程式設計風格方面的原則 乙個程式的功能要素不應該太大。如果程式中的某些部件的規模超出了易於理解的範圍,就會造成大量的複雜性,這些複雜性很容易隱藏錯誤,正如在乙個大城市中很容易隱藏罪惡一樣。這種程式難以理解 難以測試 難以除錯。根據這個原則,乙個大型程式必須要...

自底向上設計

鄧輝 翻譯 長期以來,我們一直遵循這樣乙個程式設計風格方面的原則 乙個程式的功能要素不應該太大。如果程式中的某些部件的規模超出了易於理解的範圍,就會造成大量的複雜性,這些複雜性很容易隱藏錯誤,正如在乙個大城市中很容易隱藏罪惡一樣。這種程式難以理解 難以測試 難以除錯。根據這個原則,乙個大型程式必須要...