目录
一、 编程环境 1
二、 数据结构分析 1
三、 正则表达式转NFA 2
四、 NFA转DFA 6
五、 最小化DFA 7
六、 图形化界面设计 8
七、 可以改进的地方 10
一、编程环境
语言: c++ 11
IDE:qt creator、 CLion
界面库:qt、GraphViz
开发平台:mac,Windows下未做测试
编译该项目,必须本地已经下载安装GraphViz,并且需要修改lex.h中的dot常量为你的系统中dot命令的位置。如果是mac系统,你可以通过 which dot 查看具体位置。
const string dot = "/usr/local/bin/dot";
二、数据结构分析
正则表达式由用户输入,使用string类型简单存储,正则表达式分为两个部分:运算符部分和标识符部分
NFA和DFA类的成员变量:
MyGraph:因为NFA,DFA每个节点有多个出度,多个入度,用图表示最合适的存储方式,定义了图的数据结构用来存储整个数据
StartStatus:存储开始状态序号,相当于头部指针
EndStatus:存储结束状态序号,相当于尾部指针
mVexs:对应的NFA或者DFA的节点集合,NFA集合是一维数组,DFA的节点集合是二维集合,每个节点的信息为对于的NFA转换的状态集合
MyGraph:图的具体实现
mMatrix: 使用一个二维整形数组存储了节点的边之间的关系,值为一个char型的vector,这里是考虑到两个节点之间可能有多条同向边。
mVexNum:节点的数量,辅助变量,便于后面的分析。
mEdgeNum:边的数量,辅助变量,便于后面的分析。