📄 global.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 + -