您的位置:首页 > 其它

软考笔记-编译原理-文法

2017-02-14 14:05 253 查看
文法(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型文法。

注意:上面例子中的大写字母表示的是非终结符,而小写字母表示的是终结符。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: