一个简陋的确定有限状态自动机(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