什麼是TOC中的無歧義語法?


如果語法不包含歧義,則該語法可以是無歧義的。這意味著如果它不包含多個最左推導(LMD)或多個最右推導(RMD)或給定輸入字串的多個語法樹,則它是一個無歧義的語法。

規則

為了將歧義語法轉換為無歧義語法,我們應用以下規則:

規則 1 - 如果在產生式規則中使用左結合運算子(+、-、*、/),則在產生式規則中應用左遞迴。左遞迴就是右側最左邊的符號與左側的非終結符相同。

X->Xa

規則 2 - 如果在產生式規則中使用右結合運算子(^),則在產生式規則中應用右遞迴。

右遞迴就是左側最右邊的符號與右側的非終結符相同。例如,X->aX

考慮上面提到的規則的一個例子。

檢查語法是否模糊。

A->AA

A->(A)

A->a

對於字串“a(a)aa”,上述語法可以生成兩棵語法樹,如下所示

由於存在兩棵語法樹,因此語法是模糊的。

考慮另一個語法

S->S+S

S->S*S

S->2

假設語法樹為 2+2*2

語法樹如下所示:

給定的語法是模糊的語法。因此,透過應用關聯規則將模糊語法轉換為無歧義語法,如下所述:

S->S+T

S->T

T->T*F

T->F

F->2

更新於: 2021年6月12日

5K+ 瀏覽量

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告