正则表达式
正则表达式表示的串的集合成为语言,语言中涉及的字符称为符号(symbol),而符号的集合则是字母表(alphabet)。
在正则表达式中还包括元字符(metacharacter),例如括号, ϵ \epsilon ϵ
相同的语言可以使用多个不同的正则表达式来表示
正则表达式不能表达有数量关系的语言,例如:
S = {b,aba,aabaa,aaabaaa,……} = {
a
n
b
a
n
a^nba^n
anban | n≠0 }
正则表达式 | 意义 | 其他写法 |
---|---|---|
R+ | 一个或多个R | R(R*) |
R? | 可选R | R|ε |
[abcd] | 列表中的元素之一 | a|b|c|d |
[a-z] | a-z中的元素之一 | a|b|c|d|e|…|y|z |
[^ab] | 除了ab的任意字符 | |
[^a-z] | 除了a-z中的任意字符 |
优先级:* > connection > |
RE转NFA
NFA转DFA
例题:
步骤:
Minimize DFA的状态数
通过上图的DFA画出状态转换表,然后分出集合:
如果一个集合中的状态遇到一个检测字符x时,如果这些状态经过x走向了不同属性的状态,即:非接受状态,接受状态,错误状态,那么这些状态将被x区分。