什麼是 LALR(1) 解析器?
LALR 解析器是前瞻 LR 解析器。它的功能介於 SLR 和 CLR 解析器之間。它是 CLR 解析器的壓縮版本,因此由此獲得的表格將比 CLR 解析表更小。
在這裡,首先,我們將構建 LR(1) 專案。接下來,我們將查詢具有相同第一個組成部分的專案,並將它們合併以形成單個專案集。這意味著狀態具有相同的第一個組成部分,但不同的第二個組成部分可以整合到單個狀態或專案中。
例如。
假設如果
I4: C → d ∙ , c | d
I7: C → d ∙ , $
這兩個專案或狀態 (I4 和 I7) 具有相同的第一個組成部分,即 d ∙ ,但第二個組成部分不同,即 I4 中的 c | d 和 I7 中的 $。
∴ 這些狀態可以合併為
I47: C → d ∙ , c |d | $
LALR 解析表的構造
演算法
輸入 - 增廣文法 G′
輸出 - LALR 解析表
方法
構造 LR(1) 專案集,即構造
C = {I0, I1, I2 … . . In}
選擇具有相同核心或第一個組成部分的相似狀態,並將它們合併為一個。
令 C′ = {J0, J1, J2 … . . Jm} 為結果集。
為狀態 J1 構造解析動作,類似於 CLR 構造。如果解析表中存在衝突,則可以認為該演算法無法生成 LALR 解析器。
構造 goto 動作如下。
令 goto [J,∗] = K,其中 J 是 C 的一個或多個狀態的並集。
即,J = I1 ∪ I2 … .∪ Im,則
則 K = goto (I1,∗) ∪ goto (I2,∗) … .∪ goto (Im,∗)
LALR 解析器的運作

LALR 文法 - 如果 LALR 解析表中沒有多個表示的條目,則該文法被稱為 LALR(1) 或 LALR 文法。
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP