字母表(Alphabet):
字母表∑是一个有穷符号集合(符号:字母、数字、标点符号……)
字母表上的运算:
1、字母表∑1和∑2得乘积(product)
∑1∑2={ ab |a∈ ∑1, b∈ ∑2}
例: { 0, 1} { a, b} ={0 a, 0 b, 1 a, 1 b}
2、字母表∑得n次幂(power)
∑^0 ={ ε }
∑^n=∑n-1 ∑ , n ≥ 1
例:{0,1}^3={0,1} {0,1} {0,1}={000,001,010,011,100,101,110,111}
字母表的n次幂:长度为n的符号串构成的集合
3、字母表∑的正闭包(positive closure)
∑+ = ∑ ∪ ∑2 ∪ ∑3 ∪ …
例:{a,b,c,d}^+ = {a,b,c,d,aa,ab,ac,ad,ba,bb,……aaa,aab,aac……}
字母表的正闭包:长度正数的符号串构成的集合
4、字母表∑的克林闭包(Kleene closure)
∑*= ∑0 ∪ ∑+ = ∑0 ∪ ∑ ∪ ∑2 ∪ ∑3 ∪ …
例:{a,b,c,d}* = {ε,a,b,c,d,aa,ab,ac,ad,ba,bb,……aaa,aab,aac……}
字母表的克林闭包:任意符号串(长度可以为零)构成的集合
串(String):
设∑是一个字母表,对任意x∈∑*,x称为是∑上的一个串(串是字母表中符号的一个有穷序列
串s的长度,通常记作|s|,是指s中的符号的个数
空串是长度为0的串,用ε(epsilon)表示(|ε|= 0)
串上的运算——连接:
如果把x和y是串,那么x和y的连接(concatenation)是把y附加到x后面而形成的串,记作xy
空串是连接运算的单位元(identity),即,对任何串s都有,εs=sε=s
设x,y,z是三个字符串,如果x=yz,则称y是x的前缀,z是x的后缀
串上的运算——幂:
串s的幂运算
s^0 = s
s^n = s^(n-1)s n>=1
即:s^1= s^0s=εs = s,s^2= ss ,s3= sss ,…
串s的n次幂:将n个s连接起来
文法的形式化定义:
G=(VT,VN,P,S)
VT:终结符集合
终结符(terminal symbol)是文法所定义的语言的基本符合,有时也成为token
VN:非终结符集合
非终结符(nonterminal)是用来表示语法成分的符号,有时也称为“语法变量”
P:产生式集合
产生式(production)描述了将终结符和非终结符组成串的方法产生式的一般形式:α->β(读作:α定义为β)
α∈(VT∪VN)^+,且α中至少包含VN中的一个元素:称为产生式的头(head(或左部(left side)
β∈(VT∪VN)*:称为产生式的体(body)或右部(right side)
S:开始符合
S∈VN。开始符合(start symbol)表示的是该文件中最大的语法成分
(VT∩VN=Φ VT∪VN:文法符号集)
产生式的简写:
对一组有相同左部的α产生式 α→β1, α→β2 , … α→βn可以简记为:α→β1| β2| … |βn(读作: α定义为 β1,或者 β2,…,或者 βn)
β1,β2,…,βn称为 α的候选式 (Candidate)
符号约定:
下述符号是终结符
下述符号是非终结符
字母表中排在后面的大写字母(如X,Y,Z)表示文法符号(即终结符或非终结符)
字母表中排在后面的小写字母(主要是u,v,……z)表示终结符号串(包括空串)
小写希腊字母,如α、β、γ,表示文法符号串(包括空串)
除非特别说明,第一个产生式的左部就是开始符号