编译原理-词法分析程序报告 (1).doc_第1页
编译原理-词法分析程序报告 (1).doc_第2页
编译原理-词法分析程序报告 (1).doc_第3页
编译原理-词法分析程序报告 (1).doc_第4页
编译原理-词法分析程序报告 (1).doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

编译原理课程设计课程设计题目: 词法分析器 作者所在学院: 作者所在专业: 作者所在班级: 作 者 学 号: 作 者 姓 名 : 指导教师姓名: 完 成 时 间 : 2009 年 6 月 18 日1.课程设计任务书课题名称编译原理课程设计完成时间2010.7.14指导教师杨焱职称讲师学生姓名李旭昆班级207721总体设计要求总体设计要求: 每个学生按照课程设计要求,在规定的时间内独立完成。题目: 编译程序构造涉及内容:编译器的结构,词法分析、语法分析工作内容及时间进度安排第一天:设计动员,布置课程设计任务,查阅资料,制定方案,进行程序方案设计。第一天:编写和调试程序第三天:编写和调试程序,第四天:编写和调试程序,整理,提交调研报告,撰写设计报告。第五天:验收,提交设计报告,评定成绩。课程设计成果1、调研报告一份,课程设计报告书一份2、源程序清单一份3、成果使用说明书一份2.调试PL/0编译程序习题第七题正确的程序为: var a,b,c; begin read(a,b); c:=100; if a0 then begin b:=b+1; write(b) end; write(a,b,c); end. 第八题(1) 扩充条件语句的语法图为: If条件then语句else语句EBNF的语法描述为:条件语句if条件then语句else语句 (2) 扩充repeat语句的语法图为: resent语句Until条件1EBNF的语法描述为:repeat循环语句 repeat语句;语句until条件3.课程设计目的:结合课堂上学习的理论知识,通过C+实现词法分析器,更加深入的掌握词法分析;同时也可以更加了解词法分析的原理。4.课程设计内容:词法分析器模块划分:字母处理程序、数字处理程序、其他处理程序、主程序模块调用关系图:主程序字母处理程序数字处理程序其他处理程序模块流程图:否是判断文件是否为空初始化设置开始结束读取文件字符判断字符类型输出:非法字符字符处理程序输出相应字符是否有结束标志结束5.程序源代码:#include #include #include #include #include / #define NULL 0FILE *fp;char ch;char *keyword34=auto,break,case,char,const,continue,default,do,double,else,enum,extern,float,for,goto,if,int,long,register, return,short,signed,sizeof,static,struct,switch,typedef,printf,union,unsigned,void,volatile,while,main;char *operatornum6=+,-,*,/,+,-;char *comparison8=,=,=,!=;char *interpunction8=,;,:=,.,(,),;char *biaoshifu6=%,$,&,_,#;/特殊标识符char *zhushifu3=/,/*,*/;/注释符char *luoji3=&,|,!;/逻辑运算符/bool search(char searchstr,int wordtype)int i;switch (wordtype)case 1:for(i=0;i=33;i+) if(strcmp(keywordi,searchstr)=0) return(true);break;case 2: for(i=0;i=5;i+) if(strcmp(operatornumi,searchstr)=0) return(true); break; case 3: for(i=0;i=7;i+) if(strcmp(comparisoni,searchstr)=0) return(true); break; case 4: for(i=0;i=7;i+) if(strcmp(interpunctioni,searchstr)=0) return(true); break;case 5: for(i=0;i=5;i+) if(strcmp(biaoshifui,searchstr)=0) return(true); break;case 6: for(i=0;i=2;i+) if(strcmp(zhushifui,searchstr)=0) return(true); break;case 7: for(i=0;i=2;i+) if(strcmp(luojii,searchstr)=0) return(true); break;return(false);/char letterprocess (char ch)/字母处理函数int i=-1;char letter20;while (isalnum(ch)!=0) letter+i=ch; ch=fgetc(fp);letteri+1=0;if (search(letter,1) printf(n,letter); else printf(n,letter);return(ch);/char numberprocess(char ch)/数字处理程序int i=-1;char num20;while (isdigit(ch)!=0) num+i=ch; ch=fgetc(fp);if(isalpha(ch)!=0) while(isspace(ch)=0) num+i=ch; ch=fgetc(fp); numi+1=0; printf(错误!非法标识符:%sn,num); goto u;numi+1=0; printf(n,num); u: return(ch);/char otherprocess(char ch)int i=-1;char other20;if (isspace(ch)!=0) ch=fgetc(fp); goto u;while (isspace(ch)=0)&(isalnum(ch)=0) other+i=ch; ch=fgetc(fp);otheri+1=0;if (search(other,2) printf(n,other);else if (search(other,3) printf(n,other);elseif (search(other,4) printf(n,other);elseif (search(other,5) printf(n,other);elseif (search(other,6) printf(n,other);elseif (search(other,7) printf(n,other);else printf(错误!非法字符:%sn,other);u: return (ch);/void main ()char str,c;printf(*词法分析器*n);if (fp=fopen(源程序.txt,r)=NULL) printf(源程序无法打开!n);else str =fgetc(fp); while (str!=EOF) /文件结束标志 if (isalpha(str)!=0) str=letterprocess(str); else if (isdigit(str)!=0) str=numberprocess(str); else str=otherprocess(str); ; printf(词法分析结束,谢谢使用!n); printf(点任意键退出!n); c=getch();6.程序测试数据和结果:(1)数据 var a,b,c:integer ;x:char ;beginfor i:=b * 2 to 100 do begin x:= (a+b) * (c+d) - (a+b+c) ; T:=T+8 ; endend(2)结果7.设计体会:本次课设使我对编写

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论