语言及其文法
- 语言及其文法
- 基本概念
- 字母表
- 串
- 文法定义
- 语言的定义
- 推导
- 归约
- 句子和句型
- CFG分析树
- 构造树分析
- 短语
- 二义性
语言及其文法
基本概念
字母表
字母表(alphabet):字母表习是一个有穷符号集合。符号:字母、数字、标点符号、…
如二进制字母表:{0, 1}
ASCII字母表
Unicode字母表
字母表的运算
- 字母表∑ 1和∑ 2的乘积(product)
- 字母表∑ 的n次幂(power)(长度为n的符号串构成的集合)
- 字母表∑ 的正闭包(positive closure)
- ∑ + = ∑ ∪∑ 2∪∑ 3…(长度为正数的符号串构成的集合, 其中∑ 2中的2表示幂级)
- 字母表的克林闭包(Kleene closure)
- ∑ * = ∑ 0 ∪∑ +(任意符号串构成的集合)
串
串(String)
- 设∑ 是一个字母表,x∈∑*,则x称为是∑上的一个串(串是字母表中符号的一个有穷序列)
- 串s的长度,通常记作|s|,是指s中符号的个数
- 空串是长度为0的串,用ε(epsilon)表示
连接:如果x和y是串,那么x和y的连接(concatenation)是把y附加到x后面而形成的串,记作xy
空串是连接运算的单位元( identity),即,对于任何串s都有,Sε=εS=S
幂,将n个S进行连接
文法定义
G=(V(T),V(x),P,S )
- V(T):终结符集合:终结符(terminal symbol)是文法所定义的语言的基本符号,有时也称为token
- V(T) = {a, b, c, d}
- V(x):非终结符集合:非终结符(nonterminal)是用来表示语法成分的符号,有时也称为“语法变量”
- V(x) = {<动宾短语>,<句子>}
- P:产生式集合。产生式(production)描述了将终结符和非终结符组合成串的方法
- 产生式的一般形式:α→β,读作:α定义为β
- a∈(V(T),∪ V(x)),且α中至少包含V(x)中的一个元素:称为产生式的头(head)或左部(left side)
- b∈(V(T)U V(x))^:称为产生式的体(body)或右部(right side)
- S:S ∈V(x)。开始符号表示的是该文法中最大的语法成分
候选式:α→β1 | β2 | β3 | β4…
V(T)∩ V(x) = 0
V(T)∪ V(x) = 文法符号集
符号约定:
下述符号是终结符
- 字母表中排在前面的小写字母
- 运算符
- 标点符号
- 数字
- 粗体字符串
下述符号是非终结符
- 字母表中排在前面的大写字母
- 字母S,通常表示开始符号
- 小写、斜体的字母
- 代表程序构造的大写字母
字母表中排在后面的大写字母表示文法符号(既可以是终结符也可以是非终结符)
字母表中排在后面的小写字母表示终结符号串(包括空串)
小写希腊字母,表示文法字符串(包括空串)
语言的定义
推导
直接推导:
存在产生式a→b,字符串acd,将其重写为bcd,记作acd→bcd,此时,称文法符号串acd直接推导出bcd(简而言之,就是用表达式的右边替换表达式的左边)
经过正数推导:
a0→a1,a1→a2…a(n-1)→a(n),称作a0→(n)a(n)
归约
将推导反转即可,即用表达式的左边替换表达式的右边
句子和句型
句子:不包含非终结符
句型:可以包含终结符,也可以包含非终结符,也可能是空串
CFG分析树
构造树分析
- 根节点的标号为文法开始符号
- 内部结点表示对一个产生式A→B的应用,该结点的标号是此产生式左部A。该结点的子结点的标号从左到右构成了产生式的右部β
- 叶结点的标号既可以是非终结符,也可以是终结符。从左到右排列叶节点得到的符号串称为是这棵树的产出(yield )或边缘(frontier)
短语
给定一个句型,其分析树中的每一棵子树的边缘称为该句型的一个短语(phrase)
如果子树只有父子两代结点,那么这棵子树的边缘称为该句型的一个直接短语(immediate phrase)
二义性
对于任意一个上下文无关文法,不存在一个算法,判定它是无二义性的;但能给出一组充分条件,满足这组充分条件的文法是无二义性的
- 满足,肯定无二义性
- 不满足,也未必就是二义性