欢迎来到天天文库
浏览记录
ID:56485175
大小:300.24 KB
页数:13页
时间:2020-06-24
《编译原理词法分析器的构造.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验报告(2014/2015学年第一学期)课程名称编译原理实验名词法分析器的构造称实验时2015年4月10日间指导单南京邮电大学位指导教蒋凌云师学生姓名孙雪禄班级学B12041213号学院(系)计算机学专业软件工程院、软件(服务外学院包)实验报告实验名词法分析器的构造指导教称师实验类上机实实验学4实验时型验时间1、实验目的和要求设计、编制、调试一个词法分析程序,对单词进行识别码,加深对词法分析原理的理解。二、实验环境(实验设备)MicrosoftVisualStdio20102、实验原理及内容1、实验内容:设计并实现一个词法分析器,实现对指定的类C语言源程
2、序文本文件的读取,并能够对该源程序中的单词进行分类,指出其所属类型,实现简单的词法分析操作例如下面为一段C语言源程序:main(){inta,b;a=10;b=a+20;}要求输出如下(可以自行分类,分类原则请在报告中说明)(1,’main’)(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、实验要求:(1)、允许用户自己输入源程序
3、并保存为(2)、系统能够输出经过预处理后的源程序(去掉注释、行、空格等)(3)、能够将该源程序中所有的单词根据其所属类型(整保留字、运算符、标识符等。定义的类C语言中的标识符只字母或下划线开头)进行归类显示,例如:识别保留字:iint、for、while、do、return、break、continue等,其他的都为标识符;常数为无符号整形数;运算符包括:+、-、*、=、>、<、>=、<=、!=等;分隔符包括:,、;、{、}、(、)等(4)、实现文件的读取操作,而不是将文本以字符串形式于程序中。文本内容为待分析的类C语言程序。3、实验过程描述(1)首先讲和
4、书上一样分成5类分类号分类内容1保留字2标识符3整数4运算符(+,-,*,/,>,<,=等)5分隔符(,,;,{,},(,))(2)、接着写出用到的简单文法并转换成状态转换图<标识符>::=字母
5、字母<标识符>
6、<标识符>数字<整数>::=数字
7、数字<整数><运算符>::=+
8、-
9、*
10、<
11、>
12、=<分隔符>::=,
13、;
14、(
15、)
16、{
17、}保留字是一种特殊的标识符,不独立写出其文法状态转换图如下:(3)按照书上的步骤写程序因为程序要求将用户的输入保存到文件中所以这里要用件存贮操作,fopen(FILE*文件名,打开方式)。一共有三个分别是boolLETTER(ch
18、arA)//判断字符是否是字母{if(A>='a'&&A<='z')returntrue;elseif(A>='A'&&A<='Z')returntrue;elsereturnfalse;}boolDIGIT(charA)//判断字符是否是数字{if(A>='0'&&A<='9')returntrue;elsereturnfalse;}boolREAERVE(char*a)//判断标识符是否为保留字{if(strcmp(a,"if")==0){cout<<"(1,'"<19、)==0){cout<<"(1,'"<20、)"<#include#inc21、ludeusingnamespacestd;bo
19、)==0){cout<<"(1,'"<20、)"<#include#inc21、ludeusingnamespacestd;bo
20、)"<#include#inc
21、ludeusingnamespacestd;bo
此文档下载收益归作者所有