📄 complier.h
字号:
/******************************************************************************
*所属模块名:递归下降分析器
*
*功能:定义本模块所需数据类型和全局变量
*
*开始时间: 2004.10.29
*
*修改时间:
*
*完成时间: 2004.12.1
*
*作者: 邸晓峰,胡彬,宋如强
*
*
*******************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#include <stack>
#include <queue>
#include <ctype.h>
using namespace std;
#define true 1
#define false 0
typedef struct Duatype{
char* value; //单词符号名首址(动态分配内存)
int index; //相应编号
struct Duatype* next; //指向下一项的指针
}Duatype;
typedef struct DuaDualist{
Duatype* head;
Duatype* tail;
}DuaDualist;
typedef struct variable_item{
char* vname; //变量名首址(动态分配内存)
int plevel; //变量所在过程的层次
int relposition; //变量在其过程中的相对位置(即第几个变量)
}vitem;
typedef struct variable_table{
vitem table[50]; //变量表
int first; //正确填入的标记指针
int last; //未说明的变量"倒填"时的标记指针
}vtable;
typedef struct procedure_item{
char* pname; //过程名首址(动态分配内存)
int paranum; //参数个数
int variablenum; //变量个数(包括参数)
int firstinvtable; //第一个变量在变量表中的位置(下标)
int plevel; //过程嵌套深度
int outposition; //直接外过程在过程表中的位置(下标)
int quaterposition; //本过程第一条四元式地址
}pitem;
typedef struct procedure_table{
pitem table[20]; //过程名表项数组
int pointer; //指针
}ptable;
typedef struct stack_item{
int index; //过程所在过程名表的表项
struct stack_item* next;
}stack_item;
typedef struct my_stack{ //过程栈
stack_item* base;
stack_item* top;
}my_stack;
typedef struct Operand //结构体:操作数
{
char *name; //单词符号名首址(动态分配内存)
int type; //变量:0;常数:1;临时变量:2。
int offset; //变量:该过程第几个变量;常数:常数值;临时变量:第几个临时变量。
int rlevel; //相对层差=使用变量的过程层数-定义变量的过程层数。
}Operand;
typedef struct Quatype //结构体:四元式
{
int strOperator; //操作码(编码代替)
Operand opr1; //第一操作数
Operand opr2; //第二操作数
Operand opr3; //第三操作数
}Quatype;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -