2016-04-03 51 views
0

請各位看看以下語言:自動機:CFG用於下列語言

(a, b, c)* − {anbncn|n≥0}

我的問題是:我如何寫一個上下文無關文法呢?

一般來說,當某些東西被排除在外時(即具有「 - 」符號),我怎樣才能寫出語法?

回答

1

沒有算法來確定一種語言是否是上下文無關的。因此,對您提出的問題沒有一般的解決方案也就不足爲奇了。

上下文無關的語言在互補,設置差異或交集下沒有關閉。 (但他們下級聯,並集,和克林星形態收市。)在任何情況下

{anbncn|n≥0}

不是上下文無關語言,但它的補(如你的問題)是上下文無關。這個事實的證明(通過構建補語的上下文無關文法)是補充下非CFGs的一個標準例子。過字母表{a,b,c},其中字母是不是爲了

  • 所有字符串:

    概括地說,你的語言L,可以從聯盟組成。換句話說,所有包含子字符串ba,cbca的字符串。

  • {aibjck|i,j,k≥0∧i≠j}

  • {aibjck|i,j,k≥0∧j≠k}

+0

感謝您的回覆。 這裏的問題是,「bac」或「caaaab」等等都是真實的,你描述的語言並不完全描述我的問題中的L。 你覺得呢? –

+0

@MohammadAmin:'bac'和'caaaab'是我答案中的第一組字符串。這三種語言一起描述你的問題中的L.問題是什麼? (也許最好和你的教授討論一下。) – rici

+0

哦,我明白了,抱歉,我沒有注意到。所以現在我的問題是如何爲這三種語言編寫一個CFG(特別是第一個)?我怎樣才能在語法中使用「union」? –

0

(a, b, c)* − {a^nb^nc^n|n≥0}

這是說,你可以選擇任何一個,b或c,並有其中的任何重複例如abccbaabaab或abca或bccc

對於a *,您使用A->aA |eA->AA | a | e

使用規則,你可以這樣做:

S -> A | B | C A->aA |e | AS B->bB |e | BS C->cC |e | CS

的S在每個A,B和C的包容是,如果整個事情上有(....)*一個Kleene星什麼可以用來,並允許您返回到開始處並添加另一個符號。

我不知道如何在排除符號的情況下製作語法,但邏輯上如果-不是可用的終端符號,那麼您已經排除了它。