在上一篇文章中,已经得到了与正则表达式等价的 NFA,本篇文章会说明如何从 NFA 转换为 DFA,以及对 DFA 和字符类进行化简。 一、DFA 的表示
DFA 的表示与 NFA 比较类似,不过要简单的多,只需要一个添加新状态的方法即可。Dfa 类的代码如下所示: 代码如下:namespace Cyjb.Compiler.Lexer { class Dfa { // 在当前 DFA 中创建一个新状态。 DfaState NewState() {} } }DFA 的状态也比较简单,必要的属性只有两个:符号索引和状态转移。
符号索引表示当前的接受状