字母表
字母表概念:有穷符号集合 符号(字母,数字,标点符号)
例如二进制字母表{0,1}
字母表运算:乘积、n次幂、正闭包、克林闭包
文法定义
产生式的简写
推导和规约
句型:可含终结符也可含有非终结符(推导过程中的每一个语句都是)
句子:最终推导出的只含有终结符的语句
文法G生成的语言:由文法G的开始符号 s推导出的所有句子
文法的分类
¨0型(无限制文法):
¨1型(上下文有关):
¨ 2型(上下文无关):
¨3型(正规文法):
4个文法类的定义是逐渐增加限制的,因此每一种正规文法都是上下文无关的,每一种上下文无关文法都是上下文有关的,而每一种上下文有关文法都是0型文法。
四种文法之 关系是:包含关系.(原因:将产生式做进一步限制而定义的。
0型文法:(无限制文法/短语结构文法),左边至少包含一个非终结符
0型文法定义: α∈(VN∪VT)* ,且至少含一个VN
β∈(VN∪VT)*对产生式没有任何限制例如:A0→A0 , A1→B
0型文法说明:0型文法也称为短语文法。
一个非常重要的理论结果是,0型文法的能力相当于图灵机(Turing)。或者说,任何0型语言都是递归可枚举的;反之,递归可枚举集必定是一个0型语言。对0型文法产生式的形式作某些限制,以给出1,2和3型文法的定义。
1型文法(上下文有关文法context-sensitive): 对任一产生式α→β,都有|β|>=|α|, 仅仅 S→ε除外,产生式的形式描述:α1Aα2→α1βα2 (其中,α1、α2 β∈(VN∪VT)*,β≠ε,A∈VN)
即:A只有出现在α1α2的上下文中,才允许用β替换。 产生的语言称“上下文有关语言”但S不能出现在产生式的右部。
1型文法特点(对产生式符号数量进行限制):又称为上下文有关文法,
(1):式子左边可以有多个字符,但必须有一个非终结符
(2):式子右边可以有多个字符,可以是终结符,也可以是非终结符,但必须是有限个字符
(3):左边长度必须小于右边(\alpha \rightarrow \varepsilon例外)
2型文法(CFG)(对推导式左边的符号数量 继续进行限制):
对任一产生式α→β,都有α∈VN,β∈(VN∪VT)*产生式的形式描述:A→β(A∈VN) 即β取代A时,与A所处的上下文无关。产生的语言称“上下文无关语言”
2型文法:又称为上下文无关文法,
(1):式子左边只能有一个字符,而且必须是非终结符
(2):式子右边可以有多个字符,可以是终结符,也可以是非终结符,8但必须是有限个字符
2型文法如何判断:
第一点:与3型文法的第一点相同,即:左边必须有且仅有一个非终结符。
第二点:2型文法所有产生式的右边可以含有若干个终结符和非终结符(只要是有限的就行,没有个数限制)
3型文法:又称为正规文法(正规文法又包括左线性文法和右线性文法)每个产生式均为 “A→aB”或“A→a” —— 右线性
“A→Ba”或“A→a” —— 左线性
其中,A、B∈VN,a∈VT* 产生的语言称“正规语言”
例如:G[S]: S→0A | 0 A→1B | B B→1 | 0
3型文法遵循什么规范
第一点:左边必须只有一个字符,且必须是非终结符;
第二点:其右边最多只能有两个字符,且当有两个字符时必须有一个为终结符而另一个为非终结符。当右边只有一个字符时,此字符必须为终结符。
第三点:对于3型文法中的所有产生式,其右边有两个字符的产生式,这些产生式右边两个字符中终结符和非终结符的相对位置一定要固定,也就是说如果一个产生式右边的两个字符的排列是:终结符+非终结符,那么所有产生式右边只要有两个字符的,都必须前面是终结符而后面是非终结符。反之亦然,要么,就全是:非终结符+终结符
快速判断文法的方法
引用:
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型。
上下文无关文法分析树
短语
句子的二义性
消岐规则:就近匹配原则