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