?? 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 + -