首页 编译原理-词法分析程序报告

编译原理-词法分析程序报告

举报
开通vip

编译原理-词法分析程序报告北京农学院学院 《编译原理》课程设计 课程设计题目: 词法分析器 作者所在学院: 作者所在专业: 作者所在班级: 作 者 学 号: 作 者 姓 名 : 指导教师姓名: 完 成 时 间 : 2009 年 6 月 18 日 1.课程设计任务书 课题名称 《编译原理》课程设计 完成时间 2010.7.14 指导教师 杨焱 职称 讲师 学生姓名 李旭昆 班级 207721 总体设计要求 总体设计要求: 每个学生按照课程设计要求,在规定的时间内独立完成。 题目: 编译程序构造 涉及内容: 编译器的结构,词法分析、语法分析 工...

编译原理-词法分析程序报告
北京农学院学院 《编译原理》课程设计 课程设计题目: 词法分析器 作者所在学院: 作者所在专业: 作者所在班级: 作 者 学 号: 作 者 姓 名 : 指导教师姓名: 完 成 时 间 : 2009 年 6 月 18 日 1.课程设计任务书 课题名称 《编译原理》课程设计 完成时间 2010.7.14 指导教师 杨焱 职称 讲师 学生姓名 李旭昆 班级 207721 总体设计要求 总体设计要求: 每个学生按照课程设计要求,在规定的时间内独立完成。 题目: 编译程序构造 涉及内容: 编译器的结构,词法分析、语法分析 工作内容及时间进度安排 第一天:设计动员,布置课程设计任务,查阅资料,制定 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 ,进行程序方案设计。 第一天:编写和调试程序 第三天:编写和调试程序, 第四天:编写和调试程序,整理,提交调研 报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载 ,撰写设计报告。 第五天:验收,提交设计报告,评定成绩。 课程设计成果 1、调研报告一份,课程设计报告书一份 2、源程序清单一份 3、成果使用说明书一份 2.调试PL/0编译程序习题 第七题. 正确的程序为: var a,b,c; begin read(a,b); c:=100; if a>0 then begin b:=b+1; write(b) end; write(a,b,c); end. 第八题. (1) 扩充条件语句的语法图为: EBNF的语法描述为:〈条件语句〉→if〈条件〉then〈语句〉[else〈语句〉] (2) 扩充repeat语句的语法图为: EBNF的语法描述为:〈repeat循环语句〉→ repeat〈语句〉{;〈语句〉}until〈条件〉 3.课程设计目的: 结合课堂上学习的理论知识,通过C++实现词法分析器,更加深入的掌握词法分析;同时也可以更加了解词法分析的原理。 4.课程设计内容:词法分析器 模块划分:字母处理程序、数字处理程序、其他处理程序、主程序 模块调用关系图: 模块 流程 快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计 图: 5.程序源代码: #include #include #include #include #include // #define NULL 0 FILE *fp; char ch; char *keyword[34]={"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 *operatornum[6]={"+","-","*","/","++","--"}; char *comparison[8]={"<","<=","=",">",">=","<>","==","!="}; char *interpunction[8]={",",";",":=",".","(",")","{","}"}; char *biaoshifu[6]={"%","$","^","&","_","#"};//特殊标识符 char *zhushifu[3]={"//","/*","*/"};//注释符 char *luoji[3]={"&&","||","!"};//逻辑运算符 /////////////////////////////////////////////////////////////////////////////// bool search(char searchstr[],int wordtype) { int i; switch (wordtype) { case 1: for(i=0;i<=33;i++) { if(strcmp(keyword[i],searchstr)==0) return(true); } break; case 2:{ for(i=0;i<=5;i++) { if(strcmp(operatornum[i],searchstr)==0) return(true); } break; } case 3: { for(i=0;i<=7;i++) { if(strcmp(comparison[i],searchstr)==0) return(true); } break; } case 4: for(i=0;i<=7;i++) { if(strcmp(interpunction[i],searchstr)==0) return(true); }break; case 5: for(i=0;i<=5;i++) { if(strcmp(biaoshifu[i],searchstr)==0) return(true); }break; case 6: for(i=0;i<=2;i++) { if(strcmp(zhushifu[i],searchstr)==0) return(true); }break; case 7: for(i=0;i<=2;i++) { if(strcmp(luoji[i],searchstr)==0) return(true); }break; } return(false); } /////////////////////////////////////////////////////////////////////////////// char letterprocess (char ch)//字母处理函数 { int i=-1; char letter[20]; while (isalnum(ch)!=0) { letter[++i]=ch; ch=fgetc(fp); }; letter[i+1]='\0'; if (search(letter,1)) { printf("<%s,关键字>\n",letter); } else { printf("<%s,自定义变量>\n",letter); } return(ch); } /////////////////////////////////////////////////////////////////////////////////////////// char numberprocess(char ch)//数字处理程序 { int i=-1; char num[20]; while (isdigit(ch)!=0) { num[++i]=ch; ch=fgetc(fp); } if(isalpha(ch)!=0) { while(isspace(ch)==0) { num[++i]=ch; ch=fgetc(fp); } num[i+1]='\0'; printf("错误!非法标识符:%s\n",num); goto u; } num[i+1]='\0'; printf("<%s,数字>\n",num); u: return(ch); } ////////// char otherprocess(char ch) { int i=-1; char other[20]; if (isspace(ch)!=0) { ch=fgetc(fp); goto u; } while ((isspace(ch)==0)&&(isalnum(ch)==0)) { other[++i]=ch; ch=fgetc(fp); } other[i+1]='\0'; if (search(other,2)) printf("<%s,算数运算符>\n",other); else if (search(other,3)) printf("<%s,关系运算符号>\n",other); else if (search(other,4)) printf("<%s,分隔符号>\n",other); else if (search(other,5)) printf("<%s,特殊标识符号>\n",other); else if (search(other,6)) printf("<%s,注释符号>\n",other); else if (search(other,7)) printf("<%s,逻辑运算符号>\n",other); else printf("错误!非法字符:%s\n",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 ; begin for i:=b * 2 to 100 do begin x:= (a+b) * (c+d) - (a+b+c) ; T:=T+8 ; end end (2)结果 7.设计体会: 本次课设使我对编写c语言程序有了更熟练得掌握,对相关控制函数有了更深的了解,对词法分析也有了更透彻的理解。在编写词法分析程序之初,不知如何开始,所以参考了其它人编好的源代码。此程序的特色对于用户来说就是直观,方便,易于掌握与使用。只是关键字,运算符等的定义范围有限,不够完全。 8.使用说明书: 将需要分析的源代码粘贴到程序根目录下的<源程序.Txt>文本文档中,然后保存,运行程序即可。
本文档为【编译原理-词法分析程序报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_342377
暂无简介~
格式:doc
大小:96KB
软件:Word
页数:11
分类:互联网
上传时间:2010-09-18
浏览量:73