📄 main.h
字号:
//此文件是对所有数据结构和类的申明,以及全局变量的定义
#ifndef _MAIN_H
#define _MAIN_H
#include<iostream>
#include<fstream>
#include<string>
#include<vector>
#include<stack>
#include<map>
#include<stdlib.h>
using namespace std;
const char file_grammer[]="grammer.txt";
const char file_token[]="token.txt";
const char file_LL_Table[]="LL_Table.txt";
const char file_Analyse_tree[]="analyse_tree.txt";
const char file_error[]="error.txt";
//token的数据结构
typedef struct TOKEN
{
string strName;
string strType;
int line;
};
//语法的数据结构
typedef struct GRAMMER
{
string leftLabel;
vector<string> vc_rightLable;
};
//ERROR的结构
typedef struct ERROR
{
long line;
string strError;
} ;
//分析栈数据结构
typedef struct Stack
{
vector<string> analyse_stack;
string action;
};
class AnalyseStack
{
private:
vector<Stack> vc_analyseStack;
public:
//AnalyseStack();
void push(Stack st);
Stack pop();
void disPlay(ofstream &out);
~AnalyseStack();
};
//得到token的类模块
class Token
{
private:
vector<TOKEN> vc_Token;
ifstream in;
long pos;
public:
Token(const char filename[]);
bool isHasToken();
TOKEN getToken();
~Token();
};
//得到LL(1)表的类
class LL_Table
{
private:
vector<string> vc_terminal;
vector<string> vc_nonterminal;
unsigned int **LL_table;
ifstream in;
int m,n;
public:
LL_Table(const char filename[]);
unsigned int checkTable(string strNonterminal,string strTerminal,unsigned int Line) ;
int find(vector<string> vec,string s);
bool isTerminal(string s);
bool isNonterminal(string s);
~LL_Table();
};
//语法类
class Grammer
{
private:
vector<GRAMMER> vc_grammer;
ifstream in;
public:
unsigned int line;
Grammer(const char filename[]);
GRAMMER getProduce(unsigned int pos);
void push(GRAMMER gr);
~Grammer(){};
};
//错误处理机制
class Error
{
private:
ofstream out;
vector<ERROR> vc_error;
public:
Error(const char filename[]);
void add_to_error(ERROR E);
void disPathError();
~Error();
} ;
//这是整个语法分析的类 此类生成语法树 和 者其他形式
class Analyse
{
private:
vector<string> vc_s;
string strAction;
ofstream tree_out;
public:
Analyse(const char treefile[],const char errorfile[]);
void makeAnalyseStack(Token &token,Grammer &grammer,LL_Table &LL_TB,AnalyseStack &analyse_stack,Error &error);
void push_to_Stack(AnalyseStack &analyse_stack);
bool match(string s1,string s2);
void evaluate(TOKEN &to,TOKEN ac);
void evaluate(GRAMMER &g,GRAMMER G);
~Analyse();
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -