symboltable.h

来自「pl0文法编译器」· C头文件 代码 · 共 77 行

H
77
字号
#ifndef __SYMBOLTABLE_H
#define __SYMBOLTABLE_H

#include "SymSet.h"
#include "PL0Compiler.h"
#include <string>
using namespace std;

/***************************符号表管理***********************************/
/*说明:																	*/
/*作者:																	*/
/*时间:																	*/
/*版本:																	*/
/************************************************************************/

struct table_type
{
	string name;
	object kind;
	Symbol type;
	int numOfBlock;
	int level;
	union
	{
		double Val;
		const char *sVal;
		int address;
	};
};


class SymbolTable
{
public:
	SymbolTable(PL0Compiler *p);
	table_type getTable(int i){return table[i];}

public:
	//添符号表
	void enter(object k, Symbol s);
	//进入新的函数或过程块时初始化符号表
	void setTable();
	//退出函数或过程块时重置上一级符号表设置,将参数lev减一,并去除函数名和地址内容
	void rsetTable();
	//检查变量在符号表中的位置,若存在返回里调用块最近的变量在符号表中的位置,否则返回-1
	int position(string tokenName);
	//反填函数名,参数和变量类型
	void typeFill(Symbol t, object k);
	//打印符号表内容
	void list();
	//检查函数名是否在符号表中存在,若存在返回在符号表中的位置否则返回-1
	int funcproNameCheck(string tempname, object k);
	int funcproNameCheck(string tempname);
	//查询函数的参数数目
	int noOfPara(string name, object k);
	int noOfPara(string name);

	//查询参数类型
	Symbol typeOfPara(string name, int n, object k);
	//检查同一块内是否有同名变量或常量
	bool nameCheck(string tempName);
	//返回一个活动记录的大小
	int sizeOfBBlock(string tempName,object k);
	int sizeOfBBlock();
	void setNumOfBlock(object k);
	void setFunProAdr(int adr);
	int findRecentFunPro();

private:
	table_type table[MAX_TABLELENGTH];
	int tx[MAX_LEV+1];
	int lev;

	PL0Compiler *pl0Compiler;
};

#endif//SymbolTable.h

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?