编译原理实验 之 符号表

  这是本系列第一篇文章, 也是编译开始阶段的准备工作.


  编译器首先都是进行的词法分析,而词法分析的基础就是符号表.


 把不同类型的数据和其操作,属性都先预留下来,后面词法分析的时候可以用到.


 这次的实验只是很简单的模拟而已,所以代码比较简单,编译实验真正的是在词法分析之后开始的.


 先贴代码,有用的mark下就好.

#include 

#define MAX_SIZE  100


using namespace std;


int myHash(const char * expr)                   //哈希函数
{
	unsigned long h =0;
	while(*expr)
	{
		 h = (h<<4)+*expr++;
		 unsigned long g = h&0xF0000000L;
		 if(g)h^=g>>24;
		 h &= ~g;
	}
	return h%10;
}



struct Arra                                      //数组类型
{
public:
	//类型,个数,地址,维数
	int num; 
	int colum;
	int type;
    long addr;
	const char * nam;
	Arra * next;
	bool arra_insert(Arra& a);                  //插入
	bool arra_insertHelp(Arra& a);					//插入帮助
    bool arra_search(Arra& a);			//查找
} *Alist;
Arra Arra_Hash_Table[MAX_SIZE];

bool Arra::arra_search(Arra& a)
{
    int h = myHash(a.nam);
	if(Arra_Hash_Table[h].nam-a.nam == 0)
	{
	cout<<"数组 "<>an;
	 if(an == 'Y'||'y')arra_insertHelp(a);
	 else return 0;
	}
	else
	arra_insertHelp(a);
	return 1;
}

bool Arra::arra_insertHelp(Arra& a)
{
   int h = myHash(a.nam);
   Arra_Hash_Table[h] = a;
   cout<<"插入成功!"<
每种类型的数据都有自己的基本操作,我们的c++编译器其实也是这样做的, 


比如函数,数组,变量,等等,都是有自己的属性的,只不过是我们看不到而已.


下次的就是词法分析过程了,其实挺简单的,只不过是代码比较长,希望对感兴趣的童鞋有帮助吧~


有啥意见的可以和我交流~

你可能感兴趣的:(c++语言)