编译原理简单样本语言的词法分析器

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

-1-昆明理工大学信息工程与自动化学院学生实验报告(2012—2013学年第1学期)课程名称:编译原理开课实验室:信自楼44年月日年级、专业、班学号姓名成绩实验项目名称简单样本语言的词法分析器指导教师李亚教师评语该同学是否了解实验原理:A.了解□B.基本了解□C.不了解□该同学的实验能力:A.强□B.中等□C.差□该同学的实验是否达到要求:A.达到□B.基本达到□C.未达到□实验报告是否规范:A.规范□B.基本规范□C.不规范□实验过程是否详细记录:A.详细□B.一般□C.没有□教师签名:年月日一、实验目的及内容设计、编制、调试一个词法分析子程序-识别单词,加深对词法分析原理的理解。二、实验原理及基本技术路线图(方框原理图或程序流程图)对给定的程序通过词法分析器弄够识别一个个单词符号,并以二元式(单词种别码,单词符号的属性值)显示。而本程序则是通过对给定路径的文件的分析后以单词符号和文字提示显示。三、所用仪器、材料(设备名称、型号、规格等或使用软件)WINDOWS下的VISUALC++6.0;四、实验方法、步骤(或:程序代码或操作过程)#includeiostream#includestringusingnamespacestd;-2-#defineMAX22charch='';stringkey[15]={begin,end,if,then,else,while,write,read,do,call,const,char,until,procedure,repeat};intIskey(stringc){//关键字判断inti;for(i=0;iMAX;i++){if(key[i].compare(c)==0)return1;}return0;}intIsLetter(charc){//判断是否为字母if(((c='z')&&(c='a'))||((c='Z')&&(c='A')))return1;elsereturn0;}intIsDigit(charc){//判断是否为数字if(c='0'&&c='9')return1;elsereturn0;}voidanalyse(FILE*fpin){stringarr=;while((ch=fgetc(fpin))!=EOF){arr=;if(ch==''||ch=='\t'||ch=='\n'){}elseif(IsLetter(ch)){while(IsLetter(ch)||IsDigit(ch)){if((ch='Z')&&(ch='A'))ch=ch+32;arr=arr+ch;ch=fgetc(fpin);}fseek(fpin,-1L,SEEK_CUR);if(Iskey(arr)){coutarr\t$关键字endl;}elsecoutarr\t$普通标识符endl;}elseif(IsDigit(ch)){while(IsDigit(ch)||ch=='.'&&IsDigit(fgetc(fpin))){arr=arr+ch;ch=fgetc(fpin);}fseek(fpin,-1L,SEEK_CUR);coutarr\t$无符号实数endl;}elseswitch(ch){case'+':-3-case'-':case'*':case'=':case'/':coutch\t$运算符endl;break;case'(':case')':case'[':case']':case';':case'.':case',':case'{':case'}':coutch\t$界符endl;break;case':':{ch=fgetc(fpin);if(ch=='=')cout:=\t$运算符endl;else{cout=\t$运算符endl;;fseek(fpin,-1L,SEEK_CUR);}}break;case'':{ch=fgetc(fpin);if(ch=='=')cout=\t$运算符endl;if(ch=='')cout\t$输入控制符endl;else{cout\t$运算符endl;fseek(fpin,-1L,SEEK_CUR);}}break;case'':{ch=fgetc(fpin);if(ch=='=')cout=\t$运算符endl;elseif(ch=='')cout\t$输出控制符endl;elseif(ch=='')cout\t$运算符endl;else{cout\t$运算符endl;fseek(fpin,-1L,SEEK_CUR);}}break;default:coutch\t$无法识别字符endl;}}}voidmain(){charin_fn[30];FILE*fpin;cout请输入源文件名(包括路径和后缀名):;for(;;){cinin_fn;if((fpin=fopen(in_fn,r))!=NULL)break;elsecout文件路径错误!请输入源文件名(包括路径和后缀名):;}cout\n********************分析如下*********************endl;analyse(fpin);-4-fclose(fpin);}五、实验过程原始记录(测试数据、图表、计算等)源程序为:#includestdio.hintmain(){doubler,s,h,v;printf(r,h=?);scanf(%lf,%lf,&r,&h);s=3.1415926*r*r;v=s*h;printf(r=%.2f,s=%.2f,h=%.2f,v=%.2f\n\n,r,s,h,v);return0;}-5--6-六、实验结果、分析和结论(误差分析与数据处理、成果总结等。其中,绘制曲线图时必须用计算纸或程序运行结果、改进、收获)词法分析器主要特点是不依靠语法,而只依靠词法,即处理一个单词时不依赖于外部单词的信息,因此词法分析器一般都很简单。语法分析时,调用词法分析器,根据已知文法利用递归向下分析,检查语法错误。在分析时,一是把词法分析器当成语法分析的一部分,另一种是把词法分析器当成编译程序的独立部分。在前一种情况下,词法分析器不断地被语法分析器调用,每调用一次词法分析器将从源程序的字符序列拼出一个单词,并将其Token值返回给语法分析器。后一种情况则不同,词法分析器不是被语法分析器不断地调用,而是一次扫描全部单词完成编译器的独立一遍任务。这次实验刚开始我的时候我是对照课本先把代码输入,编译的时候只有很少的错误,很快我就把错误修改正确,在连接的时候,有错误,我还没讲要分析的文件名写入,写入后运行正确。这从实验学到了很多知识,对词法分析器有了很多了解。注:教师必须按照上述各项内容严格要求,认真批改和评定学生成绩。

1 / 6
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功