乙個正規語言可以由正規文法定義,也可以由正規式定義,對任意乙個正規文法,存在乙個定義同乙個正規語言的正規式;反之,對每個正規式,存在乙個生成同一語言的正規文法,有些正規語言很容易用文法定義,有些語言更容易用正規式定義,現在介紹兩者間的轉換,從結構上建立它們的等價性。
1、將σ上的乙個正規式轉換成正規文法g=(vn,vt,p,s)。令其中的vt=σ,確定產生式和vn的元素的辦法在右頁描述。
對任何正規式r,選擇乙個非終結符s生成產生式s→r,為區別文法中的產生式,把這個產生式叫做正規產生式,並將s定為g的識別符號。
若x和y都是正規式,對形如a→xy的正規產生式,重寫成:a→xb,b→y兩個正規產生式,其中b是新選擇的非終結符,即b∈vn
對已形成的形如a→x*y的正規產生式,重寫為:
a→xb
a→yb→xb
b→y 其中b為一新非終結符。
對形如a→x|y的正規產生式,重寫為:
a→x,a→y
不斷利用上述規則做變換,直到每個產生式都符合三型文法的要求。 例4.9
將r=a(a|d)*轉換成相應的正規文法,令s是文法的開始符號,首先形成
s→a(a|d)*,然後形成s→aa和a→(a|d)*,再重寫第二條產生式形成
s→aa a→(a|d)b,
a→ε b→(a|d)b和
b→ε進而變換為
s→aa b→ab
a→ab b→db
a→db b→ε a→ε即為所求。
2、將正規文法轉換成正規式。基本上是上述過程的逆過程,最後只剩下乙個開始符號定義的產生式,並且該產生式的右部不含非終結符。
例4.10
文法g[s]
s→aa s→a a→aa a→da a→a a→d
先有:s=aa|a
a=(aa|da)|(a|d)
再將a的正規式變換為a=(a|d)a|(a|d),據表中規則2變換為:a=(a|d)*|(a|d),再將a 右端代入s的正規式得:s=a(a|d)*|a(a|d)|a
再利用正規式的代數變換可依次得到
s=a((a|d)*|(a|d)|ε)
s=a(a|d)*
即a(a|d)*為所求。
總結:文法和語言
0型文法產生的語言稱為0型語言
1型文法或上下文有關文法(csg)產生的語言稱為1型語言或上下文有關語言(csl)
2型文法或上下文無關文法(cfg)產生的語言稱為2型語言或上下文無關語言(cfl)
3型文法或正則(正規)文法(rg)產生的語言稱為3型語言正則(正規)語言(rl)
四種文法之間的關係 是將產生式做進一步限制而定義的。
語言之間的關係依次:有不是上下文有關語言的0型語言,有不是上下文無關語言的1型語言,有不是正則語言的上下文無關語言。
總結:文法和識別系統的關係
0型文法(短語文法)的能力相當於圖靈機,可以表徵任何遞迴可列舉集,而且任何0型語言都是遞迴可列舉的。
圖靈機1型文法(上下文有關文法):相應識別系統是線性界限自動機。
2型文法(上下文無關文法):相應識別系統是不確定的下推自動機。
3型文法(正規文法、右線性文法):相應識別系統是有窮自動機。
正規文法與正規式
3型文法也叫作正規文法,它對應於有限狀態自動機,它是在2型文法的基礎上滿足 a a ab 右線性 或a a ba 左線性 如果有a a,a ab,b a,b cb則符合3型文法的要求。但是a ab,a ab,b a,b cb或a a,a ba,b a,b cb則不符合3型文法的要求。也就是說,不能夠...
10 16 正規文法與正規式
1.分別寫出描述以下語言的正規文法和正規式 1 l1 2 l2 3 l3 答 1 正規文法 s aa a ba a 正規式 s a b a 2 正規文法 s as s bs b 正規式 s a a b b 3 正規文法 s ab s ab 正規式 s ab ab 2.將以下正規文法轉換到正規式 1 ...
作業六 正規文法與正規式
1.分別寫出描述以下語言的正規文法和正規式 l1 l2 l2 答 l1正規文法 s aa a bna a ba b bn b bb l1正規式 s ab a l2正規文法 s aa a aa bb b b bb b l2正規式 a ab b l3正規文法 s aa a bb b aa l3正規式 s...