📄 z_nfa.h
字号:
#ifndef Z_NFA_H
#define Z_NFA_H
#include<iostream>
#include<stack>
#include<map>
#include<set>
#include "declarant.h"
using namespace std;
#define EXPRESS_PATH "expression.txt"
#define BSIZE 1000
/*由于正则表达式的操作符只有由(). | *且结合性都是左结合,
且字母表规定只能为0~9||a~z||A~Z||-||<>= || +||-
便于编程方便,把所有的连接运算符的显示的表现出来
*/
class Z_nfa
{
private:
set< char > opnum; //正则表达式中所有的字母表
char buf[BSIZE]; //用来存放正则表达式
map<int , wedge* >NFA; //不确定有穷自动机的图
map< set<int>, node* > DFA; //确定有穷自动机的图
FILE* fp; // 输入文件的指针
int state_num; // NFA状态总数
stack<int > start_end; // 用来存放状态操作数
stack<char > op; // 用来存放操作符
int NFAstart;
int NFAend;
set<int > DFAstart;
set<set<int> > DFAend;
set< set<int > > DFAsumset;//总集合里面的元素表示DFA的一个新状态
int priority(const char& c)const;
int input();
bool is_opnum(const char& a)const ;
int caculate_xin(int begin,int end);
int caculate_link(int begin1,int end1,int begin2,int end2);
int caculate_or(int begin1,int end1,int begin2,int end2);
int caculate_char(const char& c);
int clear_stack() ;
int expression_NFA();
int freeNFA();
int display_NFA();
int $_closure(set<int >& T );
int move(set<int > &T,const char& a);
int NFA_DFA();
int DFAfree();
int displayDFA() ;
int solve_DFAend() ;
int run();
public:
Z_nfa()
{cout<<"执行了Z_nfa的构造函数"<<endl;state_num=0;op.push('(');NFAstart=0;NFAend=0;Z_nfa::run();}
int get_NFAstart(){return NFAstart;}
int get_NFAend(){return NFAend;}
set<set<int> > get_DFAend(){ return Z_nfa::DFAend; }
set<int> get_DFAstart(){return Z_nfa::DFAstart; }
set< char > get_opnum(){return Z_nfa::opnum;}
int get_DFA(map<set<int>, node*>& G) ; //有指针的地方一定要现在深复制
~Z_nfa();
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -