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

📄 compiler.h

📁 一个用VC++开发的Pascal编译器. 包括词法分析 语法分析 语义分析 中间代码生成 对学习编译原理的同学有很大用途
💻 H
字号:
// Compiler.h: interface for the CCompiler class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_COMPILER_H__8DF05B9A_573C_452E_97B8_C6984ACBC9B1__INCLUDED_)
#define AFX_COMPILER_H__8DF05B9A_573C_452E_97B8_C6984ACBC9B1__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "DualityModel.h"
#include "SymbolRecord.h"
#include "QuadRuple.h"
#include <vector>
using namespace std;

#define PROGRAM 0
#define BEGIN	1
#define END		2
#define VAR		3
#define IF		4
#define THEN	5
#define ELSE	6
#define WHILE	7
#define DO		8
#define INTEGER 9
#define REAL	10
#define ID		11
#define INTNUM	12
#define REALNUM 13
#define ASSIGN	14
#define PLUS	15
#define TIMES	16
#define OR		17
#define AND		18
#define NOT		19
#define EQ		20
#define LT		21
#define LE		22
#define GT		23
#define GE		24
#define NE		25
#define SEMI	26
#define LPAREN	27
#define RPAREN	28
#define COMMA	29
#define COLON	30
#define LCUT	31
#define RCUT	32
#define SUB		33
#define JMP		34
#define JNZ		35

/*以下宏定义为错误处理服务*/
#define	Nonlicetchar	1
#define	Nonlicetword	2
#define ProgramExpect	3
#define	BeginExpect		4
#define	EndExpect		5
#define VarExcept		6
#define LeadTypeExcept	7
#define LeadSExcept		8
#define LeadAExcept		9
#define LeadAEExcept	10
#define LeadTExcept		11
#define LeadFExcept		12
#define LeadBEExcept	13
#define LeadBTExcept	14
#define LeadBFExcept	15
#define OperandExcept	16
#define OperatorExcept	17
#define ComparisonOpExcept	18
#define ThenExcept		19
#define IDExcept		20
#define DoExcept		21
#define ASSIGNExcept	22
#define SEMIExcept		23
#define LPARENExcept	24	
#define RPARENExcept	25
#define COMMAExcept		26
#define COLONExcept		27
#define RCUTExcept		28
#define UndeclaredId	29
#define IdRedefinition	31
#define COLONMiss		32
#define ExtraWordAfterEnd 33
#define TypeUnsuited	30
#define SEMIMiss		34
#define ExtraSEMI		35

/*错误类型宏定义完毕*/

typedef struct
{
	CString KeyWord ;
	int		id	;
}keyword;

typedef struct
{
	int		Position	;	//方便找到出错单词,或者字符
	int		ErrorType	;	//
	int		OccurLine	;	//
}m_eError;

typedef struct
{
	int		TC ;
	int		FC ;
}BoolTable;

typedef	struct		//设置成结构体,为了提高程序的可读性
{		
	int		Chain ;
}Statement;

class CCompiler  
{
public:
	void SkipToSEMI();
	void Backward();
	BOOL Is(int type);
	int		Merge(int p1,int p2);
	void	BackPatch(int p,int t);
	int		VariableLegal(CString token,int type);
	int		LookUpRecord(CString Name);
	int		NewTemp();
	int		Gen(int op, int arg1, int arg2, int result);
	int		Entry(CString Name);
	void	FillSymbolRecord(int type);
	void	A();
	void	ROP();
	BoolTable BF();
	BoolTable BT();
	int		F();
	int		T();
	void TAIL();
	BoolTable BE();
	int		AE();
	Statement S();
	BOOL Match(int type);
	void Advance();
	Statement STL();
	void TYPE();
	void VARST();
	void VARS();
	void MPROGRAM();
	void YuFa();
	void Error(int position, int errortype,int line);
	int		LookUp(CString str);
	void	Initiate_Keywords_Table();
	void	CiFa();
	void	SetSourceStr(CString str);
	CCompiler();
	vector<CString>		Nonlicetwords;//非法单词表
	vector<DualityModel> m_dModel;	//二元式存储结构
	vector<QuadRuple>	m_fourModel;//四元式存储结构
	vector<m_eError> m_eErrorTable;//错误信息表
	vector<SymbolRecord> m_SymbolRecord;//符号表
	vector<CString>			m_Variable;	//所有声明的变量名表
	virtual ~CCompiler();
	DualityModel	m_DualityModel;
	QuadRuple	m_QuadRuple;
	CString		IDAssgin;			//赋值语句中将被赋值的变量
	int			IDAssginPosition;	//如是合法变量,指示在符号表中的位置
	CString		m_sSourceStr ;
	int			m_error ;

	BoolTable	m_bool;				//布尔表达式TC和FC结构体		
	keyword		my_KeyWords[11];	//关键字表
	m_eError	error ;	//0代表无错,1代表词法错,2代表语法错
	CString		CurToken;	//当前分析的单词串
	int			CurStep;	//指示当前分析的单词
	int			CurLine;	//指示当前分析单词所在行
	int			tempnum;	//临时变量个数
	int			NXQ;		//下一个将要产生的四元式编号
	int			Nonlicetwordnum; //非法单词序号
	int			CurType;		//当前数值类型

};

#endif // !defined(AFX_COMPILER_H__8DF05B9A_573C_452E_97B8_C6984ACBC9B1__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -