定义
一个文法
G是下述元素构成的一个四元组(
N, Σ,
P,
S):
-
“ 非终结符号”集合 N。
-
“ 终结符号”集合Σ,Σ与 N无交。
-
取如下形式的一组“ 产生式规则” P,
-
(Σ ∪ N)*中的字符串→ (Σ ∪ N)* 中的字符串,并且产生式左侧的字符串中必须至少包括一个非终结符号。
-
“ 起始符号” S, S属于 N。
一个由形式文法
G= (
N, Σ,
P,
S)产生的语言是所有如下形式的
字符串集合,这些字符串全部由“终结符号”集Σ中符号构成,并且可以从“初始符号”
S出发,不断应用
P中的“产生式规则”而得到。
例子
考虑以下的文法
G,其中
N= {S, D}, Σ = {-, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9},
P包含如下规则:
-
1. S -> -D
-
2. S -> D
-
3. D -> 0D
-
4. D -> 1D
-
5. D -> 2D
-
...
-
12. D -> 9D
-
13. D -> 0
-
14. D -> 1
-
15. D -> 2
-
...
-
22. D -> 9
S为初始符号。以此文法可以产生所有整数。
什么是0型文法,1型文法,2型文法,3型文法
乔姆斯基把方法分成四种类型,即0型、1型、2型和3型。这几种文法类型的概念一定要掌握,是一个非常重要的考点。对于这几种文法,一般书上都只有简单的概念介绍,比较抽象,所以很多学员都没有真正理解。下面我将把概念结合例题进行讲解。
0型文法
设G=(VN,VT,P,S),如果它的每个产生式α→β是这样一种结构:α∈(VN∪VT)*且至少含有一个非终结符,而β∈(VN∪VT)*,则G是一个0型文法。0型文法也称短语文法。一个非常重要的理论结果是:0型文法的能力相当于图灵机(Turing)。或者说,任何0型文语言都是递归可枚举的,反之,递归可枚举集必定是一个0型语言。0型文法是这几类文法中,限制最少的一个,所以我们在试题中见到的,至少是0型文法。
1型文法
1型文法也叫上下文有关文法,此文法对应于线性有界自动机。它是在0型文法的基础上每一个α→β,都有|β|>=|α|。这里的|β|表示的是β的长度。
注意:虽然要求|β|>=|α|,但有一特例:α→ε也满足1型文法。
如有A->Ba则|β|=2,|α|=1符合1型文法要求。反之,如aA->a,则不符合1型文法。
2型文法
2型文法也叫上下文无关文法,它对应于下推自动机。2型文法是在1型文法的基础上,再满足:每一个α→β都有α是非终结符。如A->Ba,符合2型文法要求。
如Ab->Bab虽然符合1型文法要求,但不符合2型文法要求,因为其α=Ab,而Ab不是一个非终结符。
3型文法
3型文法也叫正规文法,它对应于有限状态自动机。它是在2型文法的基础上满足:A→α|αB(右线性)或A→α|Bα(左线性)。
如有: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型方法的要求了。具体的说,例子A->ab,A->aB,B->a,B->cB中的A->ab不符合3型文法的定义,如果把后面的ab,改成“一个非终结符+一个终结符”的形式(即为aB)就对了。例子A->a,A->Ba,B->a,B->cB中如果把B->cB改为B->Bc的形式就对了,因为A→α|αB(右线性)和A→α|Bα(左线性)两套规则不能同时出现在一个语法中,只能完全满足其中的一个,才能算3型文法。
注意:上面例子中的大写字母表示的是非终结符,而小写字母表示的是终结符。
文法形式
文法分类
自从乔姆斯基(Chomsky)于1956年建立形式语言的描述以来,形式语言的理论发展很快。这种理论对计算机科学有着深刻的影响,特别是对程序设计语言的设计、
编译方法和计算复杂性等方面更有重大的作用。
乔姆斯基把文法分成四种类型,即0型、1型、2型和3型。这几类文法的差别在于对产生式施加不同的限制。
多数程序设计语言的单词的语法都能用正规文法或3型文法来描述。
3型文法G=(VN,VT,P,S)的P中的规则有两种形式:一种是前面定义的形式,即:A→aB或A→a其中A,B∈VN ,a∈VT*,另一种形式是:A→Ba或A→a,前者称为右线性文法,后者称为左线性文法。正规文法所描述的是VT*上的正规集。
四个文法类的定义是逐渐增加限制的,因此每一种正规文法都是上下文无关的,每一种上下文无关文法都是上下文有关的,而每一种上下文有关文法都是0型文法。称0型文法产生的语言为0型语言。上下文有关文法、上下文无关文法和正规文法产生的语言分别称为
上下文有关语言、上下文无关语言和
正规语言。
类型说明
设G=(VN,VT,P,S),如果它的每个产生式α→β是这样一种结构:α∈( VN∪VT )*且至少含有一个非
终结符,而β∈( VN∪VT )*,则G是一个0型文法。
0型文法也称短语文法。一个非常重要的理论结果是,0型文法的能力相当于图灵机(Turing)。或者说,任何0型语言都是递归可枚举的;反之,递归可枚举集必定是一个0型语言。
对0型文法产生式的形式作某些限制,以给出1,2和3型文法的定义。
设G=(VN,VT,P,S)为一文法,若P中的每一个产生式α→β均满足|β|≥|α| ,仅仅S→ε除外,则文法G是1型或上下文有关的。
在有些文献给的定义中,将上下文有关文法的产生式的形式描述为α1Aα2→α1βα2,其中α1、α2和β都在( VN∪VT
)*中(即在V*中),β≠ε,A在VN中。这种定义与前边的定义等价。但它更能体现"上下文有关"这一术语,因为只有A出现在α1和α2的上下文中,才允许用β取代A。
设G=(VN,VT,P,S),若P中的每一个产生式α→β满足:α是一非
终结符,β∈( VN∪VT )*则此文法称为2型的或上下文无关的。有时将2型文法的产生式表示为形如:A→β其中A∈VN,也就是说用β取代非
终结符A时,与A所在的上下文无关,因此取名为上下文无关文法。
例4.1和例4.2中的文法都是上下文无关的,下面我们再给出一个例子(例4.4),例中的文法G是上下文无关文法,G的语言是由相同个数的a和b所组成的{a,b}*上的串。
设G=(VN,VT,P,S),若P中的每一个产生式的形式都是A→aB或A→a,其中A和B都是非
终结符,a是终结符,则G是3型文法或正规文法。
文法G定义为四元组(VN,VT,P,S )其中
VN:非终结符号(或语法实体,或变量)集;
VT:终结符号集;
P: 规则的集合;
VN,VT和P是 非空有穷集。
S:称作识别符号或开始符号的一个非
终结符,它至少要在一条产生式中作为左部出现。
VN和VT不含公共的元素,即VN ∩ VT = φ
用V表示VN ∪ VT ,称为文法G的字母表或字汇表