一、基本概念:
①字母表:
- 又称之为符号表,字母表∑是一个有穷符号集合。
- 符号:字母、数字、标点符号、……
- 实际举例:
- 二进制字母表:{ 0,1 }、ASCII字符集、Unicode字符集……
②字母表上的运算:
- 乘积:
- 字母表∑1和∑2的乘积:
- ∑1∑2 ={ab|a ∈ ∑1, b ∈ ∑2}。
- 实际举例:
- {0, 1} {a, b} ={0a, 0b, 1a, 1b}
- 字母表∑1和∑2的乘积:
- n次幂:
- 字母表∑的n次幂:
- 实际举例:
- {0, 1}3 ={0, 1} {0, 1} {0, 1}={000, 001, 010, 011, 100, 101, 110, 111}。
- 字母表∑的n次幂:
字母表的n次幂:长度为n的符号串构成的集合。
- 正闭包:
- 字母表∑的正闭包:
- ∑+ = ∑ ∪ ∑2 ∪ ∑3∪ ……
- 实际举例:
- {a, b, c, d }+ = {a, b, c, d,aa, ab, ac, ad, ba, bb, bc, bd, …,aaa, aab, aac, aad, aba, abb, abc, …}
- 字母表∑的正闭包:
字母表的正闭包:长度正数的符号串构成的集合.
- 克林闭包:
- 字母表∑的克林闭包:
- ∑* = ∑0 ∪∑+ =∑0 ∪ ∑ ∪ ∑2 ∪ ∑3∪ ……
- 实际举例:
- {a, b, c, d }* = {ε, a, b, c, d,aa, ab, ac, ad, ba, bb, bc, bd, …,aaa, aab, aac, aad, aba, abb, abc, …}
- 字母表∑的克林闭包:
字母表的克林闭包:任意符号串(长度可以为零)构成的集合.
③符号串:
-
定义:
- 设∑是一个字母表,∀x∈∑*,x称为是∑上的一个串。
- 串是字母表中符号的一个有穷序列。
- 设∑是一个字母表,∀x∈∑*,x称为是∑上的一个串。
-
其他关键定义:
- 串s的长度,通常记作|s|,是指s中符号的个数。
- 实际举例:|abc|=3.
- 空串是长度为0的串,用 ε表示。
- |ε|= 0.
- 串s的长度,通常记作|s|,是指s中符号的个数。
④符号串上的运算:
- 连接运算:
- 如果 x和y是串,那么x和y的连接是把y附加到x后面而形成的串,记作xy。
- 实际举例:如果 x=hello且 y=world,那么xy=helloworld.
- 空串是连接运算的单位元( identity);即,对于任何串s都有,εs = sε = s。
- 如果 x和y是串,那么x和y的连接是把y附加到x后面而形成的串,记作xy。
设x,y,z是三个字符串,如果 x=yz,则称y是x的前缀,z是x的后缀。
- 幂运算:
- 串s的幂运算:
- s1 = s0s = εs = s,s2 = ss,s3 = sss,……
- 实际举例:如果 s =bili,那么s1= bili,s2=bilibili,s3=bilibilibili,……
- 串s的幂运算:
串s的n次幂:将n个s连接起来。
二、文法的定义:
①文法的形式化定义:
G = ( V T , V N , P , S ) G=(V_T,V_N,P,S) G=(VT,VN,P,S)
- VT终结符集合:
- 终结符是文法所定义的语言的基本符号,有时也称为token。
- VN非终结符集合:
- 非终结符是用来表示语法成分的符号,有时也称为“ 语法变量”。
- 实际举例:VN = { <句子>,<名词短语>, <动词短语>, <名词>,…… }
VT ∩ VN=空集、VT ∪ VN = 文法符号集。
-
P产生式集合:
- 产生式描述了将终结符和非终结符组合成串的方法。
- 产生式的一般模式: α → β \alpha\rarr\beta α→β
- 读作:α定义为β。
- α∈(VT∪VN)+,且α中至少包含VN中的一个元素,则α称为产生式的头或左部。
- β∈(VT∪VN)* :称为产生式的体或右部。
- 读作:α定义为β。
-
S开始符号:
- S∈VN,开始符号表示的是该文法中最大的语法成分。
- 举例:S = <句子>.
- S∈VN,开始符号表示的是该文法中最大的语法成分。
S当然要属于VN(非终结符)了,要是属于终极符的话,那不开始即结束了吗!
②产生式的简写:
- 对于一组有相同左部的产生式:
α → β 1 , α → β 2 , … , α → β n \alpha\rarr\beta_1,\alpha\rarr\beta_2,…,\alpha\rarr\beta_n α→β1,α→β2,…,α→βn
- 可以简记为:
α → β 1 ∣ β 2 ∣ … ∣ β n \alpha\rarr\beta_1\vert\beta_2\vert…\vert\beta_n α→β1∣β2∣…∣βn
- 读作:α定义为β1,或者β2,…,或者βn ;β1,β2,…,βn称为α的候选式。
③符号约定:
-
终结符约定:
- 字母表中排在前面的小写字母,如 a、b、c……
- 运算符,如 +、*……
- 标点符号,如括号、逗号……
- 数字,0、1、. . . 、9……
- 粗体字符串,如id、if……
-
非终结符约定:
- 字母表中排在前面的大写字母,如A、B、 C
- 字母S。通常表示开始符号
- 小写、斜体的名字,如 expr、stmt等
- 代表程序构造的大写字母。如E(表达式)、T(项)和F(因子)
-
其他约定:
- 字母表中排在后面的大写字母(如X、Y、Z)表示文法符号(即终结符或非终结符)。
- 字母表中排在后面的小写字母(主要是u、v、. . . 、z)表示终结符号串(包括空串)。
- 小写希腊字母,如α、β、γ,表示文法符号串(包括空串)。
- 除非特别说明,第一个产生式的左部就是开始符号。
三、语言的定义:
①推导与归纳:
- 给定文法 G = ( V T , V N , P , S ) G=(V_T,V_N,P,S) G=(VT,VN,P,S),如果 α → β ∈ P \alpha\rarr\beta\in\space P α→β∈ P,那么可以将符号串那么可以将符号串 γ α δ γαδ γαδ中的 α α α替换为 β β β,也就是说,将 γ α δ γαδ γαδ重写为 γ β δ γβδ γβδ,记作 γ α δ ⟹ γ β δ γαδ\impliesγβδ γαδ⟹γβδ。此时就称文法中的符号串 γ α δ γαδ γαδ 直接推导出