2.1. 符号串与语言
1. 字母表
定义
字母表 Σ 是一个有穷符号集合
字母表上的运算
- 乘积
- Σ1Σ2={ab∣a∈Σ1,b∈Σ2}
- n 次幂
- Σ0={ε}
- Σn=Σn−1Σ,n⩾1
- 即为长度为 n 的符号串构成的集合
- 正闭包
- Σ+=Σ∪Σ2∪Σ3∪⋯
- 闭包
- Σ∗=Σ0∪Σ∪Σ2∪Σ3∪⋯
2. 串
定义
- 设 Σ 为一个字母表,∀x∈Σ∗,x 称为 Σ 上的一个串。
- 串的长度 ∣s∣,指符号的个数
- 空串 ∣ε∣
连接
x 和 y 是串,则 x 和 y 的连接—— xy,对于非空不相等串有 xy=yx
空串是连接运算的单位元,εs=sε=s
幂
{s0=εsn=sn−1s,n⩾1
2.2. 文法定义
1. 文法的形式化定义
文法
G=(VT,VN,P,Z)
- VT 终结符集合,为非空有穷集合
- 终结符是文法所定义的语言的基本符号,有时也称为 token
- VN 非终结符集合,为非空有穷集合
- 非终结符有时也称为“语法变量”
- VT∩VN=∅
- VT∪VN 文法符集合
- P 产生式集合
- 产生式描述了将终结符和非终结符组成串的方法
- 产生式的一般形式 α→β 或 α::=β,读作 α 定义为 β
- α∈(VT∪VN)+ 且 α 中至少包含 VN 中的一个元素,称为产生式的头或左部
- β∈(VT∪VN)∗ 称为产生式的体或者右部
- Z 开始符号或识别符号
不引起歧义的前提下,可以只写产生式
产生式的简写
对一组有相同左部的产生式
α::=β1,α::=β2,⋯,α::=βn
可以简写为
α::=β1∣β2∣⋯∣βn
βi(i=1,2,⋯,n) 称为 α 的候选式
2. 语言的形式化定义
推导与归约
给定文法 G=(VT,VN,P,Z),如果 α→β∈P,那么可以将符号串 γαδ 中 α 替换为 β,即将 γαδ 重写为 γβδ 记作
γαδ⇒γβδ
称文法中的符号串 γαδ 直接推导出 γβδ
- 其中,从 γαδ 推导出γβδ 只用了一次推导,称之为直接推导,或者称γβδ 直接归约到 γαδ
简言之,用产生式右部替换产生式左部
若存在推导序列
α0⇒α1⇒α2⇒⋯⇒αn
称串 α0 经过 n 步推导出 αn 可简记为 α0⇒nαn,这个序列是一个从 α0 到 αn 的长度为 n 的推导
- α⇒0α
- α0⇒+αn 表示经过正数步推导
- α0⇒∗αn 表示经过若干(可以是 0)步推导
归约是推导的逆过程
句型和句子
- 如果 Z⇒∗α,α∈(VT∪VN)∗,则称 α 是文法 G 的一个句型
- 一个句型中既可包含终结符,又可包含非终结符,也可能是空串
- 如果 Z⇒∗α,α∈VT∗,则称 α 是 G 的一个句子
Note
语言
由文法 G 的开始符号 Z 推导出的所有句子构成的集合称为文法 G 生成的语言,记为 L(G)
L(G)={x∣Z⇒+x,x∈VT∗}
由语言的定义可知,当文法给定时,语言也就确定了。语言 L(G) 是 VT⋅ 的子集,L(G) 中的每个符号均由非终结符组成,且该符号串能由 Z 推导出来。
3. 短语 直接短语 句柄
设 G[Z] 是一个文法,假定 αβδ 是 G 的一个句型,如果有
Z⇒+αAδ,A⇒+β
则称 β 是句型 αβδ 相对于非终结符 A 的短语。特别的,如果有 A 直接推导到 β,则称 β 是句型 αβδ 相对于产生式规则 A→β 的直接短语,一个句型的最左直接短语称为该句型的句柄。
Caution
例 设有文法 G[E]
ETF→E+T∣E−T∣T→T∗F∣T/F∣F→(E)∣i
假设句型 F−T⋅(E−T) 的推导过程
E⇒E−T⇒E−T∗F⇒E−T∗(E)⇒E−T∗(E−T)⇒T−T∗(E−T)⇒F−T∗(E−T)
语法分析树如下
其中
- 最左边的 F 为句柄
- 短语有 {F,E−T,(E−T),T⋅(E−T),F−T⋅(E−T) }
- 直接短语有 {F,E−T }
4. 规范推导和规范归约
一般最右推导为规范推导,最左归约为规范归约
- 最右推导的逆过程为最左归约
- 最左推导的逆过程为最右归约
最右推导就类似如下递归
2.3. 语法分析树与文法的二义性
1. 语法分析树
例子见上面
有助于理解一个句子语法结构的层次
G[Z]=(VN,VT,P,Z) 是一个上下文无关文法
- 根节点标记为 Z
- 根节点外的每一个节点也有一个标记,是 VN∪VT∪{ε} 中的符号
- 每一个内部节点的标记 A 必在 VN 中
- 若某个内部节点标记为 A,其孩子节点的标记从左到右分别为 X1,X2,⋯Xn,则 A→X1X2⋯Xn 必为 P 中的一条产生式规则
- 若结点有标记 ε,则该节点为叶子,且是它父亲唯一的孩子
对于文法 G[E]
ETF→E+T∣E−T∣T→T∗F∣T/F∣F→(E)∣i
可以发现,先有的规则,运算符优先级更低;而对应到二叉树中,下层运算未结束,上层的运算不能进行。
2. 文法的二义性
如果一个文法存在某个句子对应两棵不同的语法树,则这个文法是二义的。即,若一个文法中存在某个句子,它有两个不同的最左(右)推导,则它是二义的。
例 设 G[E]
E→i∣E+E∣E∗E∣(E)
关于 i⋅i+i 有两种不同的最右推导
从该例来看,因为不同优先级的运算符都写在了一个推导语句中,前面提到了规则写在前面的优先级更低一些,此处的二义性就源自混淆了优先级。
3. 二义性的消除
- 改写原有的文法,构造一个等价的新文法,把排除二义性的规则合并到原文法中
- 不改变原有文法,附加限制性条件
4. 文法的化简
- 若一个非终结符不能推导出终结符号串,则该非终结符是无用的
- 若一个符号不能出现在文法的任何句型中,则该符号是无用的
文法化简思路源于语言的生成
- 从识别符号开始进行推导,若推导出的某句型包括某个不能推导出终结符号的非终结符,则删除包括该非终结符号的所有产生式规则
- 从终结符号逆向归约,若归约得到的某个非终结符不能归约到文法的符号,则删除包括该非终结符的所有产生式规则
- 删除不能出现在句型中的所有符号对应的产生式规则
5. 语言的分类
文法包含的广泛程度 0>1>2>3
0 型文法
若文法 G[Z]=(VN,VT,P,Z) 中的每个产生式规则为如下形式:
α→β
式中,α∈(VT∪VN)∗ 且至少包含一个非终结符号,而 β∈(VT∪VN)∗ 则 G[Z] 为 0 型文法
0 型文法相当于图灵机,未加任何限制,识别能力最强
1 型文法(上下文敏感文法)
若文法 G[Z]=(VN,VT,P,Z) 中的每个产生式规则为如下形式:
αAβ→αvβ
式中,α,β∈(VN∪VT)∗,A∈VN,v∈(VT∪VN)+,则 G[Z] 为 1 型文法
2 型文法(上下文无关文法)
若文法 G[Z]=(VN,VT,P,Z) 中的每个产生式规则为如下形式:
A→v
式中,A∈VN,v∈(VT∪VN)+,则 G[Z] 为 2 型文法
3 型文法(正规文法)
若文法 G[Z]=(VN,VT,P,Z) 中的每个产生式规则为如下形式:
A→αBorA→α
式中,A,B∈VN,α∈VT,则 G[Z] 为右线性文法
若文法 G[Z]=(VN,VT,P,Z) 中的每个产生式规则为如下形式:
A→BαorA→α
式中,A,B∈VN,α∈VT,则 G[Z] 为左线性文法