關於形式語言與自動機的文法一個小小的思考

基礎回顧
  • 根據Chomsky文法體系劃分爲四類,0,1,2,3型。
  • 由文法G產生的語言記爲L(G)
  • L(G)中的一個字符串,必是由終結符組成的,並且是從起始符S推導出來的
  • 0型文法:無限制文法
  • 1型文法,也稱上下文有關文法。在這裏插入圖片描述
  • 2型文法,也稱上下文無關文法。在這裏插入圖片描述
  • 3型文法,也稱正則文法。在這裏插入圖片描述
  • 不含A→ε的2型、3型屬於1型,1型、2型、3型均屬於0型。
  • 1型 ,不允許A→ε形式。

思考

那麼如何利用這四種類型設置好簡單語言的文法是值得考慮的事情。

首先一個例題看看:
在這裏插入圖片描述
分析: 首先明白證明兩個集合相等是需要雙向證明的。L是上述生成式生成的語言的集合,而等號右邊是一般形式的生成句子的集合。

  1. 切入點有兩個S->aSBC;S->aBC;要獲得右邊n個字符的連接,很明顯帶入n次即可。
  2. 可以分別嘗試兩個,如S->aBC;進行自身的代入整合可得S->an(BC)n
  3. 獲得a的n次方了,可能是正確的做法。我們後面就考慮(BC)n的處理問題。
  4. an(BC)n,在提供的生成式中肯定會先找aB->ab,因爲只有這一個才能帶入使用,其他都不能。
  5. 進行一下處理,得到an-1aB(BC)n-1C,代入可得anb(BC)n-1C,那麼很明顯,我們獲得了b,那麼剛好式子bB->bb發揮作用,依次拆解得到anbnCn
  6. 那麼C的處理一樣,帶入bC->bc,再代入cC->cc即可得到anbncn,即證L包含於L(G)。

同理,再證L(G)->L的關係。
從S開始只能用①和②得到含a,B,C的字符串,且字符串中這3個字母的個數相同。而b和c分別只能用B和C換取,因此L(G)的字符串中a,b,c的個數相同。又a始終出現在其他符號的左邊,B只有緊挨在a或b的右邊時才能被替換成b,C只有緊挨在b或c的右邊時才能被替換成c,因此b必在a的右邊,又必在b的右邊,得證L(G)->CL。

  1. 構造右線性文法,識別語言L={a3n+1|n >=0}。那麼在這裏插入圖片描述這是基本定義,但是要是3的倍數並且餘1,說明每次都增加三個字符,要麼是開始時只有一個,要麼到最後結束時增加一個即可,全程都是每次增加三個字符,所以就是S->aaaS|a或者
    在這裏插入圖片描述
  2. 構造上下文無關文法,能夠產生L= {wl​​​​​​​​​​​​​​ w屬於{a,b}*且w中a的個數是b的兩倍}。
    那麼構造a的數目是b的兩倍,說明每次增加的時候都是至少按照你加2我加1的形式增加,
    那麼簡單一個式子就是S->aabS,S->aab,這樣子就差不多了,但是要考慮所有的組合情況,那麼排列順序是一個值得考慮的問題,S->aab,S->aba,S->baa都是存在的排列方式,所以在這三者中的任意位置插入新增位置都是可以的
    S->aSab|aaSb|aabS|Saab,
    S->Saba|aSba|abSa|abaS,
    S->Sbaa|bSaa|baSa|baaS,
    這樣子寫有點繁瑣,那麼我們可以採用動態規劃的思想,就是增加
    在這裏插入圖片描述
    那麼我們藉助這個,進行動態拆分,即S->SaSaSbS|SaSbSaS|SbSaSaS就可滿足上述要求。
  3. 還比如寫一個以1開始以01結尾的串的生成式
    那麼確定以1開始,得到S->1A,然後1的後面可以跟0或者1,即A->0A|1A|0,並且也完成了以1結束的目的,所以,做這些題的時候學會一步一步根據特點拆解很重要。可能有的解不唯一。

最後舉一個作業裏面的典型習題
找出右線性文法,能構成具有奇數個a和奇數個b組成的字符串。
分析: 當時做這個題的時候,我們會思考如何保證一定是奇數個呢?按照常規思路來說,在1個的基礎上每次增加的時候都增加兩個或者進行兩次增加同一類型元素的操作,那麼就一定能保證結果是奇數個。
那麼先確定最開始的字符要麼是a要麼是b,那麼
在這裏插入圖片描述
所以綜合來看的結果是
在這裏插入圖片描述
示意圖
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章