编译原理实验报告《词法分析器的构造》.doc

编译原理实验报告《词法分析器的构造》.doc

ID:57381029

大小:148.50 KB

页数:14页

时间:2020-08-14

编译原理实验报告《词法分析器的构造》.doc_第1页
编译原理实验报告《词法分析器的构造》.doc_第2页
编译原理实验报告《词法分析器的构造》.doc_第3页
编译原理实验报告《词法分析器的构造》.doc_第4页
编译原理实验报告《词法分析器的构造》.doc_第5页
资源描述:

《编译原理实验报告《词法分析器的构造》.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、《词法分析器的构造》实验报告一、实验名称词法分析器的构造二、实验目的设计、编制、调试一个词法分析程序,对单词进行识别和编码,加深对词法分析原理的理解。三、实验内容和要求编写一个C语言词法分析器,要求:1、允许用户自己输入源程序并保存为文件2、系统能够输出经过预处理后的源程序(去掉注释、换行、空格等)3、能够将该源程序中所有的单词根据其所属类型(整数、保留字、运算符、标识符等。定义的类C语言中的标识符只能以字母或下划线开头)进行归类显示,例如:识别保留字:if、int、for、while、do、return、b

2、reak、continue等,其他的都识别为标识符;常数为无符号整形数;运算符包括:+、-、*、/、=、>、<、>=、<=、!=等;分隔符包括:,、;、{、}、(、)等。4、实现文件的读取操作,而不是将文本以字符串形式预存于程序中。文本内容为待分析的类C语言程序。例如下面为一段C语言源程序:main(){int a,b;a=10; b=a+20;}要求输出如下(2,’main’)(5,’(’)(5,’)’)(5,’{’)(1,’int’)(2,’a’)(5,’,’)(2,’b’)(5,’;’)(2,’a’)(

3、4,’=’)(3,’10’)(5,’;’)(2,’b’)(4,’=’)(2,’a’)(4,’+’)(3,’20’)(5,’;’)(5,’}’)四、主要仪器设备硬件:微型计算机。软件:VisualC++6.0(也可以是其它集成开发环境)。五、实验过程描述1、状态转换图01324567空白字母非字母数字和_字母或数字或_数字非数字运算符界符其他*****数字2、程序主要框架程序中编写了以下函数,各个函数实现的作用如下:intalpha(intst)://识别保留字和标识符intnumber(intst)//识别常

4、数intanotation(intst)//处理除号/和注释//intother(intst)//识别运算符、分隔符、特殊字符intchoice1(intst)//读入的字符是字母返回1intchoice2(intst)//读入的字符是数字返回1intchoice(intst)//根据读入的单词的第一个字符确定调用不同函数识别单词3、编写的源程序#include#include#include#includeusingnamespa

5、cestd;stringkeywords[21]={"include","void","main","int","char","float","double","if","else","then","break","continue","for","do","while","printf","scanf","begin","end","return","define"};charrz[99999]="";//源程序charpz[9999]="";//预处理后的源程序stringid[10000];//存储标识

6、符intpp=0;//标识符序号stringnu[10000];//存储常数intqq=0;//常数序号intchoice1(chara)//判断是否是字母{if((a>='a'&&a<='z')

7、

8、(a>='A'&&a<='Z'))return1;elsereturn0;}intchoice2(chara)//判断是否是数字{if(a>='0'&&a<='9')return1;elsereturn0;}intalpha(intst)//识别保留字(1)和标识符(2){charwordbuf[20]="";i

9、ntn=0;for(;;){wordbuf[n]=rz[st];st++;n++;if((choice2(rz[st])==1)

10、

11、(choice1(rz[st])==1)

12、

13、(rz[st]=='_'))//语法标识符=<标识符><字母>

14、<标识符><数字>

15、<标识符><特殊符号>wordbuf[n]=rz[st];elsebreak;}intflag=0;for(intk=0;k<21;k++){if(strcmp(keywords[k].c_str(),wordbuf)==0)flag=1;//是保留字}

16、if(flag==1)printf("(%s,1)",wordbuf);else{intflagg=-1;for(intt=0;t

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。