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

📄 c0compiler.h

📁 自己写的一个C子集的编译程序
💻 H
字号:
#define MYCOMPILER

#define MAXWORD		10				//token和keyword最大长度
#define MAXLENGTH	30
#define MAXC		50				//符号表的最大容量
#define MAXOP		500				//最大的操作指令条数
#define MAXLEV		10				//最大的层数
#define MAXF		10				//最多的实常量数
#define MAXCASE		50				
#define MAXGO		100				//最大运行栈
#define MAXGOLEV	10				//运行栈最大的调用层
#define	MAXS		5				//printf语句中最多的转换字符数
#define MAXERROR	50	
#define kk			12				//关键词个数

char Word[MAXWORD];					//store token
int num;							//store 整数
char sisstring[MAXLENGTH];			//store 字符串
int sym;							//store 标号;
char cischar;						//store 字符

char *Keyword[]={					//关键字
	"const","int","char","void",
	"main","if","else", "do","while",
	"scanf","printf", "return"
};

char *oprate[]={					//操作码
	"LDA","LDI","JME","JMC","JMP","CAS",
	"RED","EXF","WRR","INF","ADD","SUB","",
	"MUL","DIV","MUS",">","<","==","!=",">=",
	"<=","STO","CAL","MKF","EXP"
};

FILE* FIN, *FOUT;					//输入输出文件指针
char fp[20];						//输入文件名


union Cha{
	int num;
	char cischar;
};

struct Character{					//符号表
	char *name ;
	int type,lev,adr,kind;
	Cha uchar;
};

struct opr{							//中间代码
	int op,lev,x;
};

	
char* err_msg[] =					//定义出错提示信息
{
/*0*/ "",
/*1*/ "标识符或数字过长",
/*2*/ "非法单词",
/*3*/ "缺少符号",
/*4*/ "缺少类型标识符",
/*5*/ "字符串过长或缺少符号",
/*6*/ "此处缺少运算的因子",
/*7*/ "符号表出界",
/*8*/ "标识符重复定义",
/*9*/ "此处应有'='",
/*10*/ "变量使用出错",
/*11*/ "无返回值函数不能用在此处",
/*12*/ "缺少“}”",
/*13*/ "缺少','",
/*14*/ "无返回值函数不能有return语句",
/*15*/ "无主函数",
/*16*/ "函数调用时参数个数不对",
/*17*/ "缺少'('",
/*18*/ "缺少')'",
/*19*/ "编译生成指令数过多",
/*20*/ "标识符未定义",
/*21*/ "转换符用法错误,为非变量型数据赋值",
/*22*/ "缺少“;”",
/*23*/ "缺少“{”",
/*24*/ "运行栈泄漏"
/*25*/ "函数调用超过了最大的层次数",
/*26*/ "函数返回值与函数类型不匹配",
/*27*/ "此处应为标识符",
/*28*/ "变量的类型和值的类型不匹配",
};



int getsym();									//词法分析程序
int enter(int lev,int type,int kind);			//把变量填入符号表
int constdeclaration();							//分析常量说明部分
int program();									//分析程序
int charcheck();								//检查标识符是否重复定义
int constdefine( int type );					//分析常量定义
int vardefine( int type);						//分析变量说明部分  
int returnfunction( int type)	;				//有返回值的函数
int voidfunction( );							//无返回值的函数定义语句
int statementArray( );							//语句列
int statement( );								//语句
int ifstatement( );								//if条件语句
int whilestatement( );							//while循环语句
int scanfstatement( );							//scanf读语句
int printfstatement( );							//printf写语句
int returnstatement( );							//return语句
int assignstatement(int a);						//赋值语句
int mainfunction( );							//主函数
int call(int a);								//函数调用语句
int expression();								//表达式
int gen(int op,int lev,int x);					//产生一条表达式
int term();										//项
int factor();									//因子
int find();										//在符号表中查找标识符是否存在
int Interpret();								//解释执行程序
int backout();									//不用的变量要退出符号表
void error_msg(int i);								



/************************数字意义*****************************8

  (1)type,sym:

	标识符			1				内部字符串
	整数			2				整数值
	字符			4				字符
	字符串			5				字符串
 
   const			10				---
	int				11				---
	char			12				---
	void			13				---
	main			14				---
	if				15				---
	else			16				---
	do	(switch)	17				---
	while			18				---
	scanf			19				---
	printf			20				---
	return			21	 			---
	+				31				---
	-				32				---
	*				33				---
	/				34				---
	}				35				---
	)				36				---
	(				37				---
	;				38				---
	,				39				---
	{				40				---
	"				41				---
 	"				42				---
  	'				43				---
	'				44				---
	>				45				---
	<				46				---
	==				47				---
	!=				48				---
	>=				49				---
	<=				50				---	
	=				51				---

 (2) type:

0	para(参数)、
1	pro(有返回值的函数)、
2	voidpro(无返回值的函数)、
3	var(变量)、 
4	const(常量)、
5	main(主函数)

*************************************************  */

⌨️ 快捷键说明

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