算符優先順序語法中算符的 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
- 結束
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP