我一直在爲此做了大約5個小時的作業,我希望你們中的一些人能夠提供幫助,因爲CFG是CS的重要組成部分。設計上下文免費語法的[HW]
我的真正的麻煩是與部分C.
設計一個CFG每個下列語言:
A. {(A^I)(B^j)的(C^k)的} WHERE (!I = j)的與I,J,K> = 0)
我想出了:
Start-> aAB | AbB
A-> epsilon | aA
B-> epsilon | C | bB
C-> epsilon | cC
這似乎爲BCCC,ABBCC,aabbb,CC工作,所以我覺得我好這裏。
B. {(A^I)(B^j)的(C^k)的},其中(i!= k)和I,J,K> = 0)
Start-> aABC | ABcC
A-> epsilon | aA
B-> epsilon | bB
C-> epsilon | cC
這適用於bc,bbcc,ab,abb,aac,所以當我i = 1時,看起來很好。 != k)和I,J,K> = 0)
Start-> aABC | AbB | ABcC
A-> epsilon | aA
B-> epsilon | bB | C
C-> epsilon | cC
我不認爲C部分是正確的,但我相信,A和B是正確的。任何人都可以告訴我,如果我對/錯或幫助嗎?我相信自從最後一種情況,我只是在做一個OR,並且因爲我的A,B,C變量幾乎是相同的,所以我可以通過組合來避免。它看起來像BC工作,acc工作和許多其他工作,但我覺得我不應該簡單地結合起始狀態。
任何人都知道我是否正確或接近或有任何提示?
我仍在處理事情,我認爲這個問題可能並不瞭解如何正確設置i = j或i!= j。我擁有的書是神祕的,沒有真正的例子。我相信i = j或i!= j的決定因素取決於開始狀態。所以爲了解決問題,我有(開始 - > aAB | AbX; A-> epsilon | aA; B-> epsilon | bbB; X-> epsilon | cC。我一直在玩東西,我認爲這是最好的解決方案。這確實是對的?我基本上支持a和b是否是偶數,所以ab現在將被拒絕,abb將被接受。我的理解是否正確? – user591162 2011-03-07 01:32:15
@ user591162:不要將語法看作解析器,而應該將其視爲生成字符串的機器。作爲第一件嘗試的事情,寫一個生成'A^i B^j'的語法,其中'i == j';這很可能在你的教科書中。然後想想它是如何工作的以及如何適應'i!= j'。順便說一句,考慮偶數與奇數會使你寫錯這個語法的方向。 – 2011-03-07 01:35:19
我看到如何讓i = j。 (Start-> A | AB; A->ε| a | Ab | AA; B-> b | bB;)或者至少看起來是正確的。我只需要看看我是否可以扭轉它,但我想我會繼續研究我上面發佈的內容。 – user591162 2011-03-07 01:37:51