- 1956年,Chomsky建立形式語言的描述。
- 通過對產生式的施加不同的限制,Chomsky把文法分為4種類型
首先定義一個產生式
α→β
- 0型文法定義:
0型文法(PSG): α∈(VN∪VT)* ,且至少含一個VN
β∈(VN∪VT)*
對產生式沒有任何限制
例如:A0→A0 , A1→B
0型文法說明:
0型文法也稱為短語文法。
一個非常重要的理論結果是,0型文法的能力相當於圖靈機(Turing)。或者說,任何0型語言都是遞歸可枚舉的;反之,遞歸可枚舉集必定是一個0型語言。
對0型文法產生式的形式作某些限制,以給出1,2和3型文法的定義。
(注意)
文法G 定義為四元組(V
N ,V
T ,P,S)
¨V
N :非終結符集
¨V
T :終結符集
¨P :產生式集合(規則集合)
¨S :開始符號(識別符號)
-
1型文法(上下文有關文法context-sensitive):
對任一產生式α→β,都有|β|>=|α|, 僅僅 S→ε除外
產生式的形式描述:α1Aα2→α1βα2
(其中,α1、α2、β∈(V
N∪V
T)*,β≠ε,A∈VN)
即:A只有出現在α1α2的上下文中,才允許用β替換。
產生的語言稱“上下文有關語言”但S不能出現在產生式的右部。
例如:0
A
0→
0
1100
0 1
A
1→
1
0101
1
- 2型文法(CFG):對任一產生式α→β,都有α∈VN,β∈(VN∪VT)*
產生式的形式描述:A→β(A∈V
N)
即β取代A時,與A所處的上下文無關。
產生的語言稱“上下文無關語言”
例如:G[S]:S→
01
S→
0S1
- 3型文法(RG):也稱正規文法
每個產生式均為 “A→aB”或“A→a” —— 右線性
“A→Ba”或“A→a” —— 左線性
其中,A、B∈V
N,a∈V
T*
產生的語言稱“正規語言”
例如:G[S]: S→
0A | 0
A→
1B | B
B→
1 | 0
4
個文法類的定義是逐漸增加限制的,因此每一種正規文法都是上下文無關的,每一種上下文無關文法都是上下文有關的,而每一種上下文有關文法都是
0
型文
法。
四種文法之 關系是:包含關系
.
(原因:將產生式做進一步限制而定義
的。
對產生式施加不同的限制得到不同類型的文法
¨0型(無限制文法):
¨1型(上下文有關):
¨
2型(上下文無關):
¨3型(右線性和正規文法):
正規文法只能出現單個的終結符,右線性文法可能出現若干個終結符組成的串。
快速判斷文法的方法淺析
引用:
====================
S-> aaS|a是什么型的,為什么
S-> aSb|ab是什么型的,為什么
S-> SaS|b是什么型的,為什么
=====================
====================
S-> aaS|a是什么型的,為什么
S-> aSb|ab是什么型的,為什么
S-> SaS|b是什么型的,為什么
=====================
答:三種文法都屬於上下文無關文法。
四種文法的判斷非常簡單,說到到,四種文法就是規定產生式的左和右邊的字符的組成規則不同而已,其它的不能理解就不要去想了,你只要知道判斷的時候就是以產生式的左邊和右邊符合的規則進行判斷。下面解釋一下如何根據產生式左邊和右邊的特征來進行判斷。
首先,應該明確,四種文法,從0型到3型,其規則和約定越來越多,限制條件也越來越多,所以,我們判斷時可以從最復雜的3型進行判斷,依次向下判斷,如果不符合3型的,那再看是不是2型的,不是2型的,再看是不是1型的,當然,對於作題作的熟的朋友,不用這么復雜,可以一眼直接看出來。
3型文法遵循什么規范呢?
第一點:左邊必須只有一個字符,且必須是非終結符;
第二點:其右邊最多只能有兩個字符,且當有兩個字符時必須有一個為終結符而另一個為非終結符。當右邊只有一個字符時,此字符必須為終結符。
第三點:對於3型文法中的所有產生式,其右邊有兩個字符的產生式,這些產生式右邊兩個字符中終結符和非終結符的相對位置一定要固定,也就是說如果一個產生式右邊的兩個字符的排列是:終結符+非終結符,那么所有產生式右邊只要有兩個字符的,都必須前面是終結符而后面是非終結符。反之亦然,要么,就全是:非終結符+終結符。
依以上規則判斷,你所給的三個文法顯然都不屬於3型文法。
再看2型文法如何判斷:
第一點:與3型文法的第一點相同,即:左邊必須有且僅有一個非終結符。
第二點:2型文法所有產生式的右邊可以含有若干個終結符和非終結符(只要是有限的就行,沒有個數限制)。
依2型文法的判斷規則,你的三個文法都屬於2型文法,即:上下文無關文法。
再看1型文法如何判斷:
第一點:1型文法所有產生式左邊可以含有一個、兩個或兩個以上的字符,但其中必須至少有一個非終結符。
第二點:與2型文法第二點相同。
依1型文法判斷規則,顯然,你的文法也是屬於1型的。
最后是0型文法,這個就不用看了,只要你能描述出來,都屬於這個類型,即0型。
所以,取其最高的符合規則,最后的答案是其符合:上下文無關文法規則,即2型。
四種文法的判斷非常簡單,說到到,四種文法就是規定產生式的左和右邊的字符的組成規則不同而已,其它的不能理解就不要去想了,你只要知道判斷的時候就是以產生式的左邊和右邊符合的規則進行判斷。下面解釋一下如何根據產生式左邊和右邊的特征來進行判斷。
首先,應該明確,四種文法,從0型到3型,其規則和約定越來越多,限制條件也越來越多,所以,我們判斷時可以從最復雜的3型進行判斷,依次向下判斷,如果不符合3型的,那再看是不是2型的,不是2型的,再看是不是1型的,當然,對於作題作的熟的朋友,不用這么復雜,可以一眼直接看出來。
3型文法遵循什么規范呢?
第一點:左邊必須只有一個字符,且必須是非終結符;
第二點:其右邊最多只能有兩個字符,且當有兩個字符時必須有一個為終結符而另一個為非終結符。當右邊只有一個字符時,此字符必須為終結符。
第三點:對於3型文法中的所有產生式,其右邊有兩個字符的產生式,這些產生式右邊兩個字符中終結符和非終結符的相對位置一定要固定,也就是說如果一個產生式右邊的兩個字符的排列是:終結符+非終結符,那么所有產生式右邊只要有兩個字符的,都必須前面是終結符而后面是非終結符。反之亦然,要么,就全是:非終結符+終結符。
依以上規則判斷,你所給的三個文法顯然都不屬於3型文法。
再看2型文法如何判斷:
第一點:與3型文法的第一點相同,即:左邊必須有且僅有一個非終結符。
第二點:2型文法所有產生式的右邊可以含有若干個終結符和非終結符(只要是有限的就行,沒有個數限制)。
依2型文法的判斷規則,你的三個文法都屬於2型文法,即:上下文無關文法。
再看1型文法如何判斷:
第一點:1型文法所有產生式左邊可以含有一個、兩個或兩個以上的字符,但其中必須至少有一個非終結符。
第二點:與2型文法第二點相同。
依1型文法判斷規則,顯然,你的文法也是屬於1型的。
最后是0型文法,這個就不用看了,只要你能描述出來,都屬於這個類型,即0型。
所以,取其最高的符合規則,最后的答案是其符合:上下文無關文法規則,即2型。
有限狀態自動機是具有離散輸入和輸出的系統的一種數學模型。
其主要特點有以下幾個方面:
– (1)系統具有有限個狀態,不同的狀態代表不同的意義。按照實際的需要,系統可以在不同的狀態下完成規定的任務。
– (2)我們可以將輸入字符串中出現的字符匯集在一起構成一個字母表。系統處理的所有字符串都是這個字母表上的字符串。
– (3)系統在任何一個狀態下,從輸入字符串中讀入一個字符,根據當前狀態和讀入的這個字符轉到新的狀態。
– (4)系統中有一個狀態,它是系統的開始狀態。
– (5)系統中還有一些狀態表示它到目前為止所讀入的字符構成的字符串是語言的一個句子。
形式定義
· 定義:有限狀態自動機(FA—finite automaton)是一個五元組:
– M=(Q, Σ, δ, q0, F)
· 其中,
– Q——狀態的非空有窮集合。∀q∈Q,q稱為M的一個狀態。
– Σ——輸入字母表。
– δ——狀態轉移函數,有時又叫作狀態
轉換函數或者移動函數,δ:Q×Σ→Q,δ(q,a)=p。
– q0——M的開始狀態,也可叫作初始狀態或啟動狀態。q0∈Q。
– F——M的終止狀態集合。F被Q包含。任給q∈F,q稱為M的終止狀態。
