正规式与正规集
正规式是描述程序语言的表达式,对于字母∑,其上的正规式及其表示的正规集可以递归定义如下。
- ε是一个正规式,它表示集合L(ε)={ε}
- 若a是∑上的字符,则a是一个正规式,它所表示的正规L(a)={a}
- 若正规式r和s分别表示正规集L(r)=L(s),则
- r|s是正规式,表示集合L(r)∪L(s);
- r.s是正规式,表示集合L(r)L(s);
- r是正规式,表示集合(L(r));
- (r)是正规式,表示集合L(r)。
仅有有限地使用上述三个步骤定义的表达式才是∑上的正规式。由此可见,正规式要么为空,要么由字母、或、链接、闭包运算符*具有最高级的优先级,链接运算具有次高优先级,或运算符|具有最低优先级。
| 正规式 | 正规集 | 举例 |
|---|---|---|
| ab | 字符串ab构成的集合 | {ab} |
| a ▏b | 字符串a、b构成的集合 | {a,b} |
| a* | 由0或多个a构成的字符串集合 | {空,a,aa,a..a(n个a)} |
| (a ▏b)* | 以a为首字符的a、b字符串的集合 | {空,a,b,ab,aab,abb,baa,aba,...} |
| a(a ▏b)* | 以a为首字符的a、b字符串的集合 | {a,aa,ab,aab,aba,aaab,aaba,...} |
| (a ▏b)*abb | 以abb结尾的a、b字符串的集合 | {abb,aabb,babb,abaabb,abaabb,...} |
有限自动机
M=(s,∑,δ,S0,Ζ)
- S是一个有限集合,每个元素为一个状态
- ∑是一个又穷字母表,每个元素为一个输入字符
- δ是转换函数:是一个单值对照
- S0属于S,是其唯一的初态
- Ζ是一个终态集(可空) 有限自动机可以形象的用状态转换图表示,设有限状态自动机:DFA=({S,A,B,C,f},{1,0},δ,S,{f}),其中: δ(S,0)=B,δ(S,1)=A,δ(A,0)=f,δ(A,1)=C,δ(B,0)=C,δ(B,1)=f,δ(C,0)=f,δ(C,1)=f
- 有限自动机能够识别的串:从初态出发可以到达终态且停留在终态。
- 确定的有限自动机:当一个状态面对一个输入符号的时候,所转换到的是一个唯一确定状态。
- 不确定的有限自动机:当一个状态面对一个输入符号的时候,它所转换到的可能不止一个状态,可以是一个状态集合。