核心——识别器(有穷自动机)
有穷自动机识别字符串的过程
- 开始,自动机处于初始状态
- 输入字符串的第一个字符,这时自动机会查询当前状态上与输入字符相匹配的边,并沿这条边转换到下一个状态。
- 继续输入下一个字符,重复第二步,查询当前状态上的边并进行状态转换
- 当字符串全部输入后,如果自动机正好处于接受状态上,则自动机接受了这一字符串。
有 穷 自 动 机 { 不确定有穷自动机NFA: 确定的有穷自动机DFA:有且只有一条离开该状态,以该符号为标号的边 有穷自动机 \begin{cases} \text {不确定有穷自动机NFA:}\\ \text{确定的有穷自动机DFA:有且只有一条离开该状态,以该符号为标号的边} \end{cases} 有穷自动机{ 不确定有穷自动机NFA:确定的有穷自动机DFA:有且只有一条离开该状态,以该符号为标号的边
NFA
DFA
1.DFA是NFA的一个特例
- 没有输出 ε \varepsilon ε后的转换
- 对于每一个状态s和每个输入符号a,有且只有一条标号为a的边离开s(就是没有分叉)
2.NFA允许从一个状态发出多条具有相同符号a的边也允许发出标有 ε \varepsilon ε的边
(不确定性1)简单来说就是可以不输入任何字符( ε \varepsilon ε)就可以转换到下一个状态
(不确定性2)NFA遇到两条边上有相同的符号的时候会自动猜测应该选择哪一条边,而且是正确的
3.NFA,DFA,正则表达式是等价的4.DFA简单识别串算法
![]()
正则表达式转NFA——McMaughton-Yamada-Thomp-son算法
基本规则:
1.表达式 ε \varepsilon ε