合肥工业大学编译原理实验报告(完整代码版)

上传人:pu****.1 文档编号:554943186 上传时间:2022-07-31 格式:DOC 页数:32 大小:228KB
返回 下载 相关 举报
合肥工业大学编译原理实验报告(完整代码版)_第1页
第1页 / 共32页
合肥工业大学编译原理实验报告(完整代码版)_第2页
第2页 / 共32页
合肥工业大学编译原理实验报告(完整代码版)_第3页
第3页 / 共32页
合肥工业大学编译原理实验报告(完整代码版)_第4页
第4页 / 共32页
合肥工业大学编译原理实验报告(完整代码版)_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《合肥工业大学编译原理实验报告(完整代码版)》由会员分享,可在线阅读,更多相关《合肥工业大学编译原理实验报告(完整代码版)(32页珍藏版)》请在金锄头文库上搜索。

1、 计算机与信息学院 编译原理 实验报告专 业 班 级 信息平安13-1班 学生及学号 马骏 2013211869 课程教学班号任 课 教 师 宏芒 实验指导教师 宏芒 实验地点 实验楼机房 2015 2016 学年第 二 学期实验1 词法分析设计一、 实验目的 通过本实验的编程实践,使学生了解词法分析的任务,掌握词法分析程序设计的原理和构造方法,使学生对编译的根本概念、原理和方法有完整的和清楚的理解,并能正确地、熟练地运用二、 实验要求 1、编程时注意编程风格:空行的使用、注释的使用、缩进的使用等。2、将标识符填写的相应符号表须提供应编译程序的以后各阶段使用。 3、根据测试数据进展测试。测试实

2、例应包括以下三个局部: u 全部合法的输入。 u 各种组合的非法输入。 u 由记号组成的句子。 4、词法分析程序设计要求输出形式: 例:输入VC+语言的实例程序: If i=0 then n+; a= 3b %); 输出形式为: 单词 二元序列 类 型 位置行,列 单词种别,单词属性for (1,for ) 关键字 1,1 i ( 6,i ) 标识符 1,2 = ( 4,= ) 关系运算符 1,3 12 0 ( 5,0 ) 常数 1,4 then ( 1,then) 关键字 1,5 n (6,n ) 标识符 1,6 + Error Error 1,7 ; ( 2, ; ) 分界符 1,8a (

3、6,a ) 标识符 2,1 = (4,= ) 关系运算符 2,2 3b Error Error 2,4 % Error Error 2,4 ) ( 2, ) ) 分界符 2,5 ; ( 2, ; ) 分界符 2,6 三、 实验容用 VC+/VB/JAVA 语言实现对 C 语言子集的源程序进展词法分析。通过输入源程序从左到右对字符串进展扫描和分解,依次输出各个单词的部编码及单词符号自身值;假设遇到错误那么显示“Error,然后跳过错误局部继续显示 ;同时进展标识符登记符号表的管理。 以下是实现词法分析设计的主要工作: 1从源程序文件中读入字符。 2统计行数和列数用于错误单词的定位。 3删除空格类

4、字符,包括回车、制表符空格。 4按拼写单词,并用码,属性二元式表示。(属性值token的机表示) 5如果发现错误那么报告出错 7 6根据需要是否填写标识符表供以后各阶段使用。四、实验步骤1、根据流程图编写出各个模块的源程序代码上机调试。 2、 编制好源程序后,设计假设干用例对系统进展全面的上机测试,并通过所设计的词法分析程序;直至能够得到完全满意的结果。 3、书写实验报告 ;实验报告正文的容: u 功能描述:该程序具有什么功能? u 程序构造描述:函数调用格式、参数含义、返回值描述、函数功能;函数之间的调用关系图。 u 详细的算法描述程序总体执行流程图 。 u 给出软件的测试方法和测试结果。

5、u 实验总结 设计的特点、缺乏、收获与体会。 五、实验截图先创立salaryfile.txt文件输入If i=0 then n+; a= 3b %);六、 核心代码#include#include#include#include using namespace std;const char* salaryfile=salaryfile.txt;const int max=40;string idmax=do,end,for,if,printf,scanf,then,while;/关键字表string smax=,;,(,),+,-,*,/,=,;/分界符表 算数运算符表 关系运算符表strin

6、g kmax;/ 标识符string cimax;/ 常数int fjfpoint=5;/分界符表尾int mathpoint=9;/算数运算符表尾int cipointer=0;/常数表尾int idpointer=0;/关键字表尾int kpointer=0;/标识符表尾int fjf;/0 不是分界符 1是int rowy=1;/识别输入行位置int rowx=1;/识别输入列位置int outkey=0;/打印控制 0为数字后有字母 其他可以void searcht(int i,string m)/根据已识别的首字母识别字符串/coutenter searcht!endl;int x;

7、if(i=0)/首字符是字母识别关键字/cout a word!endl;for(x=0;xmax;x+)if(idx=m)cout(1,idx) 关键字 (rowy,rowx)endl;break;if(x=max)/不是关键字再识别标识符for(x=0;xmax;x+) if(kx=m) cout(6,m) 标识符 (rowy,rowx)endl;break; if(x=max)/标识符表没有时插入标识符cout(6,m) 标识符 (rowy,rowx)endl;kkpointer=m;kpointer+;if(i=1)/识别常数/cout a number!endl;for(x=0;xm

8、ax;x+)if(cix=m)cout(5,x)endl;break;if(x=max) cout(5,m) 常数 (rowy,rowx)endl;cicipointer=m;cipointer+;if(i=2)/识别 分界符 算数运算符 关系运算符/cout a signal!endl;for(x=0;xmax;x+)if(sx=m)break;/x-;if(x5&x10)if(outkey=1) cout(3,sx) 算数运算符 (rowy,rowx)9&xmax-1)if(outkey=1) cout(4,sx) 关系运算符 (rowy,rowx)endl; outkey=0;fjf=0;if(x=max)if(outkey=1)coutError Error (rowy,rowx)=48&t64&t96&t123) searcht(0,sn);else searcht(2,sn);void split(string s)/分割字符串/coutsendl;string nowmax;string sn;int nowpointer=0;int i=0;int x;int sign=2;/非法数字标志int diannumber=0;/数中点的个数for(x=0;x64&sx96&sx=48&sx0&sx=46&sign=

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号