资源描述:
《词法分析器的构造南邮2016编译原理实验一报告.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
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语言程序。二、实验环境(实验设备)硬件:计算机软件:VisualC+
3、+6.0一、实验原理及内容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,’,’)(2,’b’)(5,’;’)(2,’a’)(4,’=’)(3,’10’)(5,’;’)(2,’b’)(4
4、,’=’)(2,’a’)(4,’+’)(3,’20’)(5,’;’)(5,’}’)2、实验原理状态转换图3、实验代码:实验代码:#include#include#include#include#include#includestructChar{//创建一个结构用于存贮关键字chara[15];};typedefstructCharCH;//定义关键字CHkeyWord[67]={"auto","break","case
5、","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","s
6、tdio","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","as
7、m"};//检测是否为数字,是返回true,否则返回falseboolIsDigit(charA){if(A>='0'&&A<='9')returntrue;elsereturnfalse;}//检测是否为字符,是则返回true,否则返回falseboolIsLetter(charch){if((ch>='A'&&ch<='Z')
8、
9、(ch>='a'&&ch<='z'))returntrue;returnfalse;}//检测是否为分隔符,是则返回true,否则返回falseboolIsSeparator(charch){if(ch==
10、'('
11、
12、ch==')'
13、
14、ch=='{'
15、
16、ch=='}'
17、
18、ch==';'
19、
20、ch==','
21、
22、ch=='.'
23、
24、ch==':'
25、
26、ch=='''
27、
28、ch=='"'
29、
30、ch=='['
31、
32、ch==']