ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:87.42KB ,
资源ID:26486957      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/26486957.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(词法分析报告器地构造南邮编译原理实验一报告材料.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

词法分析报告器地构造南邮编译原理实验一报告材料.docx

1、词法分析报告器地构造南邮编译原理实验一报告材料实 验 报 告(2015 / 2016 学年 第 二 学期)课程名称编译原理实验名称词法分析器的构造实验时间2016年4月29日指导单位计算机软件教学中心指导教师学生姓名wujun班级学号学院(系)计算机学院、软件学院专 业计算机科学与技术实 验 报 告实验名称词法分析器的构造指导教师实验类型设计实验学时4实验时间2016.4.29一、 实验目的和要求1、实验目的:设计、编制、调试一个词法分析程序,对单词进行识别和编码,加深对词法分析原理的理解。2、实验要求:1)、允许用户自己输入源程序并保存为文件;2)、系统能够输出经过预处理后的源程序(去掉注释

2、、换行、空格等);3)、能够将该源程序中所有的单词根据其所属类型(整数、保留字、运算符、标识符等。定义的类C语言中的标识符只能以字母或下划线开头)进行归类显示,例如:识别保留字:if、int、for、while、do、return、break、continue等,其他的都识别为标识符;常数为无符号整形数;运算符包括:+、-、*、/、=、=、=、!=等;分隔符包括:,、;、(、)等;4)、实现文件的读取操作,而不是将文本以字符串形式预存于程序中。文本内容为待分析的类C语言程序。二、实验环境(实验设备) 硬件:计算机 软件:Visual C +6.0二、 实验原理及内容 1、实验内容:设计并实现一

3、个词法分析器,实现对指定位置的类C语言源程序文本文件的读取,并能够对该源程序中的所有单词进行分类,指出其所属类型,实现简单的词法分析操作。例如下面为一段C语言源程序: main() int a,b; a = 10; b = a + 20; 要求输出如下: (2,main) (5,() (5,)(5,) (5,)(5,)(5, )(1,int)(2,a)(5,,)(2,b)(5,;)(2,a)(4,=)(3,10)(5,;)(2,b)(4,=)(2,a)(4,+)(3,20)(5,;)(5,) 2、实验原理状态转换图 3、实验代码:实验代码:#include #include #include

4、#include #include#includestruct Char /创建一个结构用于存贮关键字 char a15;typedef struct Char CH;/定义关键字CH keyWord67=auto,break,case,cout,cin,char,const,continue,default, do,double,else,enum,endl,extern,float,for,goto,if,main, include,int,long,register,return,short,signed,sizeof,static, string,struct,switch,typed

5、ef,union,unsigned,void,stdio,while, cin,cout,catch,calss,ctype,stdlib,fstream,export,iostream, false,friend,inline,mutable,namespace,new,operator,private, protected,public,static_cast,template,this,throw,true,try, typename,using,virtual,asm;/检测是否为数字,是返回true,否则返回falsebool IsDigit(char A) if(A=0 & A=A

6、&ch=a&ch=z) return true; return false;/检测是否为分隔符,是则返回true,否则返回falsebool IsSeparator(char ch) if(ch =(|ch=)|ch =|ch =|ch=;|ch=,|ch=.| ch=:|ch=|ch=|ch=|ch=|ch=#|ch=_) return true; return false;/检测是否为关键字,是则返回true,否则返回falsebool IsKeyWord(char *a) int i = 0; for(i; i 67; i+) if (strcmp(a,keyWordi.a) = 0)

7、return true; return false;/预处理去掉注释、换行、空格等void Scanner(char s,char a) int i = 0,j = 0,k = strlen(s); for (i; i k; i +) if (si = / & si+1 =/) do i+; while(si != n); i-; else if (si = / & si+1 = *) do i+; while(si != / | si-1 != *); continue; else if (si = t | si = n | si = ?) aj+ = ; else aj+ = si; co

8、utn系统经过预处理后的输出(去掉注释和换行):endl; coutann; cout系统经过预处理后的输出(去掉注释、换行、空格等):endl; for (i = 0;i strlen(a); i+) if(ai = ) continue; else coutai; coutendlendlendl;void Handle(char s) /词法分析 char ch; for (int j = 0; j strlen(s); j+) char word20 = 0; int i = 0; ch = sj; if (ch = ) continue; else if (IsLetter(ch)

9、do wordi+ = ch; ch = s+j; while(IsLetter(ch)| IsDigit(ch)|ch=_); j-; wordi = 0; if(IsKeyWord(word) cout(1,word)endl; else cout(2,word)endl; else if(IsDigit(ch) do wordi+ = ch; ch = s+j; while(IsDigit(ch); j-; wordi = 0; cout(3,word)endl; else if(IsSeparator(ch) word0 = ch; cout(5,word)|word0=| word0

10、=&|word0=|) if(sj+1=word0 | sj+1=) word1 = s+j; cout(4,word)endl; else cout(4,word)endl; else if(word0=|word0=*|word0=/| word0=!|word0=%|word0=) if (sj+1 = =) word1 = s+j; cout(4,word)endl; else cout(4,word)endl; else if (word0 = ) if (sj+1 = n |sj+1 = t | sj+1=|sj+1=0) word1 = s+j; cout(4,word)endl

11、; else cout(4,word)endl; else cout(无法识别字符,word)endl; coutn;int main() int i; char b = 32,ch; FILE *fp; do i = 0; char s10000; char a10000 = 0; fp=fopen(code.txt,rb+); if(fp=NULL) coutCan not create fileendl; exit(0); fseek(fp,0,2); coutPlease input you code(end with two?):endl; do ch = getchar(); si

12、+ = ch; if(ch = n | ch= t ) for (int j =0; j 4;j+) fputc(b,fp); fputc(ch,fp); while(si-1 != ? | si-2 != ?); si = 0; Scanner(s,a); cout词法分析如下:endl; Handle(a); fclose(fp); while(true); return 0;4、实验测试和截图(1)、测试一截图输入代码: 输出结果: (2)测试二截图输入代码: 输出结果: 四、实验小结(包括问题和解决方法、心得体会、意见与建议等) 在本实验中,我进一步学习了如何运用输入输出流,对文件进行读写操作。了解了什么是词法分析,熟悉了词法分析器的构造,更加深入了对词法分析原理的理解。程序将字符分为五类:保留字、标识符、整数、运算符、分隔符,对使用者输入的程序代码进行识别、分析和编码,简单分析了词法。实验过程中开始时由于对换行符(n)、制表符(t)、和注释等处理不好导致实验失败,后来预处理时讲它们全部换成空格符和把注释去掉才成功。五、指导教师评语成 绩批阅人日 期

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1