解釋在上下文無關文法中去除單元產生式


並非所有文法都經過最佳化,這意味著文法可能包含一些額外的符號(非終結符),從而增加了文法的長度。

因此,我們必須透過去除無用符號來簡化文法。

屬性

下面解釋了簡化文法的屬性:

  • G 的每個非終結符和終結符都出現在 L 中某個單詞的推導中。
  • 不應該有任何形如 X->Y 的產生式,其中 X 和 Y 都是非終結符。
  • 如果語言 L 中不包含空串 ε,則在產生式 X-> ε 中也不需要包含 ε。

下圖描述了簡化文法的屬性:

單元產生式是指一個非終結符推匯出另一個非終結符的產生式。

去除單元產生式

下面給出去除單元產生式的步驟:

  • 步驟 1 - 為了去除 X->Y,每當 Y->a 出現在文法中時,將產生式 X->a 新增到文法規則中。
  • 步驟 2 - 現在從文法中刪除 X->Y。
  • 步驟 3 - 重複步驟 1 和 2,直到所有單元產生式都被去除。

示例

考慮下面給出的上下文無關文法,併為其去除單元產生式。

S->0A|1B|C

A->0S|00

B->1|A

C->01

解釋

步驟 1

S->C 是單元產生式,但在去除 S->C 時,我們必須考慮 C 推匯出什麼,以便我們可以向 S 新增一個規則。

   S->0A|1B|01

步驟 2

B->A 也是單元產生式

   B->1|0S|00

最後,我們可以將不含單元產生式的 CFG 寫成如下形式:

S->0A|1B|01

A->0S|00

B->1|0S|00

C->01

更新於:2021年6月16日

17K+ 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.