“$L$ 可由某台ε NFA 或 NFA 识别;”
形式陈述
ε-NFA 是五元组
标记为
“零条”保证
当且仅当
直觉
ε-边是控制流接线,不是输入。它允许机器先在几个局部组件之间选择入口,或在一个组件完成后跳到下一个组件,而不必发明只用于连接的输入字符。正则表达式的并、连接和星都可以因此逐块翻译:表达式树的结构由 ε-边承担,真正的字母边只负责消费文本。
闭包不是“最多走一次 ε-边”。若 ε-边形成长链或环,机器在读取下一个符号前可能到达整片状态。集合
ε-边让表示和组合更方便,识别能力仍然不变。其所有隐式控制位置都来自有限集
例子与边界
设已有自动机
要识别连接
消去 ε-边时,可定义普通 NFA
并令
最常见的错误有三类:把
如果原图没有任何 ε-边,则
推论与应用
ε-NFA 是经典正则表达式编译的自然中间表示,也适合把多个词法规则或协议片段模块化拼装。执行前可以按上式消去 ε-边,或在状态集模拟中实时维护闭包;二者只是把同一批可达性工作放在不同阶段。
确定化时,DFA 初态应取
加权 ε 消边还须累计各条静默路径的贡献。普通数值加法不会像集合并那样消去重复,所以不能直接把字符转移前后的两个布尔闭包都换成数值闭包矩阵;相邻闭包可能为同一条路径引入多个切点。该页用谱条件保证收敛,并逐项算出重复计权反例。
参考资料
- John E. Hopcroft, Rajeev Motwani, and Jeffrey D. Ullman, Introduction to Automata Theory, Languages, and Computation, 3rd ed., Pearson, 2006, §2.5.
- Ken Thompson, “Programming Techniques: Regular Expression Search Algorithm,” Communications of the ACM 11(6), 1968, pp. 419–422.