簡體   English   中英

自動機:CFG支持以下語言

[英]Automata: CFG for following language

請查看以下語言:

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

我的問題是:如何為它編寫上下文無關的語法?

通常,當某些東西被排除在外時(即帶有“-”號),我該如何編寫語法?

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

上下文無關的語言在補語,集合差異或交集下不會封閉。 (但它們在連接,並集和Kleene星的作用下是關閉的。)

{a n b n c n |n≥0}

不是上下文無關的語言,但它的補語(如您的問題)是上下文無關的。 這一事實的證明(通過為補語構建上下文無關的語法)是在補語下不封閉CFG的標准示例。

概括而言,您的語言L可以由以下各項的組合組成:

  • 字母{a,b,c}上字母不按順序排列的所有字符串。 換句話說,所有包含子字符串bacbca的字符串。

  • {a i b j c k |i,j,k≥0∧i≠j}

  • {a i b j c k |i,j,k≥0∧j≠k}

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

這表示您可以選擇a,b或c中的任何一個,並重復其中的任何一個,例如abccbaabaab或abca或bccc

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

使用該規則,您可以執行以下操作:

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

如果整個對象上都有一個Kleene星(....)* ,則可以使用A,B和C中的每個S,並允許您回到起點並添加另一個符號。

我不知道如何制作排除符號的語法,但是從邏輯上講,如果-不是可用的終端符號,則您已經排除了它。

暫無
暫無

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

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