NFA 转 DFA
完整代码: https://github.com/wcgzgj/NFA2DFA
NDF 转 DFA 的过程
这里的测试数据,我使用的是 书P39 例3.5的数据
测试数据,我放在 data2.txt 中:
其中,“ * ” 表示的是 epsilon
1 * 2
1 * 3
2 * 4
2 a 2
3 * 4
3 b 3
4 b 5
5 * 6
6 * #
6 b 7
7 a 6
并且在程序执行的时候,就读取完,放在 list 中:
public static List<String> getContextList(String fileName) {
File file = getFile(fileName);
List<String> list = new ArrayList<String>();
try {
FileReader fileReader = new FileReader(file);
BufferedReader bf = new BufferedReader(fileReader);
String line;
while ((line=bf.readLine()) !=null) {
list.add(line);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return list;
}
1. 获取起始点的 Epsilon 闭包
/**
* 获得指定数的 epsilon 闭包
* @param key
* @return
*/
public static Set<String> getEpsilonClosure(String key) {
Set<String> res = new HashSet<String>