子集构造法是计算机系本科课程“编译原理”中所涉及的一种将不确定的有穷自动机自动机(NFA)化为确定的有穷自动机(DFA)的方法。原理详见编译原理(龙书)。
NFA以带权有向图的形式并hard code在程序中。使用时可根据所需要转换的NFA修改代码中原有的图。程序根据存入的图进行向DFA的转换并输出。
目前,程序默认NFA仅有两种输入,若之后课程涉及更多输入将进行修改。
运行subsect_create.py
即可。
目前代码中的图将会产生如下输出
A: [0, 1, 2, 4, 7]
B: [1, 2, 3, 4, 6, 7, 8]
C: [1, 2, 4, 5, 6, 7]
D: [1, 2, 3, 4, 6, 7, 8, 9]
E: [1, 2, 4, 5, 6, 7, 9]
F: [1, 2, 3, 4, 6, 7, 8, 9, 10]
G: [1, 2, 4, 5, 6, 7, 9, 10]
H: [1, 2, 3, 4, 6, 7, 8, 10]
I: [1, 2, 4, 5, 6, 7, 10]
['A']: ['B'], ['C']
['B']: ['D'], ['E']
['C']: ['B'], ['C']
['D']: ['F'], ['G']
['E']: ['H'], ['I']
['F']: ['F'], ['G']
['G']: ['H'], ['I']
['H']: ['D'], ['E']
['I']: ['B'], ['C']
字母表示新的DFA中的状态,第一部分列出了新状态所包含的原状态,第二部分表示每个状态的转换表。第二列即为第一个输入下的转换,第三列为第二个输入下的转换,据此可画出DFA图。
本代码目前还不支持最小化DFA功能。