運算子文法中的優先順序關係是什麼?
對於運算子文法中的終結符 a 和 b,我們可以有以下優先順序關係:
- a =. b(優先順序相同) - 如果產生式的右邊形式為 α a β b γ,其中 β 可以是 ε 或單個非終結符,則 a =. b。
這裡,α 和 γ 可以是任何字串。
示例 - 在文法中,S → m A c B e d
將 mAcBed 與 αaβbγ 進行比較
α = mA,a = c,β = B,b = e,γ = d
Α | A | β | b | γ |
mA | C | B | e | d |
因此,將 a 與 c 比較,將 b 與 e 比較,我們得到 c =.e。
我們還可以為 a 和 b 製作不同的組合。
在文法 S → m A c Bed 中
α = ε,a = m,β = A,b = c,γ = Bed
Α | A | β | b | γ |
Ε | M | A | c | Bed |
因此,將 a 與 m 比較,將 b 與 c 比較
∴ m =. c
- a<.b(小於)
如果產生式的右邊形式為 α a A β 且 A ⟹+ γb$,其中 γ 是 ε 或單個非終結符,則 a <.b。
示例 - 在文法 S → m A c D 中
A → i
將 m A c D 與 α a A β 比較,將 A → i 與 A → γb$ 比較
Α | A | A | β |
Ε | M | A | cD |
A → | Γ | b | $ |
A → | E | i | ε |
∴ α = ε,a = m,A = A,β = cD
∴ γ = ε,
且 b = i
∴ 應用規則,
a <. b 表示 m <. i
- a .> b(大於)
如果產生式的右邊形式為 αAbβ 且 A ⟹+ γa$,其中 $ 是 ε 或單個非終結符,則 a .> b。
示例 - 在文法 S → m A c D 中
A → i
將 m A cD 與 α a bβ 比較,將 A → i 與 A → γa$ 比較
Α | A | b | β |
M | A | c | D |
Α → | Γ | a | $ |
Α → | E | i | ε |
∴ α = m,A = A,b = c,β = D
將 i 與 γa $ 比較
∴ γ = ε,a = i,$ = ε
∴ 應用規則,
a .> b 表示 i .> c。
終結符之間的優先順序關係也可以用語法樹表示 -
計算運算子優先順序關係的演算法
輸入 - 運算子文法
輸出 - 終結符和符號之間的優先順序關係。
方法
- 開始
- 對於每個產生式 A → B1,B2,… … … . Bn
對於 i = 1 到 n – 1
如果 Bi 和 Bi+1 都是終結符,則
設定 Bi = Bi+1
如果 i ≤ n − 2 且 Bi 和 Bi+2 都是終結符,且 Bi+1 是非終結符,則
設定 Bi = Bi+2
如果 Bi 是終結符 & Bi+1 是非終結符,則對於 LEADING (Bi+1) 中的所有 a
設定 Bi <. a
如果 Bi 是非終結符 & Bi+1 是終結符,則對於 TRAILING (Bi) 中的所有 a
設定 a . > Bi+1
- 結束