《编译原理》词法分析实验报告模板-课程上机.docVIP

《编译原理》词法分析实验报告模板-课程上机.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PAGE PAGE 9 实 验 报 告 课程名称 编译原理 实验项目 设计与实现一个词法编译器 班级 姓名 学号 实验名称 设计与实现一个词法编译器 实验地点 实验时间 实验目的: 结合讲授内容,设计与实现一个简单词法编译器,通过本实验加深对词法分析程序的功能及实现方法的理解。 实验内容: 设计与实现一个简单词法编译器。具体内容是对输入的语句进行分析,分解出关键字 实验要求: (1)掌握和实现词法分析器的功能: 输入源程序,输出单词符号(二元式表示)。 二元式(单词流)源程序(字符流)词法分析器 输入 输出 二元式 (单词流) 源程序 (字符流) 词法分析器 (2)单词符号的分类: 关键字:是由程序语言定义的具有固定意义的标识符。 标识符:用来表示各种名字,如变量等。 常数:常数的类型有整型,实型等。 运算符:算术运算符,关系运算符,逻辑运算符。 界限符:逗号,分号等。 (3)实验步骤: 1、确定词法分析器的接口关系; 2、设计算法参考教材图2.5。 实验准备: 1:pc机一台; 2:VC++编译器 实验过程: 1,分析问题 输入源程序,输出单词符号(二元式表示)。 二元式(单词流)源程序(字符流)词法分析器 二元式 (单词流) 源程序 (字符流) 词法分析器 2,算法步骤: :将文件中每行读入的字符串存入数组buffer[100],不跳过空格; :利用构造函数传递数组,和每行的长度length; :调用成员函数scan,i=0, while(ilength)开始检测buffer的字符; :if(isletter(),接收完成后比较是否为关键字,不是则将其存入标示符id[50][10]中 ; :else if(isdigit()),接收完成后存入cst[50][10]中; :else if 为界符,比较符,运算符,输出对应的二元编码; :接受完毕,输出id[50][10]--标示符,cst[50][10]--常数,列表; 3:程序代码 #includestdio.h #includestdlib.h #includestring.h #define?_KEY_WORD_END?#//结束标志 typedef?struct { int?typenum;//种别码 char*?word;//单词 }WORD; char?input[1001]; char?token[100]=; int?p_input;//输入缓冲区指针 int?p_token;//单词缓冲区指针 char?*rwtab[]={begin,if,then,while,do,end,_KEY_WORD_END};//关键字列表,可扩充 char?ch;//获取一个字符 char?m_getchar()//在缓冲区获取一个字符 { ch?=?input[p_input]; p_input?++; return?ch; } void?getbc()//去除空白符号 { while(ch?==?||ch?==?\n) { ch?=?input[p_input]; p_input?++; } } int?letter()//判断字符是不是字母 { if(ch?=ach=z?||?ch=Ach=Z) return?1; return?0; } int?digit()//判断字符是不是数字 { if(ch=0ch=9) return?1; return?0; } void?concat()//组装单词 { token[p_token]?=?ch; p_token?++; token[p_token]?=?\0; } void?retract()//缓冲区回退一个字符 { p_input?--; } int?reserve()//与关键字表对比,查看是否是关键字 { int?i?=0; while(strcmp(rwtab[i],_KEY_WORD_END)) { if(!strcmp(rwtab[i],token)) { return?i+1; } i?++; } return?10; } WORD*?scaner()//获取一个单词,并判断它的特别码 { WORD?*?myword?=?new?WORD; myword-typenum?=?10; p_token?=?0;//单词指针初始化 m_getchar();//获取一个字符 getbc();//去除空白 if

文档评论(0)

汪汪队 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档