还剩9页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
《编译原理》课程设计课程设计题目词法分析器__所在学院__所在专业__所在班级作者学号作者姓名指导教师姓名完成时间2009年6月18日
1.课程设计任务书课题名称《编译原理》课程设计完成时间
2010.
7.14指导教师杨焱职称讲师学生姓名李旭昆班级207721总体设计要求总体设计要求每个学生按照课程设计要求,在规定的时间内__完成题目编译程序构造涉及内容编译器的结构,词法分析、语法分析工作内容及时间进度安排第一天设计动员,布置课程设计任务,查阅资料,制定方案,进行程序方案设计第一天编写和调试程序第三天编写和调试程序,第四天编写和调试程序,整理,提交调研报告,撰写设计报告第五天验收,提交设计报告,评定成绩课程设计成果
1、调研报告一份,课程设计报告书一份
2、源程序清单一份
3、成果使用说明书一份
2.调试PL/0编译程序习题第七题.正确的程序为varabc;beginreadab;c:=100;ifa0thenbeginb:=b+1;writebend;writeabc;end.第八题.1扩充条件语句的语法图为EBNF的语法描述为〈条件语句〉→if〈条件〉then〈语句〉[else〈语句〉]2扩充repeat语句的语法图为EBNF的语法描述为〈repeat循环语句〉→repeat〈语句〉{;〈语句〉}until〈条件〉
3.课程设计目的结合课堂上学习的理论知识,通过C++实现词法分析器,更加深入的掌握词法分析;同时也可以更加了解词法分析的原理
4.课程设计内容词法分析器模块划分字母处理程序、数字处理程序、其他处理程序、主程序模块调用关系图模块流程图
5.程序源代码#includestdio.h#includestdlib.h#includestring.h#includectype.h#includeconio.h//#defineNULL0FILE*fp;charch;char*keyword
[34]={autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefprintfunionunsignedvoidvolatilewhile__in};char*operatornum
[6]={+-*/++--};char*comparison
[8]={=====!=};char*interpunction
[8]={;:=.{}};char*biaoshifu
[6]={%$^_#};//特殊标识符char*zhushifu
[3]={///**/};//注释符char*luoji
[3]={||!};//逻辑运算符///////////////////////////////////////////////////////////////////////////////boolsearchcharsearchstr[]intwordtype{inti;switchwordtype{case1:fori=0;i=33;i++{ifstrcmpkeyword[i]searchstr==0returntrue;}break;case2:{fori=0;i=5;i++{ifstrcmpoperatornum[i]searchstr==0returntrue;}break;}case3:{fori=0;i=7;i++{ifstrcmpcomparison[i]searchstr==0returntrue;}break;}case4:fori=0;i=7;i++{ifstrcmpinterpunction[i]searchstr==0returntrue;}break;case5:fori=0;i=5;i++{ifstrcmpbiaoshifu[i]searchstr==0returntrue;}break;case6:fori=0;i=2;i++{ifstrcmpzhushifu[i]searchstr==0returntrue;}break;case7:fori=0;i=2;i++{ifstrcmpluoji[i]searchstr==0returntrue;}break;}returnfalse;}///////////////////////////////////////////////////////////////////////////////charletterpro__sscharch//字母处理函数{inti=-1;charletter
[20];whileisalnumch!=0{letter[++i]=ch;ch=fgetcfp;};letter[i+1]=\0;ifsearchletter1{printf%s关键字\nletter;}else{printf%s自定义变量\nletter;}returnch;}///////////////////////////////////////////////////////////////////////////////////////////charnumberpro__sscharch//数字处理程序{inti=-1;charnum
[20];whileisdigitch!=0{num[++i]=ch;ch=fgetcfp;}ifisalphach!=0{whileisspa__ch==0{num[++i]=ch;ch=fgetcfp;}num[i+1]=\0;printf错误!非法标识符%s\nnum;gotou;}num[i+1]=\0;printf%s数字\nnum;u:returnch;}//////////charotherpro__sscharch{inti=-1;charother
[20];ifisspa__ch!=0{ch=fgetcfp;gotou;}whileisspa__ch==0isalnumch==0{other[++i]=ch;ch=fgetcfp;}other[i+1]=\0;ifsearchother2printf%s算数运算符\nother;elseifsearchother3printf%s关系运算符号\nother;elseifsearchother4printf%s分隔符号\nother;elseifsearchother5printf%s特殊标识符号\nother;elseifsearchother6printf%s注释符号\nother;elseifsearchother7printf%s逻辑运算符号\nother;elseprintf错误!非法字符%s\nother;u:returnch;}///////////////////////////////////////////////////////////////////////////////void__in{charstrc;printf**********************************词法分析器************************************\n;iffp=fopen源程序.___r==NULLprintf源程序无法打开!\n;else{str=fgetcfp;whilestr!=EOF//文件结束标志{ifisalphastr!=0str=letterpro__ssstr;else{ifisdigitstr!=0str=numberpro__ssstr;elsestr=otherpro__ssstr;}};printf词法分析结束,谢谢使用!\n;printf点任意键退出!\n;}c=getch;}
6.程序测试数据和结果
(1)数据varabc:integer;x:char;beginfori:=b*2to100dobeginx:=a+b*c+d-a+b+c;T:=T+8;endend
(2)结果
7.设计体会本次课设使我对编写c语言程序有了更熟练得掌握,对相关控制函数有了更深的了解,对词法分析也有了更透彻的理解在编写词法分析程序之初,不知如何开始,所以参考了其它人编好的源代码此程序的特色对于用户来说就是直观,方便,易于掌握与使用只是关键字,运算符等的定义范围有限,不够完全
8.使用说明书将需要分析的源代码粘贴到程序根目录下的源程序.___文本文档中,然后保存,运行程序即可If条件then语句else语句resent语句Until条件1主程序字母处理程序数字处理程序其他处理程序否是判断文件是否为空初始化设置开始结束读取文件字符判断字符类型输出:非法字符字符处理程序输出相应字符是否有结束标志结束。