1. 程式人生 > >第五章 LR分析法

第五章 LR分析法

LR分析法也是一種“移進歸約”的自底向上語法分析方法,其本質是規範歸約,具有以下特點:

(1)應用面廣:能夠用LR分析程式識別絕大多數的程式設計語言的語法結構;

(2)實現效率高:雖構造方法複雜,但是實現(執行)效率高。

(3)查錯準確:LR分析器能夠及時發現語法錯誤並準確指出錯誤位置。

LR(k)分析方法中L是指自左(Left)向右掃描輸入單詞串,R指分析過程是最右(Right)推導的逆過程(規範歸約)k是指在決定當前分析動作時需向前察看的輸入符號個數

LR(0):構造簡單,適用文法少。是SLR(1)LR(K)

的基礎。

SLR(1): 是針對LR(0)的一些問題進行改進,簡單的

LR(1)

方法。

LR(K): 分析能力強,構造複雜。

一、LR分析器的邏輯結構:

1.整體結構:



(1)總控程式的控制下,從左到右掃描輸入串,根據分析棧和輸入符號的情況,查分析表確定分析動作;

(2) 分析表LR分析器的核心,根據文法構造,它包括動作表(Action)狀態轉換表(Goto)兩部分,總控程式根據分析表確定分析動作;

(3) 分析棧包括文法符號棧X[i]和相應的狀態棧S[i]兩部分,LR分析器通過判斷棧頂元素和當前輸入符號查分析表確定下步分析動作。

規範歸約的關鍵是尋找控制代碼LR法是根據已“移進”、“歸約”的符號串及即將讀入的符號串進行分析,以確定是否有控制代碼可歸約。

狀態:是對迄今為止的整個分析過程的記錄以及對

即將掃描的輸入串的展望(預測)。

例:S0狀態(開始態)表示當前棧中僅有“#”,且即

將輸入的符號為句首符號。

SN狀態(接受態)表示當前棧中已歸約為開始

符號,且即將輸入的符號應為“#”

狀態是根據分析表得到的,分析表是由文法構造的。

2.分析表的組成:



二、LR分析過程:

1. 將初始狀態S0和輸入串的左邊界(#)分別進棧;

2. 根據棧頂狀態Si當前輸入符號a動作表進行如下工作:

移進Action[Si,a]為“移進”,則a符號棧;並查Goto[Si,a]得到新的狀態Sj進狀態棧; 繼續掃描,即下一個輸入符號變成當前輸入符號;
歸約:Action [Si,a]為“歸約”,則按相應產生式

A    β進行歸約,若| β |=n,說明符號棧棧頂的n個符號為控制代碼,所以符號棧棧頂n個符號出棧A進符號棧同時,狀態棧頂的n個元素也出棧此時狀態棧頂為Sk則查Goto [Sk,A]得到新的狀態Sl進狀態棧





三.LR(0)分析表的構造


事實上:LR分析過程中,任意時刻均應保證棧中符號串是規範句型的活字首,即:棧中絕無控制代碼之後的任何符號。若輸入串為一合法的“句子”,則棧中符號剩餘輸入串就構成一個規範句型

因此識別、產生規範句型的活字首就是LR分析器的工作過程。為此,我們需要構造可識別文法所有活字首的有限自動機。

為構造識別文法所有活字首的有限自動機,現定義構成有限自動機中狀態的“專案

() 專案

1.定義:對於文法G,其產生式右部新增一個特殊的符號“.,就構成文法的一個LR(0)專案,簡稱專案


()構造識別活字首的NFA

根據專案的定義,我們可給出文法中所有產生式的專案,而每個專案都為識別活字首的NFA的一個狀態。即文法有多少個專案,它所對應識別活字首的NFA就有多少個狀態。

1.NFA的構造方法

(1)狀態集:由每個專案所對應的狀態組成的集合;

(2)輸入字元集合:由文法符號組成,包括:

終結符非終結符e

(3)初態:對於文法G[S]的拓廣文法G[S’],有專案S’® . S ,由於S’ 僅在第一個產生式的左部出現,所以規定它為初態

(4)終態:每個狀態均為NFA終態(活字首的識別態)。











相關推薦

LR分析

LR分析法也是一種“移進—歸約”的自底向上語法分析方法,其本質是規範歸約,具有以下特點: (1)應用面廣:能夠用LR分析程式識別絕大多數的程式設計語言的語法結構; (2)實現效率高:雖構造方法複雜,

相關分析 來自212獨立團團長關育順的小組作業

tex 第十七 協助 ron cnblogs 整理 div tro sof 第五章 相關分析小組作業 組號:1 一、小組成員與小組任務 1.小組成員 組長:關育順 組員:劉嘉雯、徐小川、李澤霖、郭倚天 小組成員任務 關育順:負責幻燈片講解以及軟件操作,全

相關分析第二小組作業 組長:乙佳榮

講解 img 制作 相關 span ext 任務 enter com 第五章 相關分析 第二小組成員: 組長:乙佳榮 組員:王洋 於媛齡 李天嬋 小組成員任務: 乙佳榮:分配監督任務,進行ppt制作 王洋:查詢資料並做總結 李天嬋:回收資料,制作ppt 於媛齡:總結ppt並

(回溯)最大團問題

原文:http://www.cnblogs.com/pushing-my-way/archive/2012/08/08/2627993.html 問題描述:團就是最大完全子圖。 給定無向圖G=(V,E)。如果UV,且對任意u,vU 有(u,v)  E,則稱U 是

【回溯】最大團問題和圖的m著色問題

原文:http://blog.csdn.net/liufeng_king/article/details/8781554 1、最大團問題      問題描述      給定無向圖G=(V, E),其中V是非

精益資料分析讀書筆記——-資料分析框架

戴夫·麥克盧爾的海盜指標說——AARRR 獲取使用者(Acquisition)、提高活躍度(Activation)、提高留存率(Retention)、獲取營收(Revenue)、自傳播(Referral) 要素 功用 相關指標 方式 獲取使用者

| 回溯算

當前 搜索算法 else 根節點 節點 工作 完全二叉樹 trac 編程 算法第五章 | 回溯算法 一、 回溯算法 回溯法有“通用的解題法”之稱。可以系統地搜索一個問題的所有解或任一解,是一個既帶有系統性又帶有跳躍性的搜索算法。 它在問題的解空間樹中,按深度優先策略,從根節

編譯原理 語法分析----自下而上分析

一、知識總結               自下而上分析是從輸入串開始,逐步進行規約,直至規約到文法的開始符號,就是一種“移進-規約”法。自上而下分析的中心問題是怎樣判斷棧訂單符號串的可歸約性以及如何規約。解決方案是規範規約。所謂規範規約就是每一步都把控制代碼換成它對應的產生式

演算法設計與分析 回溯 5.8流水作業車間排程

/* 流水作業車間排程: n個作業要在兩臺機器M1和M2組成的流水線上完成加工。每個作業加工的順序都是現在M1上加工,然後在 M2上加工。M1和M2加工作業i所需的時間分別為ai和bi。流水作業排程問題要求確定這n個作業的最優 加工順序,使得從第一個作業在機器M1上開始加工

構建之 團隊和流程

ini 之前 組織 第五章 團隊 mod 交互 然而 逆轉 典型的團隊開發模式和流程,完全是新的內容;涉及到更多的術語和有意思的策略性東西 1.團隊模式【我比較認可的】 主治醫師模式 由首席程序員(相當於首席醫生)負責整個工程,周圍人員各司其職,配合支持中心人物的工作;

讀《構建之

交付 瀑布模型 pro 集體 成員 統一 工作 變形 流程 第五章說的是團隊和流程, 什麽是團隊? 團隊有一致的集體目標,團隊要一起完成這目標,一個團隊的成員不一定要同時工作,例如接力賽跑。 團隊成員有各自的分工,互相依賴合作,共同完成任務。 軟件團隊有許多

《構建之讀書筆記

收集數據 效率 衡量 配置 測試 人在 模式 輸出 發現 第5章 團隊和流程  一、非團隊和團隊 團隊的共同特點: 1、團隊有一致的集體目標,團隊要一起完成這目標。一個團隊的成員不一定要同時工作,例如接力跑。 2、團隊成員有各自的分工,互相依賴合作,共同完成任務。 二、軟件

構建之 需求分析

lock 焦點 ron 寫到 模型 優先 產品 輔助 討論 其實這是“啃硬骨頭”的第一步,就是如何從“茫茫”中鎖定需求相關方、挖出來需求的方法論 1.挖取需求 獲取和引導需求。需求不僅是來自外界,甚至也可以來自技術成員團隊內部; 分析和定義需求。主要是對需求進行量化; 驗

讀構建之 :團隊和流程

min 這樣的 程序員 希望 成員 eat 貢獻 核心 不能 團隊有一致的集體目標,團隊要一起完成這目標。一個團隊的成員不一定要同時工作,例如接力賽跑。 團隊成員有各自的分工,互相依賴合作,共同完成任務。 軟件團隊有各種形式,適用於不同的人員和需求。基於直覺形成的團隊模式未

構建之讀書心得

多個 功能需求 優先級 周期 基礎 第五章 高效 包括 交付 這一章我們主要學習了團隊和流程。團隊簡而言之就是開發一個軟件工程的團隊,那麽團隊究竟怎樣在一起開發這一軟件便有了多種多樣的方法。 比如所有人都一起做的一窩蜂模式,但這樣模式弊端很大,雖然都做了許多工作,但結合起來

加密算實例1--註冊登錄(消息摘要算

其他 open targe 代碼 type .get stack static app 15.1、原理步驟 註冊:註冊時,將用戶密碼加密放入數據庫 登錄:登錄時,將用戶密碼采用上述相同的算法加密,之後再與數據庫中的信息進行比對,若相同,則登錄 15.2、實現(這裏采用了

入門經典 

標準 name vector容器 兩個 clas 條件 tap 算法入門經典 字典 例題5-4 反片語 輸入一些單詞(以“#”為結束標誌),找出所有滿足如下條件的單詞:該單詞不能通過字母的重排,得到輸入文本中的另一個單詞。在判斷是否滿足條件是不分大小寫,但是在輸出時應保留

入門經典- 例題 5-5 集合棧計算機

urn cto str ack iostream 如果 tca cnblogs amp The SetStack Computer Time limit: 3.000 seconds 題目是這樣的: 有一個專門為了集合運算而設計的“集合棧”計算機。該機器有

入門經典- 例題5-6 團體隊列

com ont func sam 移除 inpu 輸入 類型 隊列 題目背景 隊列和優先級隊列是大多數計算機科學家都知道的數據結構。但是團隊隊列卻不被人熟知,盡管在生活中經常出現。比如,午餐時間的食堂門口的隊列就是一個團隊隊列。在一個團隊隊列中,每個元素屬於一個團隊。如果一

入門經典- 例題5-7 醜數

space names logs ins 是否 判斷 pop spa esp #include<iostream> #include<vector> #include<queue> #include<set> using n