形式语言
1. 关于语言的定义
人类所特有的用来表达意思、交流思想的工具,是一种特殊的社会现象,由语音、词汇和语法构成一定的系统。
2. 语言描述的三种途径
穷举法— 只适合句子数目有限的语言。
语法描述— 生成语言中合格的句子。
自动机— 对输入的句子进行检验,区别哪些是语言中的句子,哪些不是语言中的句子。
3. 形式语法
形式语法是一个四元组G=(N,Σ,P,S),其中,N是非终结符(non-terminal symbol)的有限集合(有时也称变量集或句法种类集);Σ是终结符号(terminal symbol)的有限集合,N∩Σ=∅;V=N∪Σ称为总词汇表(vocabulary);P是一组重写规则的有限集合:P={α→β},其中,α,β是由V中元素构成的串,但是,α中至少应含有一个非终结符号;S∈N称为句子符或初始符。
4. 推导的定义
5. 最左推导、最右推导和规范推导
约定每步推导中只改写最左边的那个非终结符,这种推导称为“最左推导”。
约定每步推导中只改写最右边的那个非终结符,这种推导称为“最右推导”。
最右推导也称规范推导。
6. 句型与句子
文法G=(N,Σ,P,S)的句子形式(句型)通过如下递归方式定义:
(1)S是一个句子形式;
(2)如果γβα是一个句子形式,且β→δ是P中的产生式,那么,γδα也是一个句子形式。
对于文法G,不含非终结符的句子形式称为G生成的句子。由文法G生成的语言(或称G识别的语言)是指G生成的所有句子的集合,记作
7. 正则文法 Regular grammar (3型文法)
正则文法也是最严厉的文法
如果文法G的规则集P中所有规则均满足如下形式:A→Bx,或A→x,其中,A,B∈N, x∈Σ,则称该文法G为正则文法,或称3型文法。
在这种书写格式中,由于规则右部的非终结符号(如果有的话)出现在最左边,所以,这种形式的正则文法又叫左线性正则文法。类似地,如果一正则文法所有含非终结符号的规则形式为A→xB,则该文法称为右线性正则文法。
例3-2 G=(N,Σ,P,S),其中,N={S,A,B},Σ={a, b},
P:
(1)S→aA
(2)A→aA
(3)A→bbB
(4)B→bB
(5)B→b
该文法形式上似乎不满足上述正则文法定义的条件(第3条规则有两个非终止符),但规则(3)可以改写成如下两条规则:
A→bB′
B′→bB
因此,该文法修改后为右线性正则文法,它所识别的语言为:
L(G)={a^n b^m},n≥1,m≥3。
8. 上下文无关文法(context-free grammar, CFG)(2型文法)
如果文法G的规则集P中所有规则均满足如下形式:A→α,其中,A∈N,α∈(N∪Σ)*,则称文法G为上下文无关文法(context-free grammar, CFG),或称2型文法。
例3-3 G=(N,Σ,P,S),其中,N={S,A,B,C},Σ={a,b, c},
P:(1)S→ABC
(2)A→aA|a
(3)B→bB|b
(4)C→BA|c
显然,该文法为上下文无关文法,可识别的语言为
L(G)={a^n b^m a^k c^α},n≥1,m≥1,k≥0,α∈{0,1}
从定义中我们可以看出,2型文法比3型文法少了一层限制,其规则右端的格式没有约束。也就是说,规则左部的非终结符可以被改写成任何形式。
9. 上下文有关文法(context-sensitive grammar, CSG)(1 型文法)
如果文法G的规则集P中所有规则满足如下形式:αAβ→αγβ,其中,A∈N,α,β,γ∈(N∪Σ)* ,且γ至少包含一个字符,则称文法G为上下文有关文法(context-sensitive grammar, CSG),或称1型文法。
从上述定义可以看出,字符串αAβ中的A被改写成γ时需要有上文语境α和下文语境β,这体现了上下文相关的含义。当然,α和β可以为空字符ε,如果α和β同时为空时,1型文法变成了2型文法。也就是说,2型文法是1型文法的特例。因此,1型文法可识别的语言集合比2型文法可识别的语言集合更大。
例3-4 G=(N,Σ,P,S),其中,N={S,A,B,C},Σ={a,b, c},
P:(1)S→ABC
(2)A→aA|a
(3)B→bB|b
(4)BC→Bcc
根据第(4)条规则可以断定该文法为上下文有关文法,所识别的语言为L(G)={a^n b^m c^2},n≥1,m≥1。
通过这个例子我们可以看到,规则左部不一定仅为一个非终结符,可以有上下文限制,但是,规则右端的长度不小于规则左部的长度。因此,这种文法又有另一种定义:如果文法G为上下文有关文法,当且仅当x→y,x∈(N∪Σ)+,y∈(N∪Σ)*,并且,|y|≥|x|。注意,在定义中,空字符ε不可出现在1、2、3型文法的产生式中,否则,第二种定义不成立。不过在形式语言理论中,我们可以把1、2、3型文法的定义扩充到允许x→ε类型的产生式存在。
10. 0型文法 无约束文法
如果文法G的规则集P中所有规则满足如下形式:α→β,其中,α∈(N∪Σ)+,β∈(N∪Σ)*,则称G为无约束文法或无限制重写系统,也称0型文法。
根据上述定义我们不难看出,从0型文法到3型文法,对规则的约束越来越多,每一个正则文法都是上下文无关文法,每一个上下无关文法都是上下文有关文法,而每一个上下文有关文法都可以认为是0型文法。因此,从0型文法到3型文法所识别的语言集合越来越小。
如果用G0、G1、G2和G3分别表示0型、1型、2型和3型文法,那么 L(G3) ⊆ L(G2) ⊆ L(G1) ⊆ L(G0)。
我们约定,如果一个文法的产生式集合P中,有分属于不同类型文法的产生式,则把属于包含最广类型文法的那条产生式所属的类型作为这个文法的类型。比如说,某个文法的全部规则分别属于1型文法、2型文法和3型文法,则我们称这个文法为1型文法。同理,如果一种语言能够由几种文法所产生,则把这种语言称为在这几种文法中受限制最多的那种文法所产生的语言。
只要你能描述出来,都属于这个类型,即0型。
11. 4种文法的区别
4种文法的联系
4种文法判别
1.先来看看3型文法的判断规则
①:左边必须只有一个字符,且必须是非终结符;
②:其右边最多只能有两个字符,要么是一个非终结符+终结符(终结符+非终结符),要么是一个终结符。
③:对于3型文法中的所有产生式,若其右边有两个字符的产生式,这些产生式右边两个字符中终结符和非终结符的相对位置一定要固定,也就是说如果一个产生式右边的两个字符的排列是:终结符+非终结符,那么所有产生式右边只要有两个字符的,都必须满足终结符+非终结符。反之亦然。
2.再看看2型文法判断规则
①:与3型文法的第一点相同,即:左边必须有且仅有一个非终结符。
②:2型文法所有产生式的右边可以含有若干个终结符和非终结符(只要是有限的就行,没有个数限制)。
3.最后再看看1型文法判断规则
①:1型文法所有产生式左边可以含有一个、两个或两个以上的字符,但其中必须至少有一个非终结符。
②:与2型文法第二点相同,但需要满足|α|≤|β|.
- 0型文法不需要判断了,一般的文法都是0型文法。 O(∩_∩)O
12. 上下文无关文法的二义性
一个文法G,如果存在某个句子有不只一棵分析树与之对应,那么称这个文法是二义的。