⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 symtab.h

📁 内含源代码和编译实验报告
💻 H
字号:
#ifndef SYMTAB_H_
#define SYMTAB_H_

/******************************************
**符号表将是一张哈希表,SIZE为哈希表的大小。
*******************************************/
#define SIZE	211

/*********************************************
**SHIFT是哈希函数处理过程中,字符串中字符的权值,
**例如:十进进制数中123中,前一个比后一个权值大10
*************************************************/
#define SHIFT	4

/*****************************************************
**类名:LineListRes,BucketListRes
**描述:BucketListRes是哈希表的一个元素,记录一个
**      变量的名字,所以行数,及占用的内存位置,以及
**      所属的范围(全局还是某一个函数),若一个变量
**      不是第一次出现,则用LineListRes记录。

********************************************************/
struct	CLineListRes{
	int					m_ilineno;					//变量所在行数
	struct CLineListRes	*m_Cnext;
};

struct CBucketListRes{
	char					m_strName[MAXTOKENLEN+1];	//变量名
	char					m_strScope[MAXTOKENLEN+1];	//变量的作用域范围。
	TokenType				m_Entype;					//变量类型。
	struct CLineListRes		*m_Clines;					//记录变量依次出现的位置及所属范围
	int						m_imemloc;		//内存位置(实际上记录这是目前为止的第几个变量。)
	struct CBucketListRes	*m_Cnext;
};

/***********************************************************
**类名:Csymboltab
**描述:这是一张完整的符号表,实现表的插入,查找,打印功能。
********************************************************/
class Csymboltab{
private:
	struct CBucketListRes*		hashTable[SIZE];		//作为符号表的哈希表。
	inline int	hash(const char * pa_strkey);					// 哈希表查找函数。
	inline void Deletesybtab(struct CBucketListRes* pa_tab);	
												//这两个函数被析构函数调用,完成符号表的销毁。
	inline void Deletesybtab2(struct CLineListRes* pa_tab2);
public:
	void st_insert(char* pa_strname, char* pa_strScope,TokenType pa_type,
								int pa_ilineno, int pa_iloc);
	int st_lookup(char* pa_strname, char* pa_strScope);
	void st_insert(char* pa_strname, TokenType pa_type, //为goto语句重载的两个没有作用域限制
								int pa_ilineno, int pa_iloc);//的函数。
	int st_lookup(char* pa_strname);
	TokenType st_lookuptype(char* pa_strname, char* pa_strScope);
	void printSymtab(void);
	Csymboltab();
	~Csymboltab();
};

#endif

⌨️ 快捷键说明

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