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