算符優先順序語法中算符的 LEADING 和 TRAILING 操作是什麼?


LEADING

如果產生式為 A → aα 或 A → Ba α 其中 B 為非終結符,且 α 可以是任意的字串,則右側第一個終結符符號為

Leading(A) = {a}

如果產生式為 A → Bα,如果 a 在 LEADING (B) 中,則 a 也將出現在 LEADING (A) 中。

TRAILING

如果產生式為  A→ αa 或 A → αaB 其中 B 為非終結符,且 α 可以是任意的字串,則

TRAILING (A) = {a}

如果產生式為  A → αB。如果 a 在 TRAILING (B) 中,則 a 也將出現在 TRAILING (A) 中。

計算 LEADING 的演算法

輸入 − 無上下文語法 G

輸出 − 如果布林陣列 L [A, a] = true,則 LEADING (A) = {a}

方法 − 如果 L (A, a) 之前不是真,則過程 Install (A, a) 將使其變為真。

  • 開始

  • 對於每個非終結符 A 和終結符 a

                           L [A, a] = false ;

  • 對於每個形式為 A ⟶ aα 或 A → B a α 的產生式

                            安裝 (A, a);

  • 當堆疊不為空時

                            從堆疊中彈出頂部對 (B, a);

                            對於每個形式為 A → B α 的產生式

                            安裝 (A, a);

  • 結束

過程安裝 (A, a)

  • 開始
  • 如果 L [A, a] 為假

                    L [A, a] = 真

                    將 (A, a) 壓入堆疊。

  • 結束

TRAIL 的計算演算法

輸入 − 無上下文語法 G

輸出 - TRAILING (A) = {a} 當且僅當布林陣列 T [A, a] = 真

方法

  • 開始
  • 對於每個非終結符 A 和終結符 a

                 T [A, a] = 假;

  • 對於每個形式為 A ⟶ αa 或 A → α a B 的產生式

                  安裝 (A, a);

  • 當堆疊不為空時

                從堆疊中彈出頂部對 (B, a);

                對於每個形式為 A → αB 的產生式

                安裝 (A, a);

  • 結束

過程安裝 (A, a)

  • 開始
  • 如果 T [A, a] 為假

                 T [A, a] = 真

                 將 (A, a) 壓入堆疊。

  • 結束

運算元優先順序關係計算演算法

輸入 - 運算元語法

輸出 - 終結符和符號之間的優先順序關係。

方法

  • 開始
  • 對於每個產生式 A → B1, B2, … … … . Bn

                       對於 i = 1 到 n – 1

              如果 Bi 和 Bi+1 均為終結符,則

                      設定 Bi = Bi+1

             如果 i ≤ n − 2 且 Bi 和 Bi+2 均為終結符且 Bi+1 為非終結符,則

                      設定 Bi = Bi+1

             如果 Bi為終結符 & Bi+1為非終結符,則對於 LEADING (Bi+1) 中的所有 a

                       設定 Bi <. a

            如果 Bi為非終結符 & Bi+1 為終結符,則對於 TRAILING (Bi) 中的所有 a

                      設定 a . > Bi+1

  • 結束

更新於: 29-Oct-2021

11K+ 瀏覽量

開始你的職業生涯

完成課程並獲得認證

開始學習
廣告
© . All rights reserved.