编译原理学习笔记2

字母表(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)


符号约定:

下述符号是终结符

  • 字母表中排在前面的小写字母,如 a,b,c
  • 运算符,如+,*等
  • 标点符号,如括号,逗号等
  • 数字0,1,……9
  • 粗体字符串,如if,id

下述符号是非终结符

  • 字母表中排在前面的大写字母,如A,B,C
  • 字母S。常表示开始符合
  • 小写、斜体的名字
  • 代表程序构造的大写字母。如E(表达式)、T(项)和F(因子)

字母表中排在后面的大写字母(如X,Y,Z)表示文法符号(即终结符或非终结符)

字母表中排在后面的小写字母(主要是u,v,……z)表示终结符号串(包括空串)

小写希腊字母,如α、β、γ,表示文法符号串(包括空串)

除非特别说明,第一个产生式的左部就是开始符号

你可能感兴趣的:(编译原理)