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

📄 zcompile.h

📁 pl/0编译器的C++实现
💻 H
字号:
///////////////////////////////////////////////////////////////
//	zCompile Class 0.14 (2003.12.30) [Head File]
//	Author:Dwing
///////////////////////////////////////////////////////////////
#ifndef _ZCOMPILE_H_
#define _ZCOMPILE_H_
///////////////////////////////////////////////////////////////
#include<stdlib.h>	//For <memset> <atoi>
#include<stdio.h>	//For <sprintf>
#include<string.h>	//For <strcmp>
///////////////////////////////////////////////////////////////
#define ISLETTER(c)	((c)>='A'&&(c)<='Z'||(c)>='a'&&(c)<='z')//判断是否是字母
#define ISNUMBER(c)	((c)>='0'&&(c)<='9')	//判断是否是数字
#define ISCHAR(c)	((c)>=33 &&(c)<=126)	//判断是否是字符

#define MAX_ASM			4096	//最多目标代码条数
#define MAX_ERR			256		//最多显示错误数
#define MAX_FORM		1024	//最大符号表长度
#define MAX_LEVEL		64		//最大符号表层数
#define MAX_SYMLEN		31		//最大符号长度
#define MAX_NUMLEN		5		//最大常数长度
#define MAX_NUMBER		65535	//最大常数

#define MAX_KEYWORD		13		//关键字数量
#define MAX_OPWORDA		8		//单字运算符数量
#define MAX_OPWORDB		3		//双字运算符数量
#define MAX_ENDWORD		5		//单字界符数量
#define MAX_ERROR		34		//错误类型数量
#define MAX_ASMWORD		8		//汇编指令条数

#define ERR_ERREND		0		//以下是错误号
#define ERR_NEEDNUM		2
#define ERR_NEEDEQL		3
#define ERR_NEEDSYM		4
#define ERR_NEEDEND		5
#define ERR_NOEND		9
#define ERR_NOTSEM		10
#define ERR_NODEFSYM	11
#define ERR_NOTVAR		12
#define ERR_NOTDEFOP	13
#define ERR_NOTSYM		14
#define ERR_NOTPROC		15
#define ERR_NOTTHEN		16
#define ERR_NEEDVAR		17
#define ERR_NOTDO		18
#define ERR_NOTRLOP		20
#define ERR_NOPROC		21
#define ERR_NOTRP		22
#define ERR_NOSYM		23
#define ERR_WRONGOP		24
#define ERR_OVERSYMLEN	25
#define ERR_OVERNUMLEN	26
#define ERR_NUMBER		27
#define ERR_NOTDEF		28
#define ERR_OVERLVL		29
#define ERR_OVERFORM	30
#define ERR_NOTPAREN	31
#define ERR_OVERASM		32
#define ERR_OVERERR		33
///////////////////////////////////////////////////////////////
typedef struct		//符号描述结构体(含错误描述结构)
{
	int		type;					//类型号(0:错误)
	int		id;						//ID号(错误值)
	int		line;					//所在行数
	char	name[MAX_SYMLEN+1];		//所取的词
}SYM;
///////////////////////////////////////////////////////////////
typedef struct		//符号表
{
	int		type;	//类型
	int		lvl;	//层数
	int		adr;	//地址/常数
	char	name[MAX_SYMLEN+1];	//名称
}FORM;
///////////////////////////////////////////////////////////////
typedef struct		//汇编指令格式
{
	char			opr;	//指令操作码
	char			lvl;	//级数
	unsigned short	adr;	//地址码/操作数
}ASM;
///////////////////////////////////////////////////////////////
typedef struct		//错误结构体
{
	int		id;		//错误号
	int		line;	//出错行数
	char	name[MAX_SYMLEN+1];		//所取的词
}ERR;
///////////////////////////////////////////////////////////////
class zCompile		//PL/0编译器类
{
private:
	char	*text;				//PL/0文本指针
	SYM		sym;				//取词结构
	ASM		asms[MAX_ASM];		//目标代码结构
	int		asmnum;				//目标代码数量
	ERR		err[MAX_ERR];		//错误结构
	int		errnum;				//错误数量
	FORM	form[MAX_FORM];		//符号表结构
	int		formnum;			//符号表项数
	int		formlvl;			//当前符号表层数
	int		formadr[MAX_LEVEL];	//当前各层符号表地址记数
private:
	int		getsym();			//取词 Return 0: No word
	int		addasm(char opr,char lvl,short adr);//产生目标代码
	int		adderr(char *name,int id);	//产生错误
	int		formpush(char *name,int type,int id);//填表项
	int		formpop();			//退表项
	int		formget(char *name,FORM *fm);	//取表项
	int		syn_block();		//分程序处理
	void	syn_statement();	//语句处理
	void	syn_expression();	//表达式处理
	void	syn_condition();	//条件式处理
	void	syn_term();			//项处理
	void	syn_factor();		//因子处理
public:		//以下成员函数是与外壳的接口
			zCompile();
	void	compile(char *txt);	//编译源程序
	int		getasm(char *buf);	//取得目标代码,返回指令条数
	int		geterr(char *buf);	//取得错误信息,返回错误数量
};
///////////////////////////////////////////////////////////////
#endif
///////////////////////////////////////////////////////////////

⌨️ 快捷键说明

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