欢迎来到天天文库
浏览记录
ID:61487326
大小:4.34 MB
页数:6页
时间:2021-02-05
《编译原理实验报告-设计词法分析器.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、实验报告填写时间:2014.4.25课程名称编译原理实验名称设计词法分析器姓名学号专业年级一、实验目的:设计并实现一个小型程序语言的词法分析器,实现源程序的输入,预处理词法分析,最后以编译程序需要的内部表示形式将识别的单词、符号、数字等关键字输出。二、实验内容:设计词法分析器,定义关键字,待程序运行,输入待分析的程序段或程序的路径及名称,即可进行词法分析。三、实验步骤:1.在MicrosoftVisualC++6.0中新建源文件;2.编写头文件及类函数;3.定义关键字;4.关键字、字母、数字判断;5.编写词法分析代码;6.编写主函数;7.新建待分析程序段,记住其路
2、径及名称;8.运行此分析程序;9.输入待分析的程序段的路径及名称。一、实验结果与结论:(核心代码和程序的运行效果)核心代码1:Stringkey[15]={"begin","end","if","then","else","while","write","read","do","call","const","char","until","procedure","repeat"};//关键字定义核心代码2:intIskey(stringc){//关键字判断inti;for(i=0;i3、}return0;}intIsLetter(charc){//判断是否为字母if(((c<='z')&&(c>='a'))4、5、((c<='Z')&&(c>='A')))return1;elsereturn0;}intIsDigit(charc){//判断是否为数字if(c>='0'&&c<='9')return1;elsereturn0;}核心代码3:voidanalyse(FILE*fpin){//词法分析stringarr="";while((ch=fgetc(fpin))!=EOF){arr="";if(ch==''6、7、ch=='t'8、9、ch=='')10、{}elseif(IsLetter(ch)){while(IsLetter(ch)11、12、IsDigit(ch)){if((ch<='Z')&&(ch>='A'))ch=ch+32;arr=arr+ch;ch=fgetc(fpin);}fseek(fpin,-1L,SEEK_CUR);if(arr==key[0]){cout<13、if(arr==key[3]){cout<14、}elseif(arr==key[9]){cout<15、17$关键字"<16、17、ch=='.'&&IsDigit(fgetc(fpin))){arr=arr+ch;ch=fgetc(fpin);}fseek(fpin,-1L,SEEK_CUR);cout<18、<
3、}return0;}intIsLetter(charc){//判断是否为字母if(((c<='z')&&(c>='a'))
4、
5、((c<='Z')&&(c>='A')))return1;elsereturn0;}intIsDigit(charc){//判断是否为数字if(c>='0'&&c<='9')return1;elsereturn0;}核心代码3:voidanalyse(FILE*fpin){//词法分析stringarr="";while((ch=fgetc(fpin))!=EOF){arr="";if(ch==''
6、
7、ch=='t'
8、
9、ch=='')
10、{}elseif(IsLetter(ch)){while(IsLetter(ch)
11、
12、IsDigit(ch)){if((ch<='Z')&&(ch>='A'))ch=ch+32;arr=arr+ch;ch=fgetc(fpin);}fseek(fpin,-1L,SEEK_CUR);if(arr==key[0]){cout<13、if(arr==key[3]){cout<14、}elseif(arr==key[9]){cout<15、17$关键字"<16、17、ch=='.'&&IsDigit(fgetc(fpin))){arr=arr+ch;ch=fgetc(fpin);}fseek(fpin,-1L,SEEK_CUR);cout<18、<
13、if(arr==key[3]){cout<14、}elseif(arr==key[9]){cout<15、17$关键字"<16、17、ch=='.'&&IsDigit(fgetc(fpin))){arr=arr+ch;ch=fgetc(fpin);}fseek(fpin,-1L,SEEK_CUR);cout<18、<
14、}elseif(arr==key[9]){cout<15、17$关键字"<16、17、ch=='.'&&IsDigit(fgetc(fpin))){arr=arr+ch;ch=fgetc(fpin);}fseek(fpin,-1L,SEEK_CUR);cout<18、<
15、17$关键字"<16、17、ch=='.'&&IsDigit(fgetc(fpin))){arr=arr+ch;ch=fgetc(fpin);}fseek(fpin,-1L,SEEK_CUR);cout<18、<
16、
17、ch=='.'&&IsDigit(fgetc(fpin))){arr=arr+ch;ch=fgetc(fpin);}fseek(fpin,-1L,SEEK_CUR);cout<18、<
18、<
此文档下载收益归作者所有