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

📄 global.h

📁 北京航空航天大学计算机系要求的编译器大作业。大概6000行代码。
💻 H
字号:
/*
*2008.02
*		BHU 35060122 By Peng Hui
*		Compiler Version 0.1
*/

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

#define len			256
#define	nil			0
#define Const		1
#define Var			2
#define	Func		3                                   
#define Vp			4
#define Int			5
#define Void		6
#define Assign		7
#define Call		9
#define Ret			10
#define R			11
#define W			12
#define Comp		13
#define Neg			14
#define Add			15
#define Sub			16
#define Mul			17
#define	Div			18         
#define Goto		19 


typedef enum
{
	IN,OUT
}State;

typedef enum kind
{
	VAR,FUNC,CONST,VV
}Kind;

typedef enum type
{
	INT,VOID
}Type;


typedef struct tagCode          // 中间代码:四元式的结构体定义
{
	char label[20];
	char op[20];
	char ad1[20];
	char ad2[20];
	char ad3[20];
	struct tagCode *next;
}MCode;



typedef struct _table
{
	Kind kind;
	Type type;
	char name[20];
	int value;
	int lev;
	struct _table * next;
} Table;

typedef struct _addTable
{
	char id[20];
	int add;
	struct _addTable *next;
}AddTable;


int NextSym(FILE *finn);
void split(char *string);
void scan();
void Error(int k);   	// 出错处理程序;
void Program();  	// <程序>
void ConstDec(); 	// <常量声明>
void ConstDef(); 	// <常量定义>
void ConstExpress();	// <常量表达式>
void ConstItem();
void ConstFactor();
void DeclHead(); 	// <声明头部>
void VariDec();  	// <变量声明>
void FuncDef();  	// <子函数定义>
void CompStmt(); 	// <复合语句>
void Parameter();   // <参数>
void ParamList();   // <参数表>
void MainFunc();    // <主函数>
void Express();     // <表达式>
void Item();        // <项>
void Factor();   	// <因子>
void Stmt();		// <语句>
void AssStmt();		// <赋值语句>
void CondStmt();	// <条件语句>
void Condition();	// <条件>
void LoopStmt();	// <循环语句>
void CallFunc();	// <子函数调用语句>
void VParamList();	// <值参数列表>
void StmtList();	// <语句序列>
void ReadStmt();	// <读语句>
void WriteStmt();	// <写语句>
void RtnStmt();		// <返回语句>
void voidFunc();	// 返回为空的函数

void AnaParameter();
void AnaCompStmt();
void AnaStmtList();
void AnaStmt();
void AnaProgram();
void AnaCondStmt();
void AnaLoopStmt();
void AnaMainFunc();

char *AnaExpress();
char *AnaItem();
char *AnaFactor();




////////////////////////////////////
/////// TOOL FUNCTIONS   ///////////
////////////////////////////////////
char *toString(int n);
int parseInt(char *str);
Table* CheckId(char *id,Table *head,int l); // 用于检查ID是否倍定义过
char *NextTemp();
char *NextLabel();
void Enter(Kind kind,Type type,char *name,int value,int level);//填符号表
void genMCode(char *op,char *add1,char *add2,char *add3);
void toAsm();
AddTable* search(AddTable * head, char *id);
char *NextStr();

void Destroy(AddTable* head);
void popReg();






extern char Sym[];
extern char sep[];
extern char *Symbol[];
extern FILE *fin,*fout,*errlog,*fout,*temp;
extern FILE *asm;
extern char keywords[10][10];
extern char *errmsg[];
extern Table *head1,*head2,*current,*tmp;
extern MCode *head,*tc;
extern int vx;
extern int serial;
extern int serial1;
extern int serial2;
extern int level;
extern int flag;
extern int sw;
extern int rtn;
extern int error;



extern char *code[];
extern char label1[],label2[],label3[];  // 用于保存标号.

⌨️ 快捷键说明

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