词法分析器实验

词法分析器实验

ID:38426589

大小:55.50 KB

页数:9页

时间:2019-06-12

词法分析器实验_第1页
词法分析器实验_第2页
词法分析器实验_第3页
词法分析器实验_第4页
词法分析器实验_第5页
资源描述:

《词法分析器实验》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、测试过程:(实验中出现的问题、错误、解决方法)实验总结:通过这次试验让我明白了统计系统缺页次数的确定以及对前面的知识进行了回顾和很好的复习签名:年月日评语与成绩:教师签名:年月日洛阳师范学院信息技术学院软件实验报告专业:软件工程课程:操作系统课程设计学号:姓名:班级:实验名称词法分析实验实验类型设计型实验时间实验环境WindowsXp,vc++实验目的与要求:了解词法分析器设计思想以及词法分析器的工作原理。实验内容: 1. Token字编码:(1)关键字种别码编号为自1至32(2)标示符种别码编号为33(3)数字(整数浮点数)种别码编号为34(4)界码及逻辑运算符种别码依次编码为36-

2、56(5)注释种别码编号 2.函数构成:本程序主要由三个函数构成即主函数main和两个自定义函数scan和cmp(1)main函数主要是用来判断输入文件和输出文件存在与否,并把两个文件的头指针赋给*fpin*fpout,用于输入调用字符串,并向外文件输出token字。另外主函数完成调用函数scan和cmp的功能实现token字的分类编码输出。(2)scan函数是本程序的核心程序,是用来实现各种类型词的分类识别,并完成相应的种别码和token字向外文件的输出。其中函数内部用到isdigit,getc,fprintf,isalpha,fseek等函数库内的实例函数。实验步骤:(算法描述、源

3、程序、操作步骤和方法)(3)cmp主要用于含字母的词(即关键字和标示符)区分,首先和个数较少的关键字比较匹配,不是关键字便是标示符。3.注意事项:(1)fseek函数的使用保证指针能够合理的跳转,避免个别字符没有被函数判别匹配。(2)C语言中标示符中可以含有数字字母下划线,其中第一位的只可以是字母。(3)数字包括浮点和整数涉及到小数点,判断是否是数字的同时要考虑到非数字的小数点(4)自定义的字符数组本身是字符串应该结尾是’’不能缺省。词法分析器的运行过程:首先是由主函数开始判断in.txt是否存在,如果不存在则从键盘输入字符串到fpin指向的文件中,再判断token字输出指向的文件

4、是否存在,如果没有则在判断过程中通过‘w+‘创建一个out.txt文件。然后调用函数scan开始对文件中的字符串进行判别,首先判断首字符是否为字母是的话将根据标示符的构造准则,若是則将整个字符串存入到str1[20]中,然后调用cmp函数进行判断是否是关键字,是则输出关键字及其种别码,否则输出标示符及其种别码。否则如果首字符是数字则判断其结束的标志即最后一位不是数字时(若是小数点存在则跳过小数点至到下一位不是数字时跳出)然后输出其种别码34及其数字。其他各种字符通过ifelse嵌套判断输出相应的种别码和其字符本身。直到外循环当文件指针指到文件的结束指针或者是’#’(输入字符串时约定的文

5、件结束符)时,停止执行循环.最终完成输入文件的此法分析任务。    词法分析程序源代码:#include#include#include#include#includestructkey{intxuhao1;charkeychar[20];}key[32]={{1,"auto"},{2,"break"},{3,"case"},{4,"char"},{5,"const"},{6,"continue"},{7,"default"},{8,"do"},{9,"double"},{10,"else"},{

6、11,"enum"},{12,"extern"},{13,"float"},{14,"for"},{15,"goto"},{16,"if"},{17,"int"},{18,"long"},{19,"register"},{20,"return"},{21,"short"},{22,"signed"},{23,"sizeof"},{24,"static"},{25,"struct"},{26,"switch"},{27,"typedef"},{28,"union"},{29,"unsigned"},{30,"void"},{31,"volatatile"},{32,"while"}};i

7、ntj=0;intn=33;/*标示符的种别码记为33*/intm=34;/*数字的种别码编号为34*/intt=35;/*注释的种别码编号为35*/intk;/*通过观察的k是否为0值判断字符串是否匹配*/charf;FILE*fp,*fpin,*fpout,*in,*out;scan(FILE*in);cmp(charstr[20])/*首先和关键字进行匹配区别标示符*/{inti=0;structkey*p;p=&key[0];do{k=

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

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

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