词法的实验报告分析_第1页
词法的实验报告分析_第2页
词法的实验报告分析_第3页
词法的实验报告分析_第4页
词法的实验报告分析_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、词法分析实验报告目录 TOC o 1-5 h z HYPERLINK l bookmark0 o Current Document 目录1 HYPERLINK l bookmark2 o Current Document 1实验目的2 HYPERLINK l bookmark4 o Current Document 2实验内容2TINY计算机语言描述2实验要求2 HYPERLINK l bookmark8 o Current Document 3此法分析器的程序实现3状态转换图3程序源码-4实验运行效果截图9 HYPERLINK l bookmark12 o Current Document

2、4实验体会101实验目的1、学会针对DFA转换图实现相应的高级语言源程序。2、深刻领会状态转换图的含义,逐步理解有限自动机。3、掌握手工生成词法分析器的方法,了解词法分析器的内部工作原理2实验内容2.1TINY计算机语言描述TINY计算机语言的编译程序的词法分析部分实现。从左到右扫描每行该语言源程序的符号,拼成单词,换成统一的内部表示(token)送给语法分析程序。为了简化程序的编写,有具体的要求如下:1、数仅仅是整数。2、空白符仅仅是空格、回车符、制表符。3、代码是自由格式。4、注释应放在花括号之内,并且不允许嵌套TINY语言的单词保留字特殊符号其他if+标识符(一个或更多的字母)then-

3、else*end/repeat=数(一个或更多的数字)untilreadwrite;2.2实验要求要求实现编译器的以下功能1、按规则拼单词,并转换成二元式形式2、删除注释行3、删除空白符(空格、回车符、制表符)4、列表打印源程序,按照源程序的行打印,在每行的前面加上行号,并且打印出每行包含的记号的二元形式5、发现并定位错误词法分析进行具体的要求1、记号的二元式形式中种类采用枚举方法定义;其中保留字和特殊字符是每个都一个种类,标示符自己是一类,数字是一类;单词的属性就是表示的字符串值。2、词法分析的具体功能实现是一个函数GetTokenQ每次调用都对剩余的字符串分析得到一个单词或记号识别其种类,

4、收集该记号的符号用属性,当识别一个单词完毕,采用返回值的形式返回符号的种类,同时采用程序变量的形式提供当前识别出记号的属性值。这样配合语法分析程序的分析需要的记号及其属性,生成一个语法树。3、标示符和保留字的词法构成相同,为了更好的实现,把语言的保留字建立一个表格存储,这样可以把保留字的识别放在标示符之后,用识别出的标示符对比该表格,如果存在该表格中则是保留字,否则是一般标示符。3此法分析器的程序实现图1TINY语言的确定有限自动机(DFA3.2程序源码#includeusingnamespacestd;#include#include#includeclassCApublic:voidget

5、Token();识另1J标识符voidpreDo(char);/预处理源程序voiddisplay。;打印出CA()private:long count2;char ID1010;int m;char Cons1010;int n;m=n=0;/符号表设m为符号表中已有的标识符的个数/常数表设n为常数表中已有的常数的个数charbuffeU99999;boolisDigit(char);/检查是否为数字boolisLetter(char);/检查是否为字符intInsertID(char*strToken);/添力口符号intInsertConst(char*strToken);/添力口符号i

6、ntSearch(chara10,constchar*,int);/二分查找;/enumvariety标识符,数字,关键字1,关键字2,关键字3,关键字4,关键字5,关键字6,关键字7,关键字8,特殊符号1,/特殊符号2,特殊符号3,特殊符号4,特殊符号5,特殊符号6,特殊符号7,特殊符号8,特殊符号9,特殊符号10;/关键字bi编码12345678charK1810=else,end,if,read,repeat,then,until,write,boolCA:isDigit(charc)if(c=0)returntrue;elsereturnfalse;boolCA二isLetter(ch

7、arc)if(c=a&c=A&c=Z)returntrue;elsereturnfalse;intCA:Search(chara1810,constchar*b,intn)intleft=0;intright=n-1;intmid=0;while(left=right)mid=(left+right)/2;if(strcmp(amid,b)=0)returnmid;elseif(strcmp(amid,b)0)left=mid+1;elseright=mid-1;return-1;intCA:InsertID(char*strToken)inti=0;while(im)设m为符号表中已有的标识

8、符的个数if(!strcmp(IDi,strToken)returni;i+;strcpy(IDi,strToken);m+;returni;intCA:InsertConst(char*strToken)inti=0;while(in)设n为常数表中已有的常数的个数if(!strcmp(Consi,strToken)returni;i+;strcpy(Consi,strToken);n+;returni;voidCA:display()charfilename30;输入的时候一定要是:/格式cout请输入源程序代码.cpp文件的绝对路径:filename;ifstreaminfile(fil

9、ename,ios:in);if(!infile)cerropenerror!endl;abort();charch;intcount1=1;count2=0;cout第count1行;while(infile.get(ch)preDo(ch);coutch;逐行打印出源程序if(ch=n)count1+;cout第count1行;buffer1count2+1=0;coutendl;对buffeU中的字符进行扫描getToken();infile.close();coutendl;cout符号表:;for(inti=0;im;i+)coutIDi;coutendl;cout数字表:;for(

10、intj=0;jn;j+)coutConsj;coutendl;voidCA二preDo(charc)char*p=buffer1;buffer10=#;/赋#给扫描缓冲区的第一个元素count2+;*(p+count2)=c;if(buffer1count2-1=)/删除注释if(c=)cout注释不允许嵌套!;/注释不允许嵌套if(c!=)count2-;elsecount2=count2-2;elseif(buffer1count2-1=&c=)count2-;若干相继的空白符结合成一个if(c=r)count2-;if(c=t)count2-;voidCA二getToken()intn

11、=1;cout第1行:;for(inti=1;istrlen(buffer1);i+)if(buffer1i=n)n+;coutn第n行:;elseif(isLetter(buffer1i)stringtok=;tok+=buffer1i;while(isLetter(buffer1+i)tok+=buffer1i;intr=Search(K,tok.c_str(),8);i-;if(r!=-1)cout(关键字r+1,tok);/关键字编码elsecout(标识符,tok);/标识符编码r=InsertID(char*)tok.c_str();elseif(isDigit(buffer1i)

12、stringtok=;tok+=buffer1i;while(isDigit(buffer1+i)tok+=buffer1i;inty=InsertConst(char*)tok.c_str();cout(数字,tok);i-;/数字编码elseif(buffer1i=)elsestringtok=;tok+=buffer1i;intq=Search(K,tok.c_str(),18);if(q!=-1)cout(特殊符号,tok);elsecout非法符号!;/*main int main()CA ca;ca.display();couth;1 urite a;,write b;end ;鬻海 澧宣里:烹 鼐符Q 特殊符号L标识符a(特殊符号,一数字,1 褊丁;疾&字1 I咂膻.番甯:篇彘a(特殊符号标识符特殊符号标识符4碉殊符号.;第9行: 天裨字7.unm第1斤:(关键字4-(D (第1组缶标识符Q特殊符号,春行;关键丈8婚心 电识:第13札笑舞学Qnd特赫符号Q第遥74实验体会本次实验是编译技术的第一次实验,按理说也应该是最简单的一次实验验,但是在具体的实现过程中还是遇到了这样或那样的问题,比如对原输入用进

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论