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

📄 compile.h

📁 一个编译器原码
💻 H
字号:
#ifndef COMPILE_H
#define COMPILE_H

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/********************宏定义**********************/

#define BUF_SIZE			64					//从文件中读取源程序时,使用的缓冲大小
#define MAX_PRO_LEN			65536				//源程序长度上限,根据需要可以更改
#define ID_LEN				10					//标识符长度
#define NUM_LEN				9					//常数最多能够容纳的位数
#define NUM_OF_RESERVED_ID	18					//保留关键字个数
#define MAX_TABLE_LEN		128					//符号表最多项数
#define	MAX_CODE_LEN		1024				//目标代码长度上限
#define	MAX_STACK_LEN		256					//数据栈大小上限

#define PROGRAM				0					//program
#define INTEGER				1					//integer
#define LOGICAL				2					//logical
#define IF					3					//if
#define THEN				4					//then
#define ELSE				5					//else
#define WHILE				6					//while
#define REPEAT				7					//repeat
#define BEGIN				8					//begin
#define END					9					//end
#define OR					10					//or
#define AND					11					//and
#define NOT					12					//not
#define TRUE				13					//true
#define FALSE				14					//false
#define DO					15					//do
#define UNTIL				16					//until
#define WRITE				17					//write

#define PLUS				18					// +
#define MINUS				19					// -
#define TIMES				20					// *
#define SLASH				21					// /
#define LPAREN				22					// (
#define RPAREN				23					// )
#define EQL					24					// =
#define COMMA				25					// ,
#define SEMICOLON			26					// ;
#define PERIOD				27					// .
#define BECOMES				28					// :=
#define NUL					29					// :
#define LSS					30					// <
#define LEQ					31					// <=
#define GTR					32					// >
#define GEQ					33					// >=

#define NUMBER				34					// 数字
#define IDENT				35					// 标识符

#define INT					40					//给变量预留位置
#define LIT					41					//目标指令,把一个常数置入栈顶
#define LOD					42					//目标指令,把一个变量置入栈顶
#define STO					43					//目标指令,从栈顶把一个数置入到一个变量里
#define JMP					44					//目标指令,无条件转移
#define JPC					45					//目标指令,有条件转移(当条件为0时转移)
#define OPR					46					//目标指令,算术和关系运算
#define WRT					47					//目标指令,打印栈顶数据
#define OPR_PLUS			50					// +
#define OPR_MINUS			51					// -
#define OPR_TIMES			52					// *
#define OPR_SLASH			53					// /
#define OPR_OPPO			54					//取负
#define OPR_EQL				55					// =
#define OPR_LSS				56					// <
#define OPR_LEQ				57					// <=
#define OPR_GTR				58					// >
#define OPR_GEQ				59					// >=
#define OPR_OR				60					// or
#define OPR_AND				61					// and

/*******************结构体定义*********************/
//符号表格式
typedef struct
{
	char	name[ID_LEN];
	int		kind;
	int		offSet;
}TABLE;
//目标代码格式
typedef struct
{
	int		funCode;
	int		offset;
}INSTRUCTION;

/********************变量声明**********************/

extern	char *	word[NUM_OF_RESERVED_ID];		//保留关键字集
extern	int		wsym[NUM_OF_RESERVED_ID];		//保留关键字对应的sym标识

extern	char *	letter;							//a...z字母集
extern	char	*	number;						//0...9数字集
extern	char	*	letter_number;				//a...z,0...9集

extern	char 	sourceProgram[MAX_PRO_LEN];		//存放源程序的字符数组
extern	int		sCount;							//指向sourceProgram的下标,指明当前分析到哪里
extern	int		totalCount;						//sourceProgram[]有效数据的长度

extern	char	ch;								//词法分析中,存放当前被取到的字符
extern	int		sym;							//词法分析中,指明当前取到的字符串的类型
extern	char 	ident[ID_LEN];					//词法分析中,存放当前被取到的标识符
extern	long	num;							//词法分析中,存放当前被取到的常数

extern	TABLE	table[MAX_TABLE_LEN];
extern	int		tableCount;

extern	INSTRUCTION	code[MAX_CODE_LEN];			//程序存储器
extern	int			codeCount;					//程序存储器索引
extern	int			dataStack[MAX_STACK_LEN];	//数据栈
extern	int			stackCount;					//数据栈索引
extern	int			maxCodeCount;				//程序存储器存放的目标代码数量

extern	int			errorCount;					//记录错误发生的次数

/********************函数声明**********************/

extern	void		init();
extern	int			loadProgram(int, char **);

//词法分析程序
extern	void		getSym();
extern	void		getChar();
extern	int			ifCharInStr(char *);

//语法分析程序
extern	void		enterTable(int);
extern	int			position(char *);
extern	void		gen(int, int);
extern	void		yacc_prog();
extern	void		yacc_ds();
extern	void		yacc_ss();
extern	void		yacc_d();
extern	void		yacc_s();
extern	void		yacc_ae();
extern	void		yacc_at();
extern	void		yacc_af();
extern	void		yacc_be();
extern	void		yacc_bt();
extern	void		yacc_bf();
extern	void		yacc_re();
//出错处理程序
extern	void		errorOccur(int);
extern	void		printDesCode();
extern	void		interpret();

#endif

⌨️ 快捷键说明

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