编译原理课设代码-5

编译原理课设(NEU)代码Symbol.h

代码有几处bug,另外当时开发的时候心太急,理论基础没有做好,导致代码有不可逆性的缺陷:符号表,大家可以将符号表结构修改一下
代码是分为多个文章中存放的
VS 2017 VC++环境
代码是分为6个部分,在个人主页中都可以找到

#pragma once
#include<iostream>
#include<string>
#include<list>

using namespace std;

class Symbol_table;	//符号表
class PFINL;	//函数表
class RINFL;	//struct 表
class typel;	//数据类型表

typedef struct struct_VALL
{
	int offset;//该变量相对于区头的偏移liang
	string var_name;//变量名  也可以为空  用于返回值
}struct_VALL;

struct A	//四元式的结构体
{
	string a1, a2, a3, a4;
}typedef struct_quattro;


class LEN	//长度
{
public:
	int len;
};
class VALL		//函数活动表  该活动表 有问题  没有偏移量  需要修正
{
public:

	int this_function_return_len;//函数的返回值长度 用于后期的赋值验证合法性
	int this_VALL_len;//VALL的总长度
	string  OLD_SP;	//用于存储返回上一次的SP
	int ret_exp;	//函数返回值 void返回值为0
	list<string> list_parameter;//形参链表
	list<string> list_tmp_var;//临时变量链表
	list<string> list_user_var;//临时用户链表
	list<struct_VALL> member;//一个VALL中的所有变量的带有偏移量的list集合
};
class PFINL	//函数表
{
public :
	string type_function;
	int OFF;	//过函自身数据相对于区头位置偏移
	int FN;		//参数个数
	string ENTRY;//函数入口地址
	list<Symbol_table> * PARAM;	//形参链表
	VALL * VALL_TABLE;		//VALL表
};

class _RINFL		//struct 表的一行数据  用于定义 struct 类型时  不用于定义struct变量
{
public:
	string MEMBER_NAME;	//struct的成员名
	int OFF;		//相对于记录区的偏移量
	typel *TP;		//指针 该成员类型指针
};
class RINFL			//struct 表
{
public:
	list<_RINFL> list_rinfl;
};
class typel		//数据类型表
{
public:
	string TVAL;	//类型代码 i 整型 void 空型  d结构型
	RINFL *TPIONT;	//根据数据类型不同,指向不同的结构体 
	// int  void  为NULL
	//类型指针  struct  数组等
};

class Symbol_table	//符号表
{
public:
	string NAME;	//标识符名
	string CAT;		//类型 函数  变量  类型定义 常量
	typel *TYPE;	//指向类型 itp vtp 结构体 数组等 这里规定 指向结构体赋值  其余为NULL
	void *ADDR;	//根据情况不同 分别指向 PFINL  CONS  LENL    函数表  常量表 长度表 
};

struct struct_tmp_offset_var
{
	string var_name;
	string offset;
}typedef struct_tmp_offset_var;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值