




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
测试过程:(实验中出现的问题、错误、解决方法)实验总结:通过这次试验让我明白了统计系统缺页次数的确定以及对前面的知识进行了回顾和很好的复习签名:年 月 日评语与成绩: 教师签名:年 月 日洛阳师范学院信息技术学院软件实验报告专业: 软件工程 课程: 操作系统课程设计 学号: 姓名: 班级: 实验名称词法分析实验实验类型设计型实验时间实验环境Windows Xp,vc+实验目的与要求:了解词法分析器设计思想以及词法分析器的工作原理。实验内容:1 Token字编码:(1)关键字种别码编号为自1至32 (2)标示符种别码编号为33(3)数字(整数浮点数)种别码编号为34(4)界码及逻辑运算符种别码依次编码为36-56(5)注释种别码编号2函数构成:本程序主要由三个函数构成即主函数main和两个自定义函数scan 和 cmp (1)main函数主要是用来判断输入文件和输出文件存在与否,并把两个文件的头指针赋给*fpin *fpout,用于输入调用字符串,并向外文件输出token字。另外主函数完成调用函数scan和cmp的功能实现token字的分类编码输出。 (2)scan函数是本程序的核心程序,是用来实现各种类型词的分类识别,并完成相应的种别码和token字向外文件的输出。其中函数内部用到isdigit,getc,fprintf ,isalpha,fseek等函数库内的实例函数。实验步骤:(算法描述、源程序、操作步骤和方法)(3)cmp主要用于含字母的词(即关键字和标示符)区分,首先和个数较少的关键字比较匹配,不是关键字便是标示符。3注意事项:(1)fseek函数的使用保证指针能够合理的跳转,避免个别字符没有被函数判别匹配。(2)C语言中标示符中可以含有数字字母下划线,其中第一位的只可以是字母。(3)数字包括浮点和整数涉及到小数点,判断是否是数字的同时要考虑到非数字的小数点(4)自定义的字符数组本身是字符串应该结尾是0不能缺省。词法分析器的运行过程:首先是由主函数开始判断in.txt是否存在,如果不存在则从键盘输入字符串到fpin指向的文件中,再判断token 字输出指向的文件是否存在,如果没有则在判断过程中通过w+创建一个out.txt文件。然后调用函数scan开始对文件中的字符串进行判别,首先判断首字符是否为字母是的话将根据标示符的构造准则,若是則将整个字符串存入到str120中,然后调用cmp函数进行判断是否是关键字,是则输出关键字及其种别码,否则输出标示符及其种别码。否则如果首字符是数字则判断其结束的标志即最后一位不是数字时(若是小数点存在则跳过小数点至到下一位不是数字时跳出)然后输出其种别码34 及其数字。其他各种字符通过if else嵌套判断输出相应的种别码和其字符本身。直到外循环当文件指针指到文件的结束指针或者是#(输入字符串时约定的文件结束符)时,停止执行循环.最终完成输入文件的此法分析任务。词法分析程序源代码:#include #include #include #include #include struct key int xuhao1; char keychar20; key32=1,auto,2,break,3,case,4,char,5,const,6,continue,7,default,8,do,9,double,10,else,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;int j=0;int n=33; /*标示符的种别码记为33*/int m=34; /*数字的种别码编号为34*/int t=35; /*注释的种别码编号为35*/int k; /*通过观察的k是否为0值判断字符串是否匹配*/char f;FILE *fp,*fpin,*fpout,*in,*out;scan(FILE *in); cmp(char str20 ) /*首先和关键字进行匹配区别标示符*/ int i=0; struct key *p; p=&key0; do k=strcmp(str,p-keychar); i+; while(k!=0&p+&ixuhao1,p-keychar); fprintf( fpout,%d,%sn,p-xuhao1,p-keychar); else putchar(n); printf(%d,%sn,n,str); fprintf(fpout,%d,%sn,n,str); scan(FILE *fp) char chf;while(chf=fgetc(fp)!=EOF&chf!=#) /*文件未结束就执行循环判断输入的字符串 */ if(isalpha(chf) /* 标示符和关键字的判断 */ int p=0; char str120; do str1p+=chf; chf=getc(fp); while(chf=0&chf=a&chf=A&chf=0&chf=9&j=20&chf!=.) str2j+=chf; chf=getc(fp); if(chf=.) str2j+=.; chf=getc(fp); str2-j=0; fseek(fp,-2L,1); printf(%d,%sn,m,str2); fprintf( fpout,%d,%sn,m,str2); else if(chf=/) /*以下是界符和逻辑运算符注释符的判断 */ char str3=/*; chf=getc(fp); if(chf=*) printf(57,%sn,str3); fprintf( fpout,%d,%sn,57,str3); else if(chf=*) char str4=*/; chf=getc(fp); if(chf=/) printf(58,%sn,str4); fprintf( fpout,%d,%sn,58,str4); else if(chf=+) printf(36,%cn,chf); fprintf(fpout,%dt%sn,36,+); else if(chf=-) printf(37,%cn,chf); fprintf(fpout,%dt%sn,37,-); else if(chf=*)printf(38,%cn,chf);fprintf(fpout,%dt%sn,38,*);else if(chf=()printf(39,%cn,chf);fprintf(fpout,%dt%sn,39,();else if(chf=)printf(40,%cn,chf);fprintf(fpout,%dt%sn,40,);else if(chf=)printf(41,%cn,chf);fprintf(fpout,%dt%sn,41,);else if(chf=)printf(42,%cn,chf);fprintf(fpout,%dt%sn,42,);else if(chf=.)printf(43,%cn,chf);fprintf(fpout,%dt%sn,43,.);else if(chf=;)printf(44,%cn,chf);fprintf(fpout,%dt%sn,44,;);else if(chf=)printf(45,%cn,chf);fprintf(fpout,%dt%sn,45,);else if(chf=)printf(46,%cn,chf);fprintf(fpout,%dt%sn,46,);else if(chf=)chf=getc(fp); if(chf=) printf(56,%cn,chf); fprintf(fpout,%dt%sn,56,=); elseprintf(47,%cn,chf);fprintf(fpout,%dt%sn,47,=);else if(chf=,)printf(48,%cn,chf);fprintf(fpout,%dt%sn,48,);else if(chf=:)printf(49,%cn,chf);fprintf(fpout,%dt%sn,49,:);else if(chf=) chf=getc(fp); if(chf=) printf(50,=n); fprintf(fpout,%dt%sn,50,=); else printf(51,%sn,); fprintf(fpout,%dt%sn,51,) chf=getc(fp); if(chf=) printf(52,=n); fprintf(fpout,%dt%sn,52,=); else printf(53,n); fprintf(fpout,%dt%sn,53,); fseek(fp,-1L,1); else if(chf=!) chf=getc(fp); if(chf=) printf(54,!=n); fprintf(fpout,%dt%sn,54,!=); else printf(55,!n); fprintf(fpout,%dt%sn,55,!); fseek(fp,-1L,1); else printf( cannt recognize symboln); fprintf(fpout, cannt recognize symbol %cn,chf) ; main() long i; if(fpin=fopen(D:in.txt,w+)=NULL) /*判断输入文件是否存在*/ printf(cant open in.txt or there is no in.txt); else printf(please putin file with # in the end :n); while(f!=#) /* 不存在时从键盘输入字符串*/ f=getchar(); printf(%c,f); fprintf(fpin,%c,f); /*向源文件中输入字符*/ if(f
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年高中政治教师测试题库及答案
- 教师招聘之《小学教师招聘》试题(得分题)附答案详解【突破训练】
- 2025考研政治理论时政热点知识试题库(含答案)
- 2025年教师招聘之《小学教师招聘》练习题包附完整答案详解【名师系列】
- 教师招聘之《小学教师招聘》能力检测完美版附答案详解
- 2025年教师招聘之《幼儿教师招聘》检测卷包附参考答案详解(a卷)
- 2025年教师招聘之《幼儿教师招聘》通关题库附参考答案详解(预热题)
- 2025年教师招聘之《幼儿教师招聘》通关练习题和答案及1套完整答案详解
- 教师招聘之《小学教师招聘》强化训练及答案详解(夺冠系列)
- 2025年教师招聘之《小学教师招聘》题库必刷100题及参考答案详解(考试直接用)
- 甲油胶行业报告
- 《基于模型的系统工程(MBSE)及MWORKS实践》全套教学课件
- 医务人员职业暴露与防护讲课
- 苏教版4四年级数学上册(全册)表格式教案
- 小学教育课件古诗
- BEC商务英语初级考试历年真题及答案6套
- 消除“艾梅乙”医疗歧视-从我做起
- 感恩老师课件教学课件
- GB/T 44625-2024动态响应同步调相机技术要求
- 不违反计划生育协议书模板
- (人教2024版)七年级数学开学第一课-课件
评论
0/150
提交评论