📄 symtab.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 + -