编译原理实验 查填符号表(含源代码和运行结果)

编译原理实验 查填符号表(含源代码和运行结果)

ID:41055479

大小:161.00 KB

页数:10页

时间:2019-08-15

编译原理实验 查填符号表(含源代码和运行结果)_第1页
编译原理实验 查填符号表(含源代码和运行结果)_第2页
编译原理实验 查填符号表(含源代码和运行结果)_第3页
编译原理实验 查填符号表(含源代码和运行结果)_第4页
编译原理实验 查填符号表(含源代码和运行结果)_第5页
资源描述:

《编译原理实验 查填符号表(含源代码和运行结果)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、《编译原理》实验报告实验1查填符号表姓名学号班级计科1001班时间:2012/3/22地点:文波同组人:无指导教师:朱少林实验目的1、运用所学知识,选择语言、选择算法(数据结构),编程实现符号表管理程序。2、熟悉编译过程,训练编写程序的能力,为后续实验积累经验。实验内容1、运用所学知识,编程实现符号表管理程序。读出源程序中与C语言词法规定相一致的标识符,并在符号表中进行查找,若存在则输出该标识符及其编号和位置;否则将其填入符号表,并分配编号,确定位置,输出该标识符。2、输出标识符表。实验环境软件:VC++6.0实验前准备1、方案设计

2、:①准备模拟数据:由于是识别符合c语言规定的标识符,故本实验中使用“测试文件.c”②写出c语言标识符的正规式定义:letter_→A

3、B

4、C

5、…Z

6、a

7、b

8、…z

9、_digit→0

10、1

11、…9id→letter_(letter_

12、digit)*③画出不确定的有限自动机不确定的有限自动机如下:进行化简:A={1}B={2,3,4,5,9}C={3,4,5,6,8,9}D={3,4,5,7,8,9}状态转换表如下:状态letter_digitABBCDCCDDCD进行化简:{A}{B,C,D}化简后的确定有限自动机如下:①程序思想:该实验重

13、点是构造识别标识符的函数。程序中,使用的数据结构如下:structrecord{charname[20];};typedefstructrecordRECORD;record是用来记录标识符的名字,并且规定标识符的长度最大为20structinfor//记录符号表的相关信息{structrecord*head;intlength;//记录符号表的长度};typedefstructinforINFOR;infor是用来指向record结构体的指针和符号表的长度,这个结构体主要是用于比较标识符并将识别到的标识符写入分析结果文件中即本实验

14、中的“search_table”函数,该函数并没有直接把标识符写到文件,而是在该函数之外,新建一个文件用来放符号表,然在后来打印符号表的同时把打印的结果写该文件中去。该程序中的“search_table”函数判断是否为新的标识符的方法就是把识别的一个标识符与已经识别的一一比较看是否相同,如不相同则表长度加1,并将该标识符填入表中while(j

15、eststring);//point[j].line=j;p->length++;}1、程序设计#include"stdio.h"#include"stdlib.h"#include"string.h"structrecord{charname[20];};typedefstructrecordRECORD;structinfor//记录符号表的相关信息{structrecord*head;intlength;//记录符号表的长度};typedefstructinforINFOR;voidsearch_table(char*test

16、string,INFOR*p,FILE*f)//查填符号表函数,p为指向结构体的指针{inti=p->length;intj=0;RECORD*point;point=p->head;while(jlength++;}printf("标识符%s在符号表的第%d行",tests

17、tring,j+1);fprintf(f,"%st%5d",teststring,j+1);//将新的标识符写入文件分析结果文件f中return;}voidmain(){charreadchar;//从文件中读到的字符charteststr[20];//存放标识符charlinkstr[2]={0};//用于把字符readchar连接到teststrFILE*fp;fp=fopen("测试文件.c","r");if(fp==NULL){printf("打开文件失败!");exit(0);}//打开测试文件fpFILE*resu

18、lt;result=fopen("结果.txt","w+");//新建打开一个存放分析结果的文件result//fclose(result);这个命令使下面调用的search_table函数不能将分析结果写入“结果.txt”//,因为

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。