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

📄 main.h

📁 语法分析程序 实现C语言的语法分析过程
💻 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 + -