為以下文法構造 SLR(1) 分析表
1. E → E + T
2. E → T
3. T → T * F
4. T → F
5. F → (E)
6. F → id


解決方案

生成 SLR 分析表的步驟

  • 生成 LR(0) 項的規範集

  • 根據分析表演算法規則 (2b) 計算 FOLLOW。

FOLLOW 的計算

根據 FOLLOW 的規則 (1)

FOLLOW(E) = {$}                                                    (1)

  • E → E + T

應用 FOLLOW 規則 (2)

即,將 E → E + T 與 A → α B β 進行比較

E →ΕE+ T
A →ΑBΒ

∴ A = E, α = ε, B = E, β = +T

∵ 因為 FIRST(β) = FIRST(+T) = {+} 不包含 ε。

∴ FOLLOW 規則 (2b)

FOLLOW(E) = {+}                                                    (2)

應用 FOLLOW 規則 (3)

E →Ε +T
A →αB

FOLLOW(T) = {FOLLOW(E)}                                  (3)

  • E → T

規則 (2) 不能應用。因為 E → T 不能與 A → α B β 進行比較。應用 FOLLOW 規則 (3)

E →εT
A →αB

FOLLOW(T) = {FOLLOW(E)}                                  (4)

  • T → T* F

應用 FOLLOW 規則 (2)

T →ET*F
A →ABβ

∴ FIRST(β) = FIRST(∗ F) = {*}

規則 (2a)

∴ FOLLOW (T) = {*}                                                (5)

應用 FOLLOW 規則 (3)

T →T*F
A →αB

∴ FOLLOW (F) = {FOLLOW(T)}                                (6)

  • T → F

規則 (2) 不能應用。因為 T → F 不能與 A → α B β 進行比較

應用規則 (3)

T →εF
A →αB

FOLLOW (F) = {FOLLOW(T)} (7)

  • F → (E)

應用 FOLLOW 規則 (2)

A →(E)
F →ABβ

∴ FIRST(β) = FIRST()) = { )}

FOLLOW(E) = { )} (8)

規則 (3) 不能應用。

  • F → id

規則 (2) 和 (3) 都不能應用於此產生式。因為它們不能與 F → id 進行比較。

將 (1) 到 (8) 結合起來

FOLLOW(E) = {$}                                            (1)

FOLLOW(E) = {+}                                            (2)

FOLLOW(T) = {FOLLOW(E)}                          (3)

FOLLOW(T) = {FOLLOW(E)}                          (4)

FOLLOW (T) = {*}                                            (5)

FOLLOW (F) = {FOLLOW(T)}                          (6)

FOLLOW (F) = {FOLLOW(T)}                          (7)

FOLLOW(E) = { )}                                            (8)

∴ 從 (1)、(2) 和 (8)

FOLLOW(E) = {$, +, )}

從 (3)、(4)、(5)、(8)

FOLLOW(T) = {$, +, ),*}

從 (6) 和 (7)

FOLLOW(F) = {$, +, ) *}

以以下方式構造表的結構:

  • 按行寫下所有狀態 I0 到 I11(即 0 到 11)。
  • 按列寫下 Action 列中的終結符。
  • 按列寫下 goto 列中的非終結符。

更新於:2021-11-02

852 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告