源码在: https://github.com/imcuttle/regExp_nfa_dfa_mfa
知识介绍
NFA:不确定有限自动机, 边上可能存在空串,可以有多个初始状态。
DFA:确定有限自动机, 边上不存在空串,只有一个初始状态。
MFA:状态最少
NFA->DFA : NFA的确定化;
DFA->MFA :DFA的最小化。
正则表达式->NFA
我们可以把正则表达式分析转换为一棵树型结构,正则表达式包括中缀符号,后缀符号,双目符号,多目符号等。
public class BinTree {
public enum NodeType{OPERATION,DATA}
public enum OpType{CONCAT,OR,ANY}
NodeType nodeType;
OpType opType;
String data;
public BinTree left;
public BinTree right;
public BinTree parent;
}
然后将树转换为图。
最后按照算法要求将NFA转换为DFA,MFA。
前端使用SVG画图,放大查看效果更佳。
后端使用Java
预览地址:
http://moyuyc.xyz/compiler