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 + -
显示快捷键?