運算子文法中的優先順序關係是什麼?


對於運算子文法中的終結符 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γ
mACBed

因此,將 a 與 c 比較,將 b 與 e 比較,我們得到 c =.e。

我們還可以為 a 和 b 製作不同的組合。

在文法 S → m A c Bed 中

α = ε,a = m,β = A,b = c,γ = Bed

ΑAβbγ
ΕMAcBed

因此,將 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$ 比較

ΑAAβ
ΕMAcD
A →Γb$
A →Eiε

∴   α = ε,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$ 比較

ΑAbβ
MAcD


Α →Γa$
Α →Eiε

∴ α = 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

  • 結束

更新於: 2021年10月29日

471 次檢視

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告