📄 commstruct.h
字号:
#ifndef __CommStruct_HeaderFile_hth_
#define __CommStruct_HeaderFile_hth_
//token串结点结构定义
typedef struct __tokenode
{
unsigned char keycode; //种别码
unsigned int strId; //自身值:符号表的入口地址
__tokenode *next; //
}*PTokenNode,TokenNode;
//符号表中类型枚举定义
typedef enum __symbol_type
{
Identifier, //标识符
Char, //字符常数
Real, //数字常数-实型
Integer, //数字常数-整型
Bool //Bool型
}SType;
//符号表中种类枚举定义
typedef enum __symbol_kind
{
Simple, //简单变量
Array, //数组
Const, //常量
}SKind;
//符号子表结构定义
typedef struct __symbol_subtable
{
struct __name
{
unsigned int headp; //字符串表中首地址
unsigned char length; //在字符串中的长度
}name; //
SType type; //标识符或常数类型
SKind kind; //标识符或常数种类
double val; //数字常数值
BYTE *addr; //标识符入口地址
}SSubTable,*PSSubTable;
//符号表结构定义
typedef struct __symbol_table
{
PSSubTable sSubTable; //符号子表
unsigned int intSubTableSize; //符号子表长度
unsigned int intSubTableLen; //符号子表已用空间
char *stringTable; //字符串表
unsigned int intTableSize; //字符串表长度
unsigned int intTableLen; //字符串表已用空间
}STable,*PSTable;
//错误结构定义
typedef struct __error_
{
unsigned int intRows;
unsigned int intCols;
char *description;
__error_ *next;
}ErrorNode,*PErrorNode;
//文法符号类型枚举
typedef enum grammar_type_
{
Terminal, //终结符
Nonterminal, //非终结符
Other //结束占位符:可用于表示表达式结束
}GType;
//文法符号结构定义
typedef struct grammar_symbol_
{
GType sType; //符号类型
union __grammar_symbol_value_ //符号自身值
{
double dValue; //非终结符,运算结果
PTokenNode pToken; //终结符,须token字
}value; //符号自身值
char word; //产生式中的符号表示
grammar_symbol_ *next; //链表指针
}*PGSymbol,GSymbol;
//四元式操作符类型枚举
typedef enum __op_enum_
{
OPJump=0, //无条件跳转
OPJumpLarger=1, //大于时跳转
OPJumpLE=2, //大于等于时跳转
OPJumpNZero=3, //不等于零时跳转
OPJumpEqual=17, //等于时跳转
OPJumpUEqual=18, //不等于时跳转
OPJumpSmaller=4, //小于时跳转
OPjumpSE=5, //小于等于时跳转
OPLarger=6, //大于
OPSmaller=7, //小于
OPEqual=8, //等于
OPEvaluate=9, //赋值
OPUnequal=10, //不等于
OPPlus=11, //加
OPMinus=12, //减
OPMultiply=13, //乘
OPDivide=14, //除
OPProgram=15, //程序开始标识
OPSys=16 //程序结束标识
}EOP;
//四元式结构预定义
typedef struct four_symbol_ *PFSymbol,FSymbol;
typedef enum __ag_enum_
{
ST=0, //临时变量
PT=1, //token字
PF=2 //下一个四元式入口
}EAGType;
//四元式操作符和运算结果数据类型定义
typedef struct ag_struct_
{
char *des; //用于打印四元式的描述
EAGType type; //四元式操作符入口类型
union __ag_union_
{
double value; //临时变量
PTokenNode token; //token字
PFSymbol fSymbol; //下一个四元式入口
}value; //四元式操作符入口
}*PFSAG,FSAG;
//四元式结构定义
struct four_symbol_
{
unsigned long no; //编号
EOP op; //操作符
PFSAG ag1; //运算对象一
PFSAG ag2; //运算对象二
PFSAG result; //运算结果
four_symbol_ *next; //链表节点指针
};
//文法产生式结构定义
typedef struct grammar_production_symbol_
{
GType sType; //符号类型
char word; //符号表示
}*PGProduction,GProduction;
//标识符最大长度为10
#define MAXIDLEN 10
//定义NULL
#define NULL 0
//定义每行最大字符数
#define MAXLINE 250
//定义关键字的个数
#define KEYWORDCOUNT 60
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -