- 形式语言自动机课程笔记
- 学到编译原理的时候用到了文法相关概念,复习自动机正好把以前的笔记整理一下也贴上来
一、集合及集合的基本运算
(0)集合
集合(set)
:一组可区分的对象的全体称为集合,而这些对象称为集合的元素(element)
- 集合的描述:
描述方式 | 适用 | 规则 | 例子 |
---|---|---|---|
列举法 | 元素个数较少的集合 | 直接把元素全部列出 | S={a,b,c,d} |
形式化描述 | 元素个数较多的集合特别是由无穷多个元素组成的集合 | {x│P(x)} | S={n│n是偶数} |
(1)交并差补
一张图不解释
(2)幂集
幂集
:集合A的幂集为A的所有子集之集,记 2 A 2^A 2A- 例:
- A={a,b,c},
则 2 A = { B ∣ B ⊆ A } = { Θ , { a } , { b } , { c } , { a , b } , { a , c } , { b , c } , { a , b , c } } 2^A= \{ B∣B \subseteq A\}=\{ \Theta ,\{a\},\{b\},\{c\},\{a,b\},\{a,c\},\{b,c\},\{a,b,c\}\} 2A={B∣B⊆A}={Θ,{a},{b},{c},{a,b},{a,c},{b,c},{a,b,c}}
- A={a,b,c},
(3)笛卡尔积
笛卡尔积
:集合的笛卡尔积 A × B = { ( a , b ) ∣ a ∈ A , b ∈ B } A\times B=\{(a,b)|a∈A,b∈B\} A×B={(a,b)∣a∈A,b∈B},其中(a,b)称为有序对
- 注意:有序对有先后关系,所以一般 A × B ≠ B × A A\times B \neq B\times A A×B=B×A
- 例:
- 设 A={1,2 },B = {a,b,c},
则 A × B = { ( 1 , a ) , ( 1 , b ) , ( 1 , c ) , ( 2 , a ) , ( 2 , b ) , ( 2 , c ) } A\times B=\{ (1, a), (1, b), (1, c), (2, a), (2, b), (2, c) \} A×B={(1,a),(1,b),(1,c),(2,a),(2,b),(2,c)}
- 设 A={1,2 },B = {a,b,c},
(4)关系
-
关系
R: 设 有 集 合 A , B , a ∈ A , b ∈ B 设有集合A,B,a∈A,b∈B 设有集合A,B,a∈A,b∈B- 由集合A到集合B的关系,是AxB的任何子集。
- (a,b)∈R,写作
aRb
。 - 本质上是有序对的集合,看作A到B的一个映射
- 若A=B,称A上的关系;否则称A到B的关系
-
关系的k次积
R k R^k Rk: 设 有 集 合 A , a 1 , a 2 ∈ A 设有集合A,a_1,a_2∈A 设有集合A,a1,a2∈A- 递归定义:
- a 1 R 1 a 2 a_1R^1a_2 a1R1a2 <=> a 1 R a 2 a_1R a_2 a1Ra2
- a 1 R i a 2 a_1R^ia_2 a1Ria2 <=> 存 在 b ∈ A , 使 a 1 R b 且 b R i − 1 a 2 , ( i = 2 , 3.. k ) 存在b \in A,使a_1Rb且bR^{i-1}a_2, (i=2,3..k) 存在b∈A,使a1Rb且bRi−1a2,(i=2,3..k)
- 看作在A上映射了k-1次
- 递归定义:
-
关系的传递闭包
R + R^+ R+: 设 有 集 合 A , a 1 , a 2 ∈ A 设有集合A,a_1,a_2∈A 设有集合A,a1,a2∈A-
a
1
R
+
a
2
a_1R^+a_2
a1R+a2 <=>
a
1
R
i
a
2
(
i
=
1
,
2
,
3..
)
a_1R^ia_2 (i=1,2,3..)
a1Ria2(i=1,2,3..)
即 R + = ∪ i ≥ 1 R i R^+=\cup_{i≥1}R^i R+=∪i≥1Ri - 看作在A上映射了任意多次(不含0次)
-
a
1
R
+
a
2
a_1R^+a_2
a1R+a2 <=>
a
1
R
i
a
2
(
i
=
1
,
2
,
3..
)
a_1R^ia_2 (i=1,2,3..)
a1Ria2(i=1,2,3..)
-
关系的自反传递闭包
R ∗ R^* R∗: 设 有 集 合 A , a 1 , a 2 ∈ A 设有集合A,a_1,a_2∈A 设有集合A,a1,a2∈A- 规定 R 0 R^0 R0: a 1 R 0 a 2 < = > a 1 = a 2 a_1R^0a_2 <=> a_1=a_2 a1R0a2<=>a1=a2,则 R ∗ = R 0 ∪ R + R^*=R^0\cup R^+ R∗=R0∪R+
- 只比R+多一些形如(a,a)的,看作看作在A上映射了任意多次,(含0次)
二、字母表,字符串和语言
(1)字母表
字母表(Σ)
:字母符号的有限非空集。(这里的字母符号不是指狭义的英文字符,可以是数字,也可以加号下划线之类的任何符号)
(2)字符串
字符串
:在Σ上定义的符号串称字符串,定义:- ε为空串,它不含任何Σ上的符号
- 若X为Σ上符号串,a∈Σ,则Xa是Σ上符号串
- Y为Σ上符号串 <=> Y由1、2推出
空串(ε)
: 特殊字符串,由0个符号组成- 不是空白符号( 空格也是一个符号 )
- 任何Σ中都有ε
- 空串和其他串拼接时失去作用:Xε=εX=X
- 字符串术语:
字符串的连接
:若X.Y为Σ上符号串,则XY也是Σ上符号串字符串的逆转
X R X^R XR:将字符串中各符号逆序写出,若X为单个符号串或ε,则 X R = X X^R=X XR=X前缀
:删去原字符串尾部的零个或多于零个符号后缀
:删去原字符串的头部的零个或多于零个符号(真)前/后缀
:X为XY前缀;若 X ≠ X Y X\neq XY X=XY,X为真前缀(X可为ε)
子串
:从原字符串中删去一个前缀和一个后缀子序列
:从原字符串中删去零个或多于零个符号(这些符号不要求连续)字符串长度
∣ X ∣ |X| ∣X∣:字符串中字符个数字符串的幂
a n a^n an : 符号/字符串a连续出现n次
(3)语言
语言(L)
:对于给定字母表Σ,Σ上字符串的一个集合,称为Σ上的语言前缀性质
:L为某Σ上的一个语言,若L中任意字符串都不是另一个字符串的前缀,则L有~- 语言的运算:
-
集合基本运算:交并差补(语言是特殊的集合)
-
语言的连接
: L 1 L_1 L1和 L 2 L_2 L2的连接 L 1 L 2 L_1L_2 L1L2 由下式定义: L 1 L 2 = { x y ∣ x ∈ L 1 , y ∈ L 2 } L_1L_2=\{xy∣x∈L_1,y∈L_2\} L1L2={xy∣x∈L1,y∈L2}(排列组合) -
语言的闭包
L ∗ L^* L∗: 递归定义:- L 0 = { ε } L^0=\{ε\} L0={ε}
- 对于n≥1, L n = L L n − 1 L^n =LL^{n-1} Ln=LLn−1;
- L ∗ = ∪ L n L^*=∪L^n L∗=∪Ln
直观含义:以任意次序连接L中任意多个字符串,所组成的集合)
-
语言的正闭包
L + L^+ L+: L + = ∪ L n ( n > = 1 ) , 故 L ∗ = L 0 ∪ L + L^+=∪L^n (n>=1),故L^*=L^0∪L^+ L+=∪Ln(n>=1),故L∗=L0∪L+
注意:字母表Σ本身也是Σ上的语言,有Σ*和Σ+类似定义
-