编译原理实验 之 符号表
来源:互联网 发布:旅游管理在职硕士 知乎 编辑:程序博客网 时间:2024/05/17 06:46
这是本系列第一篇文章, 也是编译开始阶段的准备工作.
编译器首先都是进行的词法分析,而词法分析的基础就是符号表.
把不同类型的数据和其操作,属性都先预留下来,后面词法分析的时候可以用到.
这次的实验只是很简单的模拟而已,所以代码比较简单,编译实验真正的是在词法分析之后开始的.
先贴代码,有用的mark下就好.
#include <iostream>#define MAX_SIZE 100using 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<<"数组 "<<a.nam<<" 已存在"<<endl;return 1;}else {cout<<"数组 "<<a.nam<<" 不存在 "<<endl;return 0;}}bool Arra::arra_insert(Arra& a){if(arra_search(a)){ printf("是否覆盖 Y/N ?\n"); char an ; cin>>an; if(an == 'Y'||'y')arra_insertHelp(a); else return 0;}elsearra_insertHelp(a);return 1;}bool Arra::arra_insertHelp(Arra& a){ int h = myHash(a.nam); Arra_Hash_Table[h] = a; cout<<"插入成功!"<<endl; return true;}每种类型的数据都有自己的基本操作,我们的c++编译器其实也是这样做的,
比如函数,数组,变量,等等,都是有自己的属性的,只不过是我们看不到而已.
下次的就是词法分析过程了,其实挺简单的,只不过是代码比较长,希望对感兴趣的童鞋有帮助吧~
有啥意见的可以和我交流~
- 编译原理实验 之 符号表
- 编译原理之符号表
- 编译原理实验 之 词法分析
- 编译原理实验之词法分析
- 编译原理=符号表的认识
- 编译原理课程设计之无符号数四则运算词法分析
- 编译原理实验源代码
- 编译原理实验
- 编译原理课程实验
- 编译原理实验初步设计
- 编译原理实验一
- 电子科技大学-编译原理实验
- 编译原理实验
- 编译原理实验报告
- 编译原理实验手册
- 编译原理实验之用C模拟C++虚方法表机制
- 编译原理实验课反思之无知是一种罪
- 编译原理手记03-词法分析与符号表
- Cocos2d-x Action
- 字符串string和内存流MemoryStream及比特数组byte[]互转比较
- 在 Ubuntu 上安装和配置 OpenStack Nova
- 关于软件体系结构设计——给老师的一封邮件(及老师解答)
- 获取uboot for tiny210源码
- 编译原理实验 之 符号表
- Gentoo Linux--Layman的使用
- [Android]构建boot.img(二):kernel的拷贝与打包
- NBA 马刺 1:0 雷霆 观后感
- [Android]构建boot.img(一):root目录与ramdisk.img的生成
- 对android底层的研究【Android】
- [Android]构建boot.img(三):boot.img的生成与结构
- OTG中的ID脚风波释疑
- 常用的内部排序