版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验 1: 扫描器的设计与实现1.1. 目的和要求1 加深对词法分析理论的理解,培养动手实践的能力。2 学会从以字符串表示的源程序中识别出具有独立意义的基本语法 单位,同时指出它们的属性的方法和技术。1.2. 实验环境Windows XP + WinTC1911.3. 实验准备1、先将课本节词法分析程序的生成认真的学习一遍,理解词法分析程 序的构成过程。2、写出 C 语言测试程序,分析可能得到的结果。测试程序: #define pivoid main()double r = ;double s = ;s = pi*r*r;printf(%f,s);预测结果:(513,#)(14,define)
2、(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,;)
3、(507,)1.4. 实验内容及步骤1、输入已给的文本格式的扫描程序文件,然后编译运行,检查修改错 误。2、编译成功后,提示输入C语言测试程序,用回车键查看输出的单词 流,即单词符号及其属性。伙脣译原1谊El DC-1AL驭i询please input a program end with ttdFine pi 3.It uoid main()double r = 2.5;doubles = 0.0;s = pi*r*r;printf,s) ji aj匚1513,tt)(14 define )(100,pi)(200,.1(200,It)( l,uo502,()(503,Desos,)(15,
4、double)(100,r)(402=)(209,(200s5)(501,;)(15sdouble)(100,s)(402,=)(200,9)(514,)(501,;)(100,s)(402,=)(100,pi)(416,*)(100,r)(416,)(501,;)(12,printf)(502,0 ( 509,*)(511rX)(100ff)(509fJ(100,5)(503,)1501,=)(507,IX讥ttJPress曰iw kc io3、比较自己分析的结果和屏幕上的输出结果1.5. 实验小结1、得到的经验。通过本次实验,我了解了如何设计、编制并调试词法分析程序,加深 了对词法分析原理
5、的理解。同时,在编制和调试程序时要全面考虑, 避免漏掉或者错误定义定界符等,造成不必要的错误。2、遇到的主要问题。 忘记对空格、回车符等定界符进行设置等。3、改进方案。(1)char *keywords15 = void,main,if,then,break,int,char,float,inc lude,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 =
6、 0; flag = 514; break;case : wordsj = ;flag = 250;break;casen:flag = 251;break;(4) else if(flag = 250|flag = 251)修改前源代码:#include #include#include 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
7、)char *keywords13 =void,main,if,then,break,int,char,float,inc lude,for,while,printf,scanf;number = 0;status = 0;j = 0;ch = programi+;/* To handle the lettle space andstab*/*handle letters*/if (ch = a) & (ch = a) & (ch = z )wordsj+=ch;ch=programi+;i-;wordsj+ = 0;for (k = 0; k = 0) & (ch = 0 ) & (ch :
8、if (ch = ) wordsj+ = ch; wordsj = 0; ch= programi+; if (ch = =)wordsj+ = ch;flag = 403;elsei-;flag = 404;break;case:if (ch = = a) & (ch = a) & (ch = z )wordsj+=ch;ch=programi+;i-;wordsj+ = 0;for (k = 0; k = 0) & (ch = 0 ) & (ch :if (ch = ) wordsj+ = ch;wordsj = 0;ch= programi+; if (ch = =) wordsj+ =
9、 ch;wordsj = 0;flag = 403;elsei-;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
10、 = +) wordsj+ = ch; wordsj = 0; ch= programi+; if (ch = =)wordsj+ = ch;wordsj = 0; flag= 409;else if (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
11、= 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
12、= 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;
13、 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;
14、 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;casen: flag = 251; break;default:flag = -1; break;return flag;main()i=0;printf(please input a program end with ); doch = getchar();programi+ = ch;w
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025人员档案寄存合同
- 东海花园租赁合同范例
- 北京劳务清包合同范例
- 养殖保价合同范本
- 农村售房合同范例
- 医院分院签约合同范例
- 买房卖房合同范例
- 出口买卖合同范本
- 公路长期运输合同范本
- 养生馆加盟合同范本
- 输变电工程监督检查标准化清单-质监站检查
- 2024-2025学年北京海淀区高二(上)期末生物试卷(含答案)
- 【超星学习通】马克思主义基本原理(南开大学)尔雅章节测试网课答案
- 2024年中国工业涂料行业发展现状、市场前景、投资方向分析报告(智研咨询发布)
- 化工企业重大事故隐患判定标准培训考试卷(后附答案)
- 工伤赔偿授权委托书范例
- 食堂餐具炊具供货服务方案
- 员工安全健康手册
- 自然科学基础(小学教育专业)全套教学课件
- 华为客服制度
- 医美面部抗衰老注射项目培训课件
评论
0/150
提交评论