⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 z_nfa.h

📁 智能的词法分析
💻 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 + -