在編譯器設計中,SLR、CLR 和 LALR 解析器之間有什麼區別?


SLR 解析器

SLR 代表 “簡單 LR 解析器”。它非常容易且經濟高效地執行。SLR 解析動作和從識別可行字首的確定性有限自動機獲取的 goto 函式。它不會為所有語法專門定義解析動作表,但確實在幾種程式語言的語法上取得了成功。給定一個語法 G。它增強 G 以生成 G’,並且從 G’ 它可以構造 C,即 G’ 的專案集的規範集合。它可以使用以下簡單的 LR 解析表構造技術從 C 構造 ACTION 解析動作函式和 GOTO goto 函式。我們需要了解每個語法的非終結符 A 的 FOLLOW(A)。

CLR 解析器

CLR 指的是規範前瞻。CLR 解析使用 LR(1) 專案的規範集合來構造 CLR(1) 解析表。CLR(1) 解析表與 SLR(1) 解析相比,生成更多狀態。在 CLR(1) 中,它只能在前瞻符號中定位歸約節點。

LALR 解析器

LALR 解析器是前瞻 LR 解析器。它的功能介於 SLR 和 CLR 解析器之間。它是 CLR 解析器的壓縮,因此在此獲得的表將小於 CLR 解析表。

為了構建 LALR(1) 解析表,使用了 LR(1) 專案的規範集合。在 LALR(1) 解析中,具有相同產生式但具有多個前瞻的 LR(1) 專案被分組以形成單個專案集。除了解析表有所不同之外,它通常與 CLR(1) 解析相同。

所有這些 LR 解析器的整體結構都是相同的。它們之間存在一些共同因素,例如大小、它們支援的上下文無關語法的類別以及時間和空間方面的成本,它們在這方面有所不同。

讓我們看看 SLR、CLR 和 LALR 解析器之間的比較。

SLR 解析器LALR 解析器CLR 解析器
它非常容易且便宜地實現。它也很容易且便宜地實現。它實現起來很昂貴且困難。
SLR 解析器的大小最小。LALR 和 SLR 的大小相同。因為它們的狀態數較少。CLR 解析器最大。因為狀態數非常大。
SLR 中的錯誤檢測不是立即的。LALR 中的錯誤檢測不是立即的。CLR 解析器可以立即進行錯誤檢測。
SLR 無法為某些類別的語法生成解析表。它的功能介於 SLR 和 CLR 之間,即 SLR ≤ LALR ≤ CLR。它功能非常強大,適用於大量語法。
它需要較少的時間和空間複雜度。它需要更多的時間和空間複雜度。它也需要更多的時間和空間複雜度。

更新於: 2021年11月2日

53K+ 瀏覽量

啟動您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.