欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > DOC文档下载  

    编译原理实验1扫描器的设计与实现.doc

    • 资源ID:8183       资源大小:119KB        全文页数:26页
    • 资源格式: DOC        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    编译原理实验1扫描器的设计与实现.doc

    word实验1: 扫描器的设计与实现1.1. 目的和要求1 加深对词法分析理论的理解,培养动手实践的能力。2 学会从以字符串表示的源程序中识别出具有独立意义的基本语法单位,同时指出它们的属性的方法和技术。1.2. 实验环境Windows XP + WinTC1911.3. 实验准备1、先将课本3.5节词法分析程序的生成认真的学习一遍,理解词法分析程序的构成过程。2、写出C语言测试程序,分析可能得到的结果。测试程序:#define pi 3.14void main() double r = 2.5; double s = 0.0; s = pi*r*r; printf("%f",s);预测结果:(513,#)(14,define)(100,pi)(200,3)(514,.)(200,14)(1,void)(2,main)(502,()(503,)(506,)(15,double)(100,r)(402,=)(200,2)(514,.)(200,5)(501,;)(15,double)(100,s)(402,=)(200,0)(514,.)(200,0)(501,;)(100,s)(402,=)(100,pi)(416,*)(100,r)(416,*)(100,r)(501,;)(12,printf)(502,()(509,")(511,%)(100,f)(509,")(512,)(100,s)(503,)(501,;)(507,)1.4. 实验容及步骤1、输入已给的文本格式的扫描程序Lexical.c文件,然后编译运行,检查修改错误。2、编译成功后,提示输入C语言测试程序,用回车键查看输出的单词流,即单词符号及其属性。3、比较自己分析的结果和屏幕上的输出结果。1.5. 实验小结1、得到的经验。通过本次实验,我了解了如何设计、编制并调试词法分析程序,加深了对词法分析原理的理解。同时,在编制和调试程序时要全面考虑,避免漏掉或者错误定义定界符等,造成不必要的错误。2、遇到的主要问题。忘记对空格、回车符等定界符进行设置等。3、改进方案。(1)char *keywords15 = "void","main","if","then","break","int","char","float","include","for","while","printf","scanf","define","double"(2)case 13:flag = 14;status = 1;break;case 14:flag = 15;status = 1;break;(3)case'.':wordsj = ch;wordsj+1 = '0'flag = 514;break;case' ':wordsj = ' 'flag = 250;break;case'n':flag = 251;break;(4)else if(flag = 250|flag = 251)修改前源代码:#include"stdio.h"#include"stdlib.h"#include"string.h"int i,j,k,flag,number,status;/*status which is use to judge the string is keywords or not!*/char ch;char words10 = " "char program500;int Scan(char program)char *keywords13 = "void","main","if","then","break","int","char","float","include","for","while","printf","scanf"number = 0;status = 0;j = 0;ch = programi+; /* To handle the lettle space ands tab*/*handle letters*/if (ch >= 'a') && (ch <= 'z' )while (ch >= 'a') && (ch <= 'z' )wordsj+=ch;ch=programi+;i-;wordsj+ = '0'for (k = 0; k < 13; k+)if (strcmp (words,keywordsk) = 0)switch(k)case 0:flag = 1;status = 1;break;case 1:flag = 2;status = 1;break;case 2:flag = 3;status = 1;break;case 3:flag = 4;status = 1;break;case 4:flag = 5;status = 1;break;case 5:flag = 6;status = 1;break;case 6:flag = 7;status = 1;break;case 7:flag = 8;status = 1;break;case 8:flag = 9;status = 1;break;case 9:flag = 10;status = 1;break;case 10:flag = 11;status = 1;break;case 11:flag = 12;status = 1;break;case 12:flag = 13;status = 1;break;if (status = 0)flag = 100;/*handle digits*/else if (ch >= '0') && (ch <= '9')number = 0;while (ch >= '0' ) && (ch <= '9' )number = number*10+(ch-'0');ch= programi+;flag = 200;i-;/*opereation and edge handle*/else switch (ch)case '=':if (ch = '=')wordsj+ = ch;wordsj= '0'ch= programi+;if (ch = '=')wordsj+ = ch;wordsj= '0'flag = 401;elsei-;flag = 402;break;case'>':if (ch = '>')wordsj+ = ch;wordsj = '0'ch= programi+;if (ch = '=')wordsj+ = ch;wordsj = '0'flag = 403;elsei-;flag = 404;break;case'<':if (ch = '<')wordsj+ = ch;wordsj = '0'ch= programi+;if (ch = '=')wordsj+ = ch;wordsj= '0'flag = 405;elsei-;flag = 406;break;case'!':if (ch = '!')wordsj+ = ch;wordsj= '0'ch = programi+;if (ch = '=')wordsj+ = ch;wordsj= '0'flag= 407;elsei-;flag = 408;break;case'+':if (ch = '+')wordsj+ = ch;wordsj = '0'ch= programi+;if (ch = '=')wordsj+ = ch;wordsj = '0'flag= 409;else if (ch = '+')wordsj+ = ch;wordsj = '0'flag= 410;elsei-;flag= 411;break;case'-':if (ch = '-')wordsj+ = ch;wordsj = '0'ch= programi+;if (ch = '=')wordsj+ = ch;wordsj = '0'flag = 412;else if( ch = '-')wordsj+ = ch;wordsj = '0'flag = 413;elsei-;flag = 414;break;case'*':if (ch = '*')wordsj+ = ch;wordsj = '0'ch= programi+;if (ch = '=')wordsj+ = ch;wordsj = '0'flag = 415;elsei-;flag = 416;break;case'/':if (ch = '/')wordsj+ = ch;wordsj = '0'ch= programi+;if (ch = '=')wordsj+ = ch;wordsj = '0'flag= 417;elsei-;flag = 418;break;case'':wordsj = ch;wordsj+1 = '0'flag = 501;break;case'(':wordsj = ch;wordsj+1 = '0'flag = 502;break;case')':wordsj = ch;wordsj+1 = '0'flag = 503;break;case'':wordsj = ch;wordsj+1 = '0'flag = 504;break;case'':wordsj = ch;wordsj+1 = '0'flag = 505;break;case'':wordsj = ch;wordsj+1 = '0'flag= 506;break;case'':wordsj = ch;wordsj+1 = '0'flag = 507;break;case':':wordsj = ch;wordsj+1 = '0'flag = 508;break;case'"':wordsj = ch;wordsj+1 = '0'flag = 509;break;case'%':if (ch = '%')wordsj+ = ch;wordsj = '0'ch = programi+;if (ch = '=')wordsj+ = ch;wordsj = '0'flag= 510;elsei-;flag = 511;break;case',':wordsj = ch;wordsj+1 = '0'flag = 512;break;case'#':wordsj = ch;wordsj+1 = '0'flag = 513;break;case'':wordsj = '#'flag = 0;break;default:flag = -1;break;return flag;main()i=0;printf("please input a program end with ");doch = getchar();programi+ = ch;while(ch != '');i = 0;doflag = Scan(program);if (flag = 200)printf("(%2d,%4d)",flag,number);else if (flag = -1)printf("(%d,error)",flag);elseprintf("(%2d,%4s)",flag,words);while (flag != 0);system("pause");修改后源代码:#include"stdio.h"#include"stdlib.h"#include"string.h"int i,j,k,flag,number,status;/*status which is use to judge the string is keywords or not!*/char ch;char words10 = " "char program500;int Scan(char program)char *keywords15 = "void","main","if","then","break","int","char","float","include","for","while","printf","scanf","define","double"number = 0;status = 0;j = 0;ch = programi+; /* To handle the lettle space ands tab*/*handle letters*/if (ch >= 'a') && (ch <= 'z' )while (ch >= 'a') && (ch <= 'z' )wordsj+=ch;ch=programi+;i-;wordsj+ = '0'for (k = 0; k < 15; k+)if (strcmp (words,keywordsk) = 0)switch(k)case 0:flag = 1;status = 1;break;case 1:flag = 2;status = 1;break;case 2:flag = 3;status = 1;break;case 3:flag = 4;status = 1;break;case 4:flag = 5;status = 1;break;case 5:flag = 6;status = 1;break;case 6:flag = 7;status = 1;break;case 7:flag = 8;status = 1;break;case 8:flag = 9;status = 1;break;case 9:flag = 10;status = 1;break;case 10:flag = 11;status = 1;break;case 11:flag = 12;status = 1;break;case 12:flag = 13;status = 1;break;case 13:flag = 14;status = 1;break;case 14:flag = 15;status = 1;break;if (status = 0)flag = 100;/*handle digits*/else if (ch >= '0') && (ch <= '9')number = 0;while (ch >= '0' ) && (ch <= '9' )number = number*10+(ch-'0');ch= programi+;flag = 200;i-;/*opereation and edge handle*/else switch (ch)case '=':if (ch = '=')wordsj+ = ch;wordsj= '0'ch= programi+;if (ch = '=')wordsj+ = ch;wordsj= '0'flag = 401;elsei-;flag = 402;break;case'>':if (ch = '>')wordsj+ = ch;wordsj = '0'ch= programi+;if (ch = '=')wordsj+ = ch;wordsj = '0'flag = 403;elsei-;flag = 404;break;case'<':if (ch = '<')wordsj+ = ch;wordsj = '0'ch= programi+;if (ch = '=')wordsj+ = ch;wordsj= '0'flag = 405;elsei-;flag = 406;break;case'!':if (ch = '!')wordsj+ = ch;wordsj= '0'ch = programi+;if (ch = '=')wordsj+ = ch;wordsj= '0'flag= 407;elsei-;flag = 408;break;case'+':if (ch = '+')wordsj+ = ch;wordsj = '0'ch= programi+;if (ch = '=')wordsj+ = ch;wordsj = '0'flag= 409;else if (ch = '+')wordsj+ = ch;wordsj = '0'flag= 410;elsei-;flag= 411;break;case'-':if (ch = '-')wordsj+ = ch;wordsj = '0'ch= programi+;if (ch = '=')wordsj+ = ch;wordsj = '0'flag = 412;else if( ch = '-')wordsj+ = ch;wordsj = '0'flag = 413;elsei-;flag = 414;break;case'*':if (ch = '*')wordsj+ = ch;wordsj = '0'ch= programi+;if (ch = '=')wordsj+ = ch;wordsj = '0'flag = 415;elsei-;flag = 416;break;case'/':if (ch = '/')wordsj+ = ch;wordsj = '0'ch= programi+;if (ch = '=')wordsj+ = ch;wordsj = '0'flag= 417;elsei-;flag = 418;break;case'':wordsj = ch;wordsj+1 = '0'flag = 501;break;case'(':wordsj = ch;wordsj+1 = '0'flag = 502;break;case')':wordsj = ch;wordsj+1 = '0'flag = 503;break;case'':wordsj = ch;wordsj+1 = '0'flag = 504;break;case'':wordsj = ch;wordsj+1 = '0'flag = 505;break;case'':wordsj = ch;wordsj+1 = '0'flag= 506;break;case'':wordsj = ch;wordsj+1 = '0'flag = 507;break;case':':wordsj = ch;wordsj+1 = '0'flag = 508;break;case'"':wordsj = ch;wordsj+1 = '0'flag = 509;break;case'%':if (ch = '%')wordsj+ = ch;wordsj = '0'ch = programi+;if (ch = '=')wordsj+ = ch;wordsj = '0'flag= 510;elsei-;flag = 511;break;case',':wordsj = ch;wordsj+1 = '0'flag = 512;break;case'#':wordsj = ch;wordsj+1 = '0'flag = 513;break;case'':wordsj = '#'flag = 0;break;case'.':wordsj = ch;wordsj+1 = '0'flag = 514;break;case' ':wordsj = ' 'flag = 250;break;case'n':flag = 251;break;default:flag = -1;break;return flag;main()i=0;printf("please input a program end with ");doch = getchar();programi+ = ch;while(ch != '');i = 0;doflag = Scan(program);if (flag = 200)printf("(%2d,%4d)",flag,number);else if (flag = -1)printf("(%d,error)",flag);else if(flag = 250|flag = 251)elseprintf("(%2d,%4s)",flag,words);while (flag != 0);system("pause");26 / 26

    注意事项

    本文(编译原理实验1扫描器的设计与实现.doc)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开