簡體   English   中英

為喬姆斯基范式的語言構建上下文無關文法

[英]Construct a context free grammar for a language in Chomsky Normal Form

我正在嘗試以 Chomsky Normal Form 構建一個 CFG,並盡可能少地接受包含唯一字符串 a^21 的語言。

我知道我可以轉換

S -> AAAAAAAAAAAAAAAAAAAAAA -> a

但是有沒有其他方法可以縮短該語言然后將其轉換為喬姆斯基范式?

我們可以很容易地證明,我們至少需要六個符號才能為這種語言生成 CNF 中的 CFG,方法是認識到我們最多可以在每次產生時將生成的字符串長度加倍,而且我們必須從 2^0 開始:

A_21 := ...
A_16 := A_16 A_16
A_8  := A_4  A_4
A_4  := A_2  A_2
A_2  := A_1  A_1
A_1  := a

然后我們可以證明 CNF 中沒有語法,有六個產生式來生成我們的目標語言。 我們通過自下而上構建語法來開始論證。

  1. 我們必須有A_1 := a來獲取任何字符串。
  2. 我們必須有A_2 := A_1 A_1才能得到長度大於 1 的任何字符串。
  3. 我們現在可以生成A_3或跳過它並生成A_4 ,或兩者兼而有之。 我們將在下面考慮這些情況。

案例 1: A_3

  1. 我們添加A_3 := A_2 A_1
  2. 我們已經有 3 個作品,並且知道我們需要A_21 := XY形式A_21 := XY 所以我們最多可以添加兩個。 即使我們添加了現在可能的最大產生式 - A_6A_12 - 我們也不能按要求產生A_21 (我們最多可以產生A_18 := A_6 A_12 。所以添加A_3不能得到我們生成我們語言的語法在六個制作中。

案例 2: A_4

  1. 我們添加A_4 := A_2 A_2
  2. 我們已經有 3 個作品,並且知道我們需要A_21 := XY形式A_21 := XY 所以我們最多可以添加兩個。 我們目前的選項是A_5A_6A_8 A_5A_6將失敗,原因與我們針對上述案例 1 所述的原因相同。 然而, A_8不會因為這個推理而失敗,所以我們添加A_8 := A_4 A_4
  3. 我們現在只有一個產品,需要它是A_20, A_19, A_17A_13 我們無法使用我們現有的作品生成任何這些。

因此,我們排除了具有 6 個產生式的語法。 如果您嘗試使用上述推理找到具有 7 個產生式的語法,您會找到幾個。 既然我們知道 CNF 中有 7 個產生式的語法,而沒有 6 個產生式,那么您就完成了。 以下是 7 個產生式語法中的一些:

S    := A_18 A_3
A_18 := A_9  A_9
A_9  := A_6  A_3
A_6  := A_3  A_3
A_3  := A_2  A_1
A_2  := A_1  A_1
A_1  := a

S    := A_17 A_4
A_17 := A_9  A_8
A_9  := A_8  A_1
A_8  := A_4  A_4
A_4  := A_2  A_2
A_2  := A_1  A_1
A_1  := a

S    := A_16 A_5
A_16 := A_8  A_8
A_8  := A_4  A_4
A_5  := A_4  A_1
A_4  := A_2  A_2
A_2  := A_1  A_1
A_1  := a

S    := A_15 A_6
A_15 := A_9  A_6
A_9  := A_6  A_3
A_6  := A_3  A_3
A_3  := A_2  A_1
A_2  := A_1  A_1
A_1  := a

S    := A_14 A_7
A_14 := A_7  A_7
A_7  := A_4  A_3
A_4  := A_3  A_1
A_3  := A_2  A_1
A_2  := A_1  A_1
A_1  := a

S    := A_13 A_8
A_13 := A_8  A_5
A_8  := A_5  A_3
A_5  := A_3  A_2
A_3  := A_2  A_1
A_2  := A_1  A_1
A_1  := a

S    := A_12 A_9
A_12 := A_9  A_3
A_9  := A_6  A_3
A_6  := A_3  A_3
A_3  := A_2  A_1
A_2  := A_1  A_1
A_1  := a

S    := A_11 A_10
A_11 := A_10 A_1
A_10 := A_8  A_2
A_8  := A_4  A_4
A_4  := A_2  A_2
A_2  := A_1  A_1
A_1  := a

還有更多。 困難的部分是顯示沒有任何 6 個作品。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM