状态转换图
状态转换图
- 状态:表示在识别词素的过程中可能出现的情况
- 状态看作是已处理部分的总结
- 某些状态为接受状态或最终状态,表明已找到词素
- 加上*的接受状态表示最后读入的符号不在词素中
- 开始状态用start边表示
- 边(edge):从一个状态指向另一个状态;边的标号是一个或者多个符号。
- 状态转换图示例:
有穷自动机
- 本质上等价于状态转换图,分为两类:
- 不确定的有穷自动机(Nondeterministic Finite Automaton, NFA)
- 确定的有有穷状态自动机(Deterministic Finite AUtomaton, DFA)
- NFA和DFA的异同:
- NFA:一个符号标记离开同一状态的多条边,可以有边的标号是ε.
- DFA:对于每个状态和字母表中的每个字符,有且仅有一条离开该状态、以该符号为标号的边。没有标记为ε的边。
- 都可以识别正则语言,有等价性
NFA
组成:
- 一个有穷状态集合S
- 一个输入符号集合Σ
- 转换函数:对每个状态和Σ∪{ε}中的符号,给出相应的后继状态集合
- 一个状态S0被指定为开始状态
- S的一个子集F被指定为接受状态
例子
DFA
一个NFA被称为DFA,如果:
- 没有ε之上的转换动作
- 对于每个状态s和每个输入符号a,有且只有一条标号为a的边
可以高效判断一个串是否能被一个DFA接受
每个NFA都有一个等价的DFA