一个简陋的确定有限状态自动机(DFA)求解器,编译原理作业自用
通过以下方式输入一个无空边 NFA:
- 状态数
n(之后的状态将用[0, n-1]编号) - 接下去
n行输入每个状态的出边集合。一条出边包括一个后继状态号v和转移字符c,用空格分隔。边之间也需要用空格分隔。一个状态可以加任意条出边,直到行末结束 - 开始状态集合
S,用空格分隔 - 接受状态集合
T,用空格分隔
输出重新编号的 DFA 状态转移表:
| 编号 | 前状态编号 | 输入字符... |
|---|---|---|
| ... | ... | ... |
其中第一行为新 DFA 的开始状态,状态名称中有 * 号的状态为新 DFA 的接收状态。
number of in vertices: 14
1: 2 1 6 1
2: 3 1 14 0
3: 4 0 8 1
4: 5 1
5: 3 0
6: 7 0
7: 11 1
8: 3 1 9 1 14 0
9: 10 0
10: 11 1
11: 11 0 12 1 14 0
12: 13 0
13: 11 1
14:
start: 1
terminal: 14