形式陈述 ​
语言
直觉
把正则表达式看成“尚待匹配的语言”,导数便是从语言中“剥离”已经读掉的前缀后,为了最终接受而仍可读取的后缀语言。匹配过程因而不必维护当前位置或回溯栈,只需反复把语言本身向前推进;不同前缀若产生同一剩余语言,就对应同一个 DFA 状态。关键在于导数是语义运算,而不是简单删掉表达式开头的字符:并、连接和 Kleene 星号都要按可空性规则传播。
例子与边界
对
令 ab 被接受,而 ad 被拒绝。
导数的语法表示可能迅速膨胀,例如交换律、幂等律下等价的并表达式会产生许多不同写法。实际构造需要规范化或按语言等价合并状态;若把“表达式文本相同”误当作“语言相同”,得到的自动机通常远大于必要规模。
推论与应用
导数为正则表达式匹配、等价检查和 DFA 构造提供统一方法,尤其适合函数式实现、符号字母表和按需生成状态的匹配器。反复求导并对等价导数做商,可以从 正则表达式 直接构造 DFA,给出 Kleene 定理的一条算法化证明路径。增量词法分析也可每读一个字符就更新当前残余语言,并用可空性判断是否已形成完整 token;与 确定化构造 相比,这种做法把状态生成推迟到实际可达的残余语言上。
参考资料
- Janusz A. Brzozowski, Derivatives of Regular Expressions, Journal of the ACM 11(4), 1964,pp. 481–494。
- John E. Hopcroft, Rajeev Motwani, and Jeffrey D. Ullman, Introduction to Automata Theory, Languages, and Computation, 3rd ed., Pearson, 2006,Chs. 1–9。