文法(Grammar):
G=(Vt,Vn,S,P)
Vt是一个非空有限的符号集合,它的每个元素称为终结符号(Terminal)
Vn是一个非空有限的符号集合,它的每个元素称为非终结符号(Non-Terminal)
S∈Vn,称为文法G的开始符号
P是一个非空有限集合,它的元素称为产生式。
Vt∩Vn=∅
产生式,其形式为α→β,α称为产生式的左部,β称为产生式的右部,符号“→”表示“定义为”,并且α、β∈(Vt∪Vn) *,α≠ε,即α、β是由终结符和非终结符组成的符号串。
开始符S必须至少在某一产生式的左部出现一次。
另外可以对形式α→β,α→γ的产生式缩写为α→β|γ,以方便书写。
解释:
(Vt∪Vn) *:也就是Vt∪Vn的Kleene闭包
α≠ε:α不等于空符号串
用小写字母代表终结符,如:abc……,不能被拆分
用大写字母代表非终结符,如:ASBX……,可以被拆分
0型文法
设G=(Vn,Vt,P,S),
Vn :非终结符集
Vt :终结符集
P:产生式集合(规则集合)
S:开始符号(识别符号)
如果它的每个产生式α→β是这样一种结构:
α∈(Vn∪Vt)*且至少含有一个非终结符,而β∈(Vn∪Vt)*,
则G是一个0型文法。0型文法也称短语文法。一个非常重要的理论结果是:0型文法的能力相当于图灵机(Turing)。或者说,任何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、B∈Vn,a∈Vt*。
如有: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型文法。
注意:上面例子中的大写字母表示的是非终结符,而小写字母表示的是终结符。