📄 zcompile.h
字号:
///////////////////////////////////////////////////////////////
// zCompile Class 0.14 (2003.12.30) [Head File]
// Author:Dwing
///////////////////////////////////////////////////////////////
#ifndef _ZCOMPILE_H_
#define _ZCOMPILE_H_
///////////////////////////////////////////////////////////////
#include<stdlib.h> //For <memset> <atoi>
#include<stdio.h> //For <sprintf>
#include<string.h> //For <strcmp>
///////////////////////////////////////////////////////////////
#define ISLETTER(c) ((c)>='A'&&(c)<='Z'||(c)>='a'&&(c)<='z')//判断是否是字母
#define ISNUMBER(c) ((c)>='0'&&(c)<='9') //判断是否是数字
#define ISCHAR(c) ((c)>=33 &&(c)<=126) //判断是否是字符
#define MAX_ASM 4096 //最多目标代码条数
#define MAX_ERR 256 //最多显示错误数
#define MAX_FORM 1024 //最大符号表长度
#define MAX_LEVEL 64 //最大符号表层数
#define MAX_SYMLEN 31 //最大符号长度
#define MAX_NUMLEN 5 //最大常数长度
#define MAX_NUMBER 65535 //最大常数
#define MAX_KEYWORD 13 //关键字数量
#define MAX_OPWORDA 8 //单字运算符数量
#define MAX_OPWORDB 3 //双字运算符数量
#define MAX_ENDWORD 5 //单字界符数量
#define MAX_ERROR 34 //错误类型数量
#define MAX_ASMWORD 8 //汇编指令条数
#define ERR_ERREND 0 //以下是错误号
#define ERR_NEEDNUM 2
#define ERR_NEEDEQL 3
#define ERR_NEEDSYM 4
#define ERR_NEEDEND 5
#define ERR_NOEND 9
#define ERR_NOTSEM 10
#define ERR_NODEFSYM 11
#define ERR_NOTVAR 12
#define ERR_NOTDEFOP 13
#define ERR_NOTSYM 14
#define ERR_NOTPROC 15
#define ERR_NOTTHEN 16
#define ERR_NEEDVAR 17
#define ERR_NOTDO 18
#define ERR_NOTRLOP 20
#define ERR_NOPROC 21
#define ERR_NOTRP 22
#define ERR_NOSYM 23
#define ERR_WRONGOP 24
#define ERR_OVERSYMLEN 25
#define ERR_OVERNUMLEN 26
#define ERR_NUMBER 27
#define ERR_NOTDEF 28
#define ERR_OVERLVL 29
#define ERR_OVERFORM 30
#define ERR_NOTPAREN 31
#define ERR_OVERASM 32
#define ERR_OVERERR 33
///////////////////////////////////////////////////////////////
typedef struct //符号描述结构体(含错误描述结构)
{
int type; //类型号(0:错误)
int id; //ID号(错误值)
int line; //所在行数
char name[MAX_SYMLEN+1]; //所取的词
}SYM;
///////////////////////////////////////////////////////////////
typedef struct //符号表
{
int type; //类型
int lvl; //层数
int adr; //地址/常数
char name[MAX_SYMLEN+1]; //名称
}FORM;
///////////////////////////////////////////////////////////////
typedef struct //汇编指令格式
{
char opr; //指令操作码
char lvl; //级数
unsigned short adr; //地址码/操作数
}ASM;
///////////////////////////////////////////////////////////////
typedef struct //错误结构体
{
int id; //错误号
int line; //出错行数
char name[MAX_SYMLEN+1]; //所取的词
}ERR;
///////////////////////////////////////////////////////////////
class zCompile //PL/0编译器类
{
private:
char *text; //PL/0文本指针
SYM sym; //取词结构
ASM asms[MAX_ASM]; //目标代码结构
int asmnum; //目标代码数量
ERR err[MAX_ERR]; //错误结构
int errnum; //错误数量
FORM form[MAX_FORM]; //符号表结构
int formnum; //符号表项数
int formlvl; //当前符号表层数
int formadr[MAX_LEVEL]; //当前各层符号表地址记数
private:
int getsym(); //取词 Return 0: No word
int addasm(char opr,char lvl,short adr);//产生目标代码
int adderr(char *name,int id); //产生错误
int formpush(char *name,int type,int id);//填表项
int formpop(); //退表项
int formget(char *name,FORM *fm); //取表项
int syn_block(); //分程序处理
void syn_statement(); //语句处理
void syn_expression(); //表达式处理
void syn_condition(); //条件式处理
void syn_term(); //项处理
void syn_factor(); //因子处理
public: //以下成员函数是与外壳的接口
zCompile();
void compile(char *txt); //编译源程序
int getasm(char *buf); //取得目标代码,返回指令条数
int geterr(char *buf); //取得错误信息,返回错误数量
};
///////////////////////////////////////////////////////////////
#endif
///////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -