好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

7406编号词法分析器的构造 南邮2016 编译原理实验一报告.pdf

13页
  • 卖家[上传人]:玩***
  • 文档编号:143875910
  • 上传时间:2020-09-02
  • 文档格式:PDF
  • 文档大小:182.16KB
  • / 13 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 实实 验验 报报 告告 ((2015 / 2016 学年学年 第第 二二 学期)学期) 课程名称编译原理 实验名称词法分析器的构造 实验时间2016年4月29日 指导单位计算机软件教学中心 指导教师 学生姓名wujun班级学号 学院(系) 计算机学院、 软件 学院 专 业 计算机科学 与技术 - 1 - 实实 验验 报报 告告 实验名称实验名称词法分析器的构造指导教师指导教师 实验类型实验类型设计实验学时实验学时4实验时间实验时间2016.4.29 一、 实验目的和要求一、 实验目的和要求 1、实验目的:、实验目的: 设计、编制、调试一个词法分析程序,对单词进行识别和编码,加 深对词法分析原理的理解 2、实验要求:、实验要求: 1)、允许用户自己输入源程序并保存为文件; 2)、 系统能够输出经过预处理后的源程序 (去掉注释、 换行、 空格等) ; 3)、能够将该源程序中所有的单词根据其所属类型(整数、保留字、 运算符、标识符等定义的类 C 语言中的标识符只能以字母或下划线开 头) 进行归类显示, 例如 : 识别保留字 : if、 int、 for、 while、 do、 return、 break、continue 等,其他的都识别为标识符;常数为无符号整形数; 运算符包括 : +、 -、 *、 /、 =、 、 =、 <=、 !=等 ; 分隔符包括 : ,、 ;、 、 、 (、 ) 等; 4)、实现文件的读取操作,而不是将文本以字符串形式预存于程序 中。

      文本内容为待分析的类 C 语言程序 二、实验环境实验环境(实验设备实验设备) 硬件:计算机 软件:Visual C ++6.0 - 2 - 二、 实验原理及内容二、 实验原理及内容 1、实验内容:1、实验内容: 设计并实现一个词法分析器,实现对指定位置的类 C 语言源程序文本文 件的读取,并能够对该源程序中的所有单词进行分类,指出其所属类型,实 现简单的词法分析操作 例如下面为一段 C 语言源程序: main() int a,b; a = 10; b = a + 20; 要求输出如下: (2,main) (5,() (5,)) (5,)) (5,)) (5,)) (5, ) (1,int) (2,a) (5,,) - 3 - (2,b) (5,;) (2,a) (4,=) (3,10) (5,;) (2,b) (4,=) (2,a) (4,+) (3,20) (5,;) (5,) 2、实验原理状态转换图 2、实验原理状态转换图 - 4 - 3、实验代码:3、实验代码: 实验代码:实验代码: #include #include #include #include #include #include struct 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,typedef,union,unsigned,void,stdio,while, cin,cout,catch,calss,ctype,stdlib,fstream,export,iostream, - 5 - false,friend,inline,mutable,namespace,new,operator,private, protected,public,static_cast,template,this,throw,true,try, typename,using,virtual,asm; //检测是否为数字,是返回 true,否则返回 false bool IsDigit(char A) if(A=0 return false; //检测是否为分隔符,是则返回 true,否则返回 false bool IsSeparator(char ch) if(ch ==(||ch==)||ch ==||ch ==||ch==;||ch==,||ch==.|| ch==:||ch==||ch==||ch==||ch==||ch==#||ch==_) return true; return false; //检测是否为关键字,是则返回 true,否则返回 false bool IsKeyWord(char *a) int i = 0; for(i; i < 67; i++) if (strcmp(a,keyWordi.a) == 0) 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 == / - 6 - while(si != n); i--; else if (si == / while(si != / || si-1 != *); continue; else if (si == t || si == n || si == ?) aj++ = ; else aj++ = si; cout<

      了解了什么是词法分析,熟悉了词法分析器的构造,更加 深入了对词法分析原理的理解 程序将字符分为五类 : 保留字、 标识符、 整数、运算符、分隔符,对使用者输入的程序代码进行识别、分析和 编码,简单分析了词法实验过程中开始时由于对换行符(n)、制 表符(t)、和注释等处理不好导致实验失败,后来预处理时讲它们 全部换成空格符和把注释去掉才成功 五、指导教师评语五、指导教师评语 成成 绩绩批阅人批阅人日日 期期 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.