(一) 字母表(Alphabet)
定义:字母表∑是一个有穷符号集合
符号:字 母、数符号:字 母、数、标点符号、 标点符号、 …
说明:为保证排版兼容问题,未使用 MD,HTML 等语法,本文中上标使用 ^ 下标使用 _ 例如:2^3 , X_n
(1) 字母表上的运算
下面的几种运算,可以先看例子,再回过头看上面的定义,就其实很简单了
A:字母表 ∑1 和 ∑2 的乘积 ( product)
∑1∑2={ ab | a∈ ∑1, b∈ ∑2}
例: { 0, 1} {a, b} = {0a, 0b, 1a, 1b}
B:字母表 ∑ 的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}
通过举例看到字母表(数字)的3次方,最后的结果,就是一些长度为3的数字串的集合
结论:字母表的n次幂:长度为n的符号串构成的集合
C:字母表 ∑ 的正闭包(positive closure)
∑+ = ∑ ∪ ∑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, …...}
结论:字母表的正闭包:长度正数的符号串构成的集合
D:字母表 ∑ 的克林闭包(Kleene closure)
∑ = ∑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, …...}
注:∑0 ={ ε }
总结:字母表的克林闭包:任意符号串(长度可以为零)构成的集合
(2) 串
设∑是一个字母表,任意x∈∑*,x称为是 ∑上的一个串
串是字母表中符号的一个有穷序列
串s的长度,通常记作|s|,是指s中符号的个数
例:|aab| = 3
空串是长度为0的串,用 ε (spsilon) 表示
|ε| = 0
A:串上的运算-连接
如果 x 和 y 是串,那么 x 和 y 的连接是把 y 附加到 x 后面形成的串,记作 xy
例: x = dog ,y = house ,xy = doghouse
空串是连接运算的单位元( identity),即,对于任何串 s 都有,εs = sε = s
设x,y,z,是三个字符串,如果x = yz,则称y是x的前缀,z是x的后缀
B:串上的运算-幂
s0= ε
sn = s^(n-1)s, n ≥1
s1 = s0 s = εs = s,s2 = ss,s3 = sss,…
例:如果 s =ba,那么s1= ba,s2=baba, s3=bababa,…
结论:串s的n次幂:将n个s连接起来
(二) 文法
(1) 文法的形式化定义
G = (V_T , V_N , P , S )
A:V_T:终结符集合
终结