编译实验报告方案词法分析器.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验报告 填写时间:2018.4.25 课程名称 编译原理 实验名称 设计词法分析器 姓名 学号 专业年级 一、实验目的: 设计并实现 个小型程序语言的词法分析器,实现源程序的输入,预处理 词法分析,最后以编译程序需要的内部表示形式将识别的单词、符号、数 字等关键字输出。 二、实验内容: 设计词法分析器,定义关键字,待程序运行,输入待分析的程序段或程 序的路径及名称,即可进行词法分析。 三、实验步骤: 在 Microsoft Visual C++ 6.0 中新建源文件; 编写头文件及类函数; 定义关键字; 关键字、字母、数字判断; 编写词法分析代码; 编写主函数; 新建待分析程序段,记住其路径及名称; 运行此分析程序; 输入待分析的程序段的路径及名称。 四、实验结果与结论: 核心代码和程序的运行效果) 核心代码1: Stri ngkey[15]={begi n,e nd,if,the n,else,while,write,read,do, call,const,char,until,procedure,repeat} 。// 关键字定义 核心代码2: int Iskey(string c{ // 关键字判断 int i 。 for(i=0 o iMAX i++ { if(key[i].compare(c==0 retur n 1 。 } return 0 。 } int lsLetter(char c { //判断是否为字母 if(((c=z(c=a?||((c=Z(c=A? return 1 else return 0 。 //判断是否为数字 //判断是否为数字 int IsDigit(char c{ if(c=0c=9 return 1 else return 0 } 核心代码3: void analyse(FILE *fpin{ // 词法分析 stri ng arr= 。 while((ch=fgetc(fp in !=EOF { arr= 。 else if(lsLetter(ch{ while(lsLetter(ch||lsDigit(ch { if((ch=Z(ch=A? ch=ch+32 arr=arr+ch ch=fgetc(fp in} else if(lsLetter(ch{ while(lsLetter(ch||lsDigit(ch { if((ch=Z(ch=A? ch=ch+32 arr=arr+ch ch=fgetc(fp in } fseek(fpi n,-1L,SEEK_CUR if (arr==key[0]{coutarrvv\t8 $ else if (arr==key[1]{coutarr\t9 $关键字 endl。} else if (arr==key[2]{coutarr\t3 $关键字 endl。} else if (arr==key[3]{coutarr\t4 $关键字 endl。} else if (arr==key[4]{coutarr\t5 $关键字 endl。} else if (arr==key[5]{coutarr\t6 $关键字 endl。} else if (arr==key[6]{coutarr\t7 $关键字 endl。} else if (arr==key[7]{coutarr\t10 $关键字 endl。} else if (arr==key[8]{coutarr\t11 $关键字 endl。} else if (arr==key 心{8山汀%12 $关键字 0 关键字e ndl } o II II II II II II II II endl。} else if (arr==key[10]{coutarrvv\t13 endl。} else if (arr==key[11]{coutarrvv\t14 endl。} else if (arr==key[12]{coutarr\t15 endl。} else if (arr==key[13]{coutarr\t16 endl。} else if (arr==key[14]{coutarr\t17 endl。} else coutarr\t0 $ 普通标识符endl } 关键 关键 关键 关键 关键 else if(lsDigit(ch{ while(lsDigit(ch||ch==.lsDigit(fgetc(fpi n{ arr=arr+ch 。 ch=fgetc(fp in 。 coutv=vv\t63运算符e ndl coutv=vv\t63 运算符e ndl } fseek(fpi n,-1L,SEEK_CUR 。 coutarr\t2 $ 无符号实数endl。 } else switch(c

文档评论(0)

136****3783 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档