




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、词法分析器一、实验目的:通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。二、实验要求(1,”main”)(5,”(“)(5,”)“)(5,”“)(1,”int”)(2,”a”)(5,”,”)(2,”b”)(5,”;”)(2,”a”)(4,”=”)(3,”10”)(5,”;”)(2,”b”)(4,”=”)(2,”a”)(4,”+”)(3,”2
2、0”)(5,”;”)(5,”“)如源程序为c语言。输入如下一段:main()int a,b;a = 10; b = a + 20;#要求输出如右图。要求:1、将单词分为五种识别关键字:main、if、int、for、while、do、return、break、continue;单词种别码为1。标识符;单词种别码为2。常数为无符号整形数;单词种别码为3。运算符包括:+、-、*、/、=、=、=、!= ;单词种别码为4。分隔符包括:,、;、(、); 单词种别码为5。2、使用一符一种的分法关键字、运算符和分界符可以每一个均为一种标识符和常数仍然一类一种三、实验内容1、功能描述改程序是一个实现词法分析的
3、功能,能识别5种单词,其他单词报错。2、程序结构描述int iskey(char *word)关键字匹配函数,查询是否为关键字,若是,返回值为1,否则为0。int isalpha(char c) 查看是否为字母,若是,返回值为1,否则为0。int isnum(char c) 查看是否为数字,若是,返回值为1,否则为0。void scanner(file *fp) 扫描函数,扫描程序中的字符串并调用上述三种函数检查是否是字母、数字,是否是关键字,并输出。fseek(fp,-1,1) 回退一个字符。fgetc(fp) 从数据流中区下一个字符。fopen 文件打开函数,返回指向文件第一个字符的指针四
4、、实验结果测试内容为main()int a,b;a = 10;b = a + 20;#结果测试代码为void main()int a,b;if(a = 10;)b += 20;c=%;#结果为测试代码main()int a,b;if(a = 10)b += 20;c=%;return 0;#结果五、实验过程记录1、因为用到回退函数fseek(),而以前没有用过这个函数,所以开始时很苦恼,不知道如何回退一个字符,后来问了同学,才明白原来有这么一个函数,顿时豁然开朗。2、本次试验中word20保存字符串时,不能正确保存,总是出错,原因是while(isnum(ch)|isalpha(ch) wor
5、di=ch;i+;ch=fgetc(fp); 中,i+与wordi=ch;次序不对,后来多次思索,发现问题。六、实验总结本次实验花了将近一个下午才完成。在纸上设计的时间大约40分钟,剩下的时间是录入和调试。本次实验使我认识到,一段时间搁置,不编程序,水平会下降,好多有关c语言的知识会忘掉,所以以后我会经常写写程序。另外,通过本次实验,我又进一步加深对词法分析原理的理解。总的来说,获益匪浅!附录#include#include#include#include#include char*key9=void,main,int,if,then,else,return,break,continue;ch
6、ar ch; / 存储识别出的单词流int isalpha(char c) /判断是否为字母if(c=a)|(c=a) return 1;else return 0; int isnum(char c) /判断是否为数字if(c=0&c=9) return 1;else return 0;int iskey(char *word) /识别关键字函数int m,i;for(i=0;i8;i+)if(m=strcmp(word,keyi)=0)return 1; return 0;void scanner(file *fp) /扫描函数char word20=0;char ch;int i,c;c
7、h=fgetc(fp); /获取字符,指针fp并自动指向下一个字符if(isalpha(ch) /判断该字符是否是字母word0=ch;ch=fgetc(fp);i=1;while(isnum(ch)|isalpha(ch) /判断该字符是否是字母或数字wordi=ch;i+;ch=fgetc(fp); wordi=0; /0 代表字符结束(空格)fseek(fp,-1,1); /回退一个字符c=iskey(word); /判断是否是关键字if(c=0) cout(2,word)endl;/不是关键字else cout(1,word)endl; /输出关键字 else /开始判断的字符不是字母
8、 if(isnum(ch) /判断是否是数字 word0=ch; ch=fgetc(fp); i=1; while(isnum(ch) wordi=ch; i+; ch=fgetc(fp); wordi=0; fseek(fp,-1,1); /回退cout(3,word)endl; else /开始判断的字符不是字母也不是数字 word0=ch; switch(ch) case: case: case(: case): case: case: case,: case: case;:cout(5,word)endl; break; case+:ch=fgetc(fp); if(ch=|ch=+)
9、 word1=ch; cout(4,word)endl;/运算符+=或判断结果为+ else fseek(fp,-1,1); cout(4,word)endl;/判断结果为+ break; case-:ch=fgetc(fp); if(ch=|ch=-) word1=ch; cout(4,word)endl; else fseek(fp,-1,1); cout(4,word)endl; /判断结果为- break; case*: case/: case!: case=:ch=fgetc(fp); if(ch=) word1=ch; cout(4,word)endl; else fseek(fp
10、,-1,1); cout(4,word)endl; break; case:ch=fgetc(fp); if(ch=|ch=) word1=ch; cout(4,word)endl; else fseek(fp,-1,1); cout4twordendl; /判断结果为:ch=fgetc(fp); if(ch=|ch=) word1=ch;cout(4,word)endl; else fseek(fp,-1,1); cout(4,word)endl; break; default: cout(无法识别字符,word)endl; break; void main() file *fp;fp=fopen(c:1.txt,r); if(fp=null) /读取文件内容,并返回文件指针,该指针指向文件的第一个字符 cout读入文件错误!endl; exit(0);cou
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国多层时尚提花面料市场调查研究报告
- 2025年中国城市电信地理信息系统市场调查研究报告
- 车辆抵押贷款担保服务及风险控制协议范本
- 2025年中国五孔万用插座市场调查研究报告
- 车辆借用保险理赔及争议解决协议
- 厂房租赁期满及使用权变更合同范本
- 信息技术设备采购数量调整与取消的补充协议
- 出租车行业服务质量提升与标准制定合同
- 2025年高压成套电器项目提案报告
- 2025年人教版小学一年级数学(上册)期中试卷及答案
- 2025年中国商业地产物业管理市场供需格局及未来发展趋势报告
- 煤矿应聘笔试题库及答案
- 2024年第二次广东省普通高中生物学业水平合格性考试含答案
- Maya-2023三维建模与制作实战教程-配套课件
- 化学反应工程与催化反应课件
- 声学基础课件(许肖梅) - 声学原理与现象教程
- 海南大学2019-2020学年第二学期试卷科目《概率论与数理统计》试题
- 科技企业生产设备的定期维护计划
- 挖掘机操作与安全事项
- 2024生态环境监测技术人员持证上岗考核理论试题库800题(含答案)
- 2025年党员教育培训课件
评论
0/150
提交评论