汇编语言词法分析(新).doc_第1页
汇编语言词法分析(新).doc_第2页
汇编语言词法分析(新).doc_第3页
汇编语言词法分析(新).doc_第4页
汇编语言词法分析(新).doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

数学与信息工程学院编译原理实验报告一实验名称:词法分析 实 验 室:6202班 级:09计算机3班姓 名:沈春晖学 号:0929210062词法分析器的设计一、 实验目的通过完成词法分析程序,了解词法分析的过程。编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。二、 实验环境操作系统:window xp编写环境:visual c+ 、c-free、turbo c编写语言:c语言分析语言:PL/0三、 实验内容对PL/0语言进行词法分析,把输入的字符串形式的源程序分割成一个个单词符号,其词法描述如下:(1) 关键字:begin,call,const,do,end,if,odd,procedure,read,then,var,while,write(2) 标识符:用来表示各种名字,必须以字母开头小于10位字符组成(3) 数字:以0-9组成小于14位的数字(4) 运算符:+,-,*,/,:=,=(5) 界符:,,.,;,#表1 各种单词符号对应类型表单词符号类型+plus-minus*times/slash(lparen)rparen=eql,comma.perio#neq;semicolonbeginbeginsymcallcallsymconstconstsymdodosymendendsymififsymoddoddsymprocedureproceduresymreadreadsymthenthensymvarvarsymwhilewhilesymwritewritesymNNYY开始调用GETSYM取单词输入要分析的文件文件是否存在文件是否结束结束打印分析结果图1 主流程图YNNNNNYYYYGETSYM滤空CH=空?GETCHCH是字母?K:=0K=、:=、=等单词,识别后将类别送SYM中(6) 输出源程序 为边读入字符边输出(可输出在文件中)NNGETCH缓冲区是否还有字符?源程序文件是否结束?打印出错信息停止编译读入一行源程序放入在LINE中并输出,置CC:=0CC:=CC+1CH:=LINECC返回YY图3 GETCH流程图四、 实验结果要分析的内容如下:const a=35;var c,d;procedure p;beginvar g;g:=465494366466564444;write(g);end;图4 实验结果图beginread(c,d);if c=d then c:=a;write(c,d);call p;end. 五、 实验小结(心得体会)刚开始的时候运行中报错,原因是函数的调用顺序出现错误,后经调试改正了。通过本实验的完成,更了解了此法分析的基本任务是从字符串表示的原程序中识别出具有独立意义的单词符号,其基本意思是根据少苗到单词符号的第一个字符的种类,拼出相应的单词符号。附录:源代码#include#include string.h#define al 10 /*符号的最大长度*/#define norw 13 /*关键字个数*/#define namx 14 /*数字允许的最长位数*/FILE *fin;FILE *fout;char fnameal,fwnameal,aal+1/*a50*/,idal+1,sym20;static char sword11=+,-,*,/,(,),=,.,#,;static char ssym11al=plus,minus,times,slash,lparen,rparen,eql,comma,period,neq,semicolon;static char word13al=begin,call,const,do,end,if,odd,procedure,read,then,var,while,write;/保留关键字static char wsym13al=beginsym,callsym,constsym,dosym,endsym,ifsym,oddsym,procsym,readsym,thensym,varsym,whilesym,writesym;/关键字类型int cc,ll,cx,linecount,num;char line81;char ch;void main()int getsym();printf(*编译原理实验PL/0语言词法分析*n);printf(请输入进行词法分析的文件名:);scanf(%s,fname);fin=fopen(fname,r);printf(请输入分析结果保存的文件名:);scanf(%s,fwname);fout=fopen(fwname,w);linecount=0;/记录文件的行数cc=ll=0;ch= ;if(fin)printf(n-开始词法分析-n);fprintf(fout,-开始词法分析-n);printf(单词自身的值 单词种别n);fprintf(fout,单词自身的值 单词种别n);while( getsym()!=-1 )printf(%-20s,a);fprintf(fout,%-20s,a);printf(%s,sym);/输出单词种别fprintf(fout,%s,sym);printf(n);fprintf(fout,n);printf(%-20s,a);fprintf(fout,%-20s,a);printf(%s,sym);/输出单词种别fprintf(fout,%s,sym);printf(n程序分析完毕);fprintf(fout,n程序分析完毕);elseprintf(你输入的文件不存在);fprintf(fout,你输入的文件不存在);void error(int rowcount,int wordcount)printf(!第%d行第%d个位置数字越界n,rowcount,wordcount);fprintf(fout,!第%d行第%d个位置数字越界n,rowcount,wordcount);int getch()if(cc=ll)/缓冲是否被读取完毕if(feof(fin)return -1; ll=0;cc=0;ch= ;while(ch!=10)if(EOF=fscanf(fin,%c,&ch)linell=0;break;linell=ch;ll+;linecount+;printf(开始分析程序的第%d行n,linecount);fprintf(fout,开始分析程序的第%d行n,linecount);ch=linecc;cc+;return 0;int getsym()int i,j,k;while(ch= | ch=10 | ch=9 )/*判断字符是否为空,空跳过取下一个字符*/if(-1=getch()return -1;if(ch=a & ch=z)/如果是字符或以字符开头int b=0;k=0;doif(k=a & ch=0 & ch=9);ak=0;strcpy(id,a);i=0;j=norw-1;dok=(i+j)/2;if(strcmp(id,wordk)=0)i=k+1;while(ij) strcpy(sym,wsymk);elsestrcpy(sym,ident);if(b=1) return -1;elseif(ch=0 & ch=0 & chnamx)error(linecount,cc);/错误处理,数字越界 else/如果是计算、比较符号a0=ch; if(ch=:)if(-1=getch()a1=0;return -1;if(ch=)strcpy(sym,becomes);a1=ch;a2=0;if(-1=getch() return -1;elsea1=0;strcpy(sym,nul);/不可识别符号 elseif(ch=)if(-1=getch() a1=0;return -1;if(ch=)a1=ch;a2=0;strcpy(sym,geq);if(-1=getch() return -1;elsea1=0;strcpy(sym,gtr);

温馨提示

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

评论

0/150

提交评论