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

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

ID:47466728

大小:163.00 KB

页数:26页

时间:2020-01-11

编译原理实验1扫描器的设计与实现_第1页
编译原理实验1扫描器的设计与实现_第2页
编译原理实验1扫描器的设计与实现_第3页
编译原理实验1扫描器的设计与实现_第4页
编译原理实验1扫描器的设计与实现_第5页
资源描述:

《编译原理实验1扫描器的设计与实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、实验1:扫描器的设计与实现1.1.目的和要求1.加深对词法分析理论的理解,培养动手实践的能力。2.学会从以字符串表示的源程序中识别出具有独立意义的基本语法单位,同时指出它们的属性的方法和技术。1.2.实验环境WindowsXP+WinTC1911.3.实验准备1、先将课本3.5节词法分析程序的生成认真的学习一遍,理解词法分析程序的构成过程。2、写出C语言测试程序,分析可能得到的结果。测试程序:#definepi3.14voidmain(){doubler=2.5;doubles=0.0;s=pi*r*r;printf("%f

2、",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,pr

3、intf)(502,()(509,")(511,%)(100,f)(509,")(512,,)(100,s)(503,))(501,;)(507,})1.4.实验内容及步骤1、输入已给的文本格式的扫描程序Lexical.c文件,然后编译运行,检查修改错误。262、编译成功后,提示输入C语言测试程序,用回车键查看输出的单词流,即单词符号及其属性。3、比较自己分析的结果和屏幕上的输出结果。1.1.实验小结1、得到的经验。通过本次实验,我了解了如何设计、编制并调试词法分析程序,加深了对词法分析原理的理解。同时,在编制和调试程序时要

4、全面考虑,避免漏掉或者错误定义定界符等,造成不必要的错误。2、遇到的主要问题。忘记对空格、回车符等定界符进行设置等。3、改进方案。26(1)char*keywords[15]={"void","main","if","then","break","int","char","float","include","for","while","printf","scanf","define","double"};(2)case13:{flag=14;status=1;break;}case14:{flag=15;status=1;b

5、reak;}(3)case'.':{words[j]=ch;words[j+1]='';flag=514;break;}case'':{words[j]='';flag=250;break;}case'':{flag=251;break;}(4)elseif(flag==250

6、

7、flag==251){}修改前源代码:#include"stdio.h"#include"stdlib.h"#include"string.h"inti,j,k,flag,number,status;26/*statuswhichisuse

8、tojudgethestringiskeywordsornot!*/charch;charwords[10]={""};charprogram[500];intScan(charprogram[]){char*keywords[13]={"void","main","if","then","break","int","char","float","include","for","while","printf","scanf"};number=0;status=0;j=0;ch=program[i++];/*Tohandlet

9、helettlespaceandstab*//*handleletters*/if((ch>='a')&&(ch<='z')){while((ch>='a')&&(ch<='z')){words[j++]=ch;ch=program[i++];}i--;words[j++]='';for(k=0;k<13;k++)if(strcmp(words,keywords[k])==0)switch(k){case0:{flag=1;status=1;break;}case1:{flag=2;status=1;26break;}c

10、ase2:{flag=3;status=1;break;}case3:{flag=4;status=1;break;}case4:{flag=5;status=1;break;}case5:{flag=6;status=1;break;}case6:{flag=7;status=1;bre

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。