编译原理实验报告 .docx

上传人:哈**** 文档编号:136594889 上传时间:2020-06-29 格式:DOCX 页数:22 大小:175.57KB
返回 下载 相关 举报
编译原理实验报告 .docx_第1页
第1页 / 共22页
编译原理实验报告 .docx_第2页
第2页 / 共22页
编译原理实验报告 .docx_第3页
第3页 / 共22页
编译原理实验报告 .docx_第4页
第4页 / 共22页
编译原理实验报告 .docx_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《编译原理实验报告 .docx》由会员分享,可在线阅读,更多相关《编译原理实验报告 .docx(22页珍藏版)》请在金锄头文库上搜索。

1、编译原理实验报告姓名:学号:班级:学院:南昌大学信息工程学院计算机系2014年6月目录实验一3实验二8实验三1511实验1词法分析程序的设计学生姓名: 学 号: 专业班级:_实验成绩:实验类型:验证综合口设计口创新实验日期:、实验目的掌握计算机语言的词法分析程序的开发方法。二、实验内容编制一个能够分析三种整数、标识符、主要运算符和主耍关键字的词法分析程序。三、实验要求1、根据以下的正规式,编制正规文法,I田I出状态图;标识符V字母(V字母|v数字字符)*十进制整数 0| (1|2卩|4|5|6|7|8|9) (0|1|2卩|4|5|6|7|8|9) *如有余力,则进一步分析八进制和十六进制整数

2、,其正规式如下:八进制整数0 (1|2卩|4|5|6|7)(0|1|2卩|4|5|6|7) *十六进制整数Ox (0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f) 1运算符和界符 关键字+ .*/ = = main if then else while do(); int(可根据需要添加)2、根据状态图,设计词法分析函数int scan(),完成以下功能:1) 从文本文件中读入测试源代码,根据状态转换图,分析出一个单词,2) 以二元式形式输出单词单词种类,单词属性其中单词种类用整数表示:0:标识符1:十进制整数2

3、:八进制整数3:十六进制整数运算符和界符,关键字釆用一字一符,不编码其中单词属性表示如下:标识符,整数由于采用一类一符,属性用单词表示运算符和界符,关键字采用一字一符,属性为空3、编写测试程序,反复调用函数scan(),输出单词种别和属性。四、实验环境PC微机DOS操作系统或Windows操作系统Turbo C程序集成环境或Visual C卄程序集成环境五、实验步骤1根据正规式,画出状态转换图;2. 根据状态图,设计词法分析算法;3. 采用C语言,设计函数scan(),实现该算法;FILE *outputFile; 输出文件4. 编制测试程序(主函数main); 代码如下:# include#

4、 include# include#define SYMBOL CODE 0/标识符编码0#define NUMCODE1/数字编码1/可识别的关键字char keywordstab8 30=“main”,“else,rint”,” return”,“void”,“while”;char ch;接受字符char name30=nn;FILE *sourceFile; 源文件void isNumber();void isOthers();void isKeyword();void output_keyword()printf(n 关键字:n,name,H-H);void output_symbo

5、l()printf(n 标识符:nH;,0,name);void output number()printf(n 数字:nn rename);namek=,0,;/初void output_others()始化变量名while(ch=W)&(chv=z)printf(n 其他:nH,name/-n);|(ch=,A,) & (chv=Z) | ch=0/& ch9)/1void scan()namei+ = ch;/把标识符名字存入数组sourceFile = fdpen(nprogram.txtn/rn); /ch = fgetc(sourceFile);/读以读取方式打开源文件取下一个字符

6、if sourceFile = NULL)iprintf(nfile open errornn);exit(O);for(i=0; i8; i+)outputFile = fbpen(noutput.txt,7,wH); /fbr(j=O; j=,a, & ch=A& ch=!0& ch=9)如果是关键字则跳出外循环isNumber();break;elseisOthers();if(flag=O)是关键字fclose(sourceFile);fclose(outputFile);output_keyword();/输出关键字邙艮于篇幅输出函数没有放上来)/ 二一else/ 不void isK

7、eyword()是关键字int i=0, j=0, k=0;output_symbol();/输出标int flag = 0;识符fbr(k=O; k:case:int i=0;chifor(i=0; i=f0& ch=9)ch;namel=namei+ = ch;,ch = fgetc(sourceFile);chfgetc(sourceFile); / 读取下一个字符output_number();output_othersO;break;/elsevoid isOthers()name0=char chi;ch;int i;fdr(i=O; i45 thendata=data+01; e

8、lsedata=datal;l CAUsersKAdministratorXDesktopXiXDebugVscan.exe*continua t-a d f 25h 1 1 io - 9 - uito o - o - Go- o - 1 1 : 二 :+ 1 ; : : = : 1 字符 Y 字符 符 y 字符 y符:$ 键讽他弄他P键识fe:lR- 3 e a s d1 atadk -y ,n ;a六、思考题1、词法分析能否采用空格来区分单词?答:不能。程序中分割单词的不仅仅是空格,还可以是等运算符 或界定符。2、程序设计中哪些环节影响词法分析的效率?如何提高效率?答:例如在判断是否为关键

9、字吋,方法是把单词全部读取并存放在一个字符数组后再逐 个与关键字表匹配,这样做可能效率比较低,若能在读取的同时判断可能会提高效率。实验二 语法分析程序的设计(1)学生姓名: 学 号: 专业班级:实验类型:口验证综合设计口创新 实验日期:实验成绩:一、实验目的通过设计、编制、调试一个典型的语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构分析,进一步掌握常用的语法分析中预测分析方法。二、实验内容设计一个文法的预测分析程序,判断特定表达式的正确性。三、实验要求1、给出文法如下:GEE-T|E+T;T-F|T*F;F-i|(E);2、根据该文法构造相应的LL(1)文法及LL(1)分析

10、表,并为该文法设计预测分析程序, 利用C语言或C+语言或Java语言实现;3、利用预测分析程序完成下列功能:1)手工将测试的表达式写入文本文件,每个表达式写一行,用“表示结束;2)读入文本文件中的表达式;口KX III3)调用实验一中的词法分析程序搜索单词;4)把单词送入预测分析程序,判断表达式是否正确(是否是给出文法的语言), 若错误,应给出错误信息;5)完成上述功能,有余力的同学可以进一步完成通过程序实现对非LL(1)文法到 LL (1)文法的自动转换(见实验二附加资料1)。四、实验环境PC微机Windows操作系统Visual C+程序集成环境五、实验步骤1. 分析文法,将给出的文法转化为LL(1)文法;GEE-T|E+T;T-F|T*F;对应的LL(1)文法为:E-TE1El-+TEl | E

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

当前位置:首页 > 大杂烩/其它

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