基本概念
字母表
字母表∑是一个有穷的符号集合
符号包括: 字母,数字,标点符号
字母表的运算包含4种:乘积、n次幂、正闭包、克林闭包
乘积:把头一个闭包与后面的闭包的每一项相乘,以此类推。。。
n次幂:就是把乘积里的每一个闭包,都替换成相同的闭包,几次幂就几个
正闭包:每一个n次幂都添加到一个闭包里头,而且幂必须大于零
克林闭包:每一个n次幂都添加到一个闭包里头,而且幂可以为零
串
字母表里面的一项就是一个串
串主要有连接运算和幂运算
文法定义
文法里主要有两种符号:语言基本符号 and 语法成分
<形容词> : 语法成分
little :语言基本符号
<形容词> -> little
文法的形式化定义
文法的表示形式
G = (Vt , Vn , P , S)
Vt:终结符(terminal symbol) 集合, 主要由 基本符号构成
Vn: 非终结符(nonterminal) 集合,主要由语法成分构成
P : 产生式 集合,定义语法规则,各种终结符与非终结符,是如何产生或者生成的
S : 开始符号,该文法里头最大的语法成分,语法就是由这个S开始,推出后面的最小项(句子), 就是具体的语句
在终结符集合与非终结符集合不引起歧义的前提下,可以只写产生式
当产生式的左部都一样的时候,可以把右部合在一起,中间用竖杠(|)隔开
符号的约定
终结符:一般为小写英文字母
非终结符:一般为大写英文字母
文法符号:终结符 & 非终结符
X,Y,Z 和 α, β, γ 为文法符号
如何判定一个句子是否符合文法
有两种方式:
1.推导
2.归约
推导是用产生式的右部替换左部
归约式用产生式的左部替换右部
因此,推导是从生成语言的角度去判断,
归约是从识别的角度去判断
推倒出来的式子,叫做 句型
如果不包含非终结符的话,就叫做句子
由文法G的开始符号S所推导出来的所有句子的集合,称为文法G生成的语言,记为L(G)
文法的分类
0型文法
1型文法
2型文法
3型文法
α -> β
0型文法:α至少包含一个非终结符
1型文法:α的符号个数少于等于β ,|α| <= |β|
2型文法:α必须是非终结符
3型文法:又叫 正则文法
右线性文法 :A -> wB 或A->w
左线性文法 :A -> Bw 或A->w
四种文法逐级限制,逐级包含
CFG(上下文无关文法)分析树
树的子节点为边缘
每一棵树的子节点为一个短语
只有父子两代节点的为直接短语
二义性文法
如果一个文法可以生成出多棵分析树,则该文法是二义性的
当给定一组充分条件,例如上边的if-else,规定离哪个if近的,该else就属于这个if,
则该文法就不存在二义性。
不满足,则存在二义性。