您列出的語言不清楚。我假設w E {a,b,c}*
意味着w ε {a,b,c}*
和nb(w) != na(w) + nc(w)
意味着語言中的所有字符串的數量都不等於a的數量和c的數量之和。
如果是這種情況,則必須考慮將使用該語言的所有字符串的特徵以及將排除使用該語言的字符串的所有特徵。
該語言接受字符串,其中b的數量=/= a的數量+ c的數量。我們可以重新制定這種語言是一個接受字符串:
數a
的+號c
的>b
的 或 數a
的數+ c
的<一些b
的
這解釋了第一個S - > S1 | S2
S1確保存在至少1 b
(S3),然後迫使任b
的作爲a
的和c
的(S0)或更多b
的比a
的等量和(S1)。 S1規則的最終結果是字符串b
的比a
和c
的更多。
S2確保有更多的a
和/或c
的比b
的。它通過強制執行a
或c
(X),然後允許等於a
的(S0)或更多的a
的/ c
的比b
的(S2再次)。
這是專門針對你的榜樣,但你可以種看到,進入創建這個語法的思維過程如何:
- 制定的語言作爲具體案例(
a
的/ c
的>或< b
S「S)
- 對於每種情況下,通過確保的情況下將舉行(力#
b
開始」>比a
的/ c
的通過迫使至少一個b
),然後擴展字符串包括平等的所有可能性a
's/c
's和b
's,或更少a
's/c
's比b
's。
- 對稱處理另一種情況。
問題是您需要確保生成該語言中的每個字符串,並且不生成該語言中的所有字符串。(重讀這個,直到它意味着匯入)
我確實有家庭作業標籤,但它被mod刪除。 – PhilT 2010-11-16 21:30:17
非常感謝您的幫助,非常感謝! – PhilT 2010-11-16 21:30:33