1. 基本概念
- 字母表
- 一个有穷符号集合
- 例如:
- 二进制字母表
- ASCII字符集
- Unicode字符集
- 字母表上的运算
-
字母表 乘积
-
两个集合元素分布相乘
-
字母表的 n次幂
- 长度为0的符号串即为 没有符号的符号串 也称为 空串
-
字母表的正闭包
-
字母表的 克林闭包
-
在 正闭包 的基础上,添加一个 空串。长度可以为0
-
- 串
- 设∑是一个字母表, 对于任意x∈ ∑*, x称为是∑上的一个串
➢串是字母表中符号的一个有穷序列
➢串s的长度,通常记作|s|,是指s中符号的个数
➢例: |aab|=3
➢ 空串是长度为0的串,用 ε( epsilon) 表示
➢ |ε|= 0
- 设∑是一个字母表, 对于任意x∈ ∑*, x称为是∑上的一个串
- 如果 x和y是串,那么x和y的连接(concatenation)
是把y附加到x后面而形成的串,记作xy
➢ 例如,如果 x=dog且 y=house,那么xy=doghouse
➢ 空串是连接运算的单位元( identity),即,对于任
何串s都有, εs = sε = s- 设x,y,z是三个字符串,如果 x=yz,
则称y是x的前缀, z是x的后缀
- 设x,y,z是三个字符串,如果 x=yz,
- 串上的运算——幂
2.文法的定义
-
自然语言的例子——句子的构成规则
-
$G = (V_T , V_N , P , S ) $
-
V T V_T VT: 终结符集合
- 终结符( terminal symbol) 是文法所定义的语言的基本符号, 有时也称为token
- 例: V T V_T VT = { apple, boy, eat, little }
-
V N V_N VN: 非终结符集合
- 非终结符(nonterminal ) 是用来表示语法成分的符号,有时也称为“ 语法变量”
- 例如: V N V_N VN = { <句子>, <名词短语>, <动词短语>, <名词>, … }
-
注:$V_T∩V_N = Φ $ $V_T∪ V_N =文法符号集 $
-
P :产生式集合
-
产生式( production)描述了将终结符和非终结符组合成串的方法产生式的一般形式:
α → β α→β α→β
读作: α定义为β -
α ∈ ( V T ∪ V N ) + α∈ (V_T∪ V_N)^+ α∈(VT∪VN)+, 且 α α α中至少包含 V N V_N VN中的一个元素:称为产生式的头
(head ) 或左部(left side) -
β ∈ ( V T ∪ V N ) ∗ β∈ (V_T∪ V_N)* β∈(VT∪VN)∗ :称为产生式的体(body)或右部(right side)
-
上述最开始例子中每一个规则都是一个产生式
-
-
S : 开始符号
- S ∈ V N S∈ V_N S∈VN。 开始符号(start symbol ) 表示的是该文法中最大的语法成分
- 例: S = $ <句子> $
-
-
产生式的简写
-
符号约定:
-
文法符号串包括 终结符和非终结符
3.语言的定义
❓ 有了文法(语言规则),如何判定一个词串是否是满足文法的句子?
-
推导和归约
👌 有了文法(语言规则),如何判定某一词串是否是该语言的句子?
-
句型和句子
-
-
只有最后一个句型才能称为句子,因为它没有非终结符
-
-
-
语言的形式化定义
-
❓上式的算术表达式文法生成语言中可以包含无穷多个句子,而文法解决了无穷语言的有穷表示问题。
-
例子:
-
4.文 法 的 分 类
- Chomsky 文法分类体系
- 0型文法 (Type-0 Grammar)
- 1型文法 (Type-1 Grammar)
- 2型文法 (Type-2 Grammar)
- 3型文法 (Type-3 Grammar)
- 0型文法 (Type-0 Grammar)
-
- 上节课提到的属于 0型文法
-
1型文法 (Type-1 Grammar)
-
注意这里 1型文法 中 不包含空串产生式,因为 α \alpha α 必须包含一个非终结符
-
2型文法 (Type-2 Grammar)
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-smWwVF0B-1646389130591)(2.%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E8%AF%AD%E8%A8%80%E5%8F%8A%E5%85%B6%E6%96%87%E6%B3%95.assets/image-20220303153328936.png)]
-
之前标识符的文法举例属于 2型文法
-
2型文法左边是非终结符号,和上下文无关,属于也称作上下文无关文法
-
-
3型文法 (Type-3 Grammar)
-
右线性文法:要么是一个终结符 w w w,要么是终结符后添加一个非终结符号 B B B
-
第三章会详细介绍 正则文法能描述程序设计语言的多数单词
-
四种文法之间的关系 (如果不考虑空产生式的因素)
-
5.CFG的分析树
-
正则文法可以用来表示程序语言中的大多数单词,但是生成能力有限,描述不了程序语言中的句子构造。而CFG可以描述程序设计语言大部分语法构造,也是被研究的最多一种文法
-
分析树是推导的图形化表示
-
二义性文法的判定
-
(句型的)短语
-
- 直接短语一定是某产生式的右部 ,产生式的右部不一定是给定句型的直接短语,比如:
不是某棵高度为2的边缘,因为上图中的 高人、民生、活水 不是这个句子的直接短语
- 直接短语一定是某产生式的右部 ,产生式的右部不一定是给定句型的直接短语,比如:
-
-
二义性文法
-
如果一个文法可以为某个句子生成多棵分析树,则称这个文法是二义性的
-
大部分编译器都希望编译器不是二义性的,遇到歧义时,计算机无法进行确定的操作
-
-
二义性文法的判定
- 对于任意一个上下文无关文法,不存在一个算法,判定它是无二义性的;但能给出一组充分条件,满足这组充分条件的文法是无二义性的
- ➢满足,肯定无二义性
- ➢不满足,也未必就是有二义性的
- 对于任意一个上下文无关文法,不存在一个算法,判定它是无二义性的;但能给出一组充分条件,满足这组充分条件的文法是无二义性的