编译方法实验报告

编译方法实验报告

ID:29597250

大小:409.00 KB

页数:15页

时间:2018-12-21

编译方法实验报告_第1页
编译方法实验报告_第2页
编译方法实验报告_第3页
编译方法实验报告_第4页
编译方法实验报告_第5页
资源描述:

《编译方法实验报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、编译方法实验报告姓名黄军斌学号20083414班级软件0806指导教师刘红娟实验名称扫描器设计以及中间代码生成开设学期2010-2011第一学期实验时间第18,19周评定成绩评定人签字评定日期东北大学软件学院2006年4月实验1扫描器的设计实验目的一、实验内容1.根据实验指导书熟悉一个扫描器(词法分析程序)的实现。2.阅读理解参考代码3.调试程序4.改进程序二、实验原理及基本步骤1.设计有限自动机:a)根据有限自动机状态转换图生成状态转化矩阵b)设计查询状态转换表的函数模块2.设计词法分析器:a)定义关键字以及关键字表和界符表

2、b)定义必要的数据结构c)定义具体的各状态语义动作d)主函数的设计3.设计具体的函数模块:a)自动机动作模块voidact(ints),主要用于根据状态序号并实现正确的语义动作。其中s为状态序号。b)状态转化表的查询模块intfind(ints,charch),其中s为当前状态,ch为当前字符,返回值为根据状态转化表查询出的下一个状态。c)查询关键字表模块intReserve(char*str),其中str为当前字符串,返回值为token中的code字段。若找不到,返回0。d)插入常数/标识符模块intInsertConst(

3、doublenum)、intInsertID(char*str)。其基本逻辑都为:首先查询常数表/标识符表,找到则返回其位置,找不到则在末尾插入,并返回位置。e)主程序main的设计:初始化;打开用户源程序文件;while(文件未结束){读入一行到w[i],i=0;do//处理一行,每次处理一个单词{滤空格,直到第一个非空的w[i];i--;s=1;//处理一个单词开始while(s!=0)//拼单词并生成相应Token{act(s);//执行qsif(s>=11&&s<=14)//一个单词处理结束break;i++;//ge

4、tchar()s=find(s,w[i]);}if(s==0)词法错误;}while(w[i]!=换行符);}一、数据结构设计①状态转换矩阵:intaut[10][7]={2,0,0,0,8,9,15,2,3,5,11,0,0,11,4,0,0,0,0,0,0,4,0,5,11,0,0,11,7,0,0,6,0,0,0,7,0,0,0,0,0,0,7,0,0,11,0,0,11,8,0,0,0,8,0,12,0,0,0,0,0,10,14,0,0,0,0,0,0,13};②关键字表:charkeywords[30][12]={

5、“program”,”begin”,”end”,”var”,”while”,”do”,”repeat”,”until”,”for”,”to”,”if”,”then”,”else”,“;”,”:”,”(“,”)”,”,”,”:=”,”+”,”-“,”*”,”/”,”>”,”>=”,”==”,“<”,“<=”};③符号表:charID[50][12];//表中存有源程序中的标识符④常数表:floatC[20];⑤其它变量:token设计思想:code为token的类型,1为标识符,2为常数,3以及以后为关键字在keywords表中

6、的位置(从3开始);value为token的值,为标识符和常数类型时,value值为token在相应表中的位置;为关键字类型时,value值统一为0;structtokentok[100];//Token数组ints;//当前状态intn,p,m,e,t;//尾数值,指数值,小数位数,指数符号,类型floatnum;//常数值charw[50];//源程序缓冲区inti;//源程序指针,当前字符为w[i]charstrTOKEN[12];//当前已经识别出的单词structmap:map设计思想:当前字符到自动机转换表列标号的

7、映射:即通过当前字符(char类型)映射成i+-*/();是一种符号个例到符号类型代号(1,2,3,4,5,6;有利于自动机的机内实现)的转化与之相关的数据结构还包括:其中str代表被映射的内容,col代表映射后在自动机表中的列值一、运行结果分析1.测试以及运行结果分析:a)运行结果测试文件test.txt以及运行结果截图如下:图表1test.txt图表2test1运行结果图表3关键字表中各符号标号图表4首位置插入“.”图表5插入"."的运行结果图表6“>==”.txt图表7编译器报告“>==”词法错误图表8">=="错误在自

8、动机的体现a)运行结果分析i.如图表1所示,当扫描器遇到字符串“1.e2”时,程序能够成功将其转化为120的数字(如图表2所示)ii.程序成功识别出关键字“var”以及“:=”,且产生的token序列的code值与实验指导书中定义(如图表3)相符i.对test1.txt做适当

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

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

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