《编译原理》课程实验报告(词法分析)完整版.doc_第1页
《编译原理》课程实验报告(词法分析)完整版.doc_第2页
《编译原理》课程实验报告(词法分析)完整版.doc_第3页
《编译原理》课程实验报告(词法分析)完整版.doc_第4页
《编译原理》课程实验报告(词法分析)完整版.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

编译原理课程实验报告题目 词法分析 专业 计算机 指导教师签名 华东理工大学信息学院计算机系2013年4月10日一. 实验序号:编译原理第一次实验二. 实验题目:词法分析三. 实验日期: 2013.3.27-2013.4.10 四. 实验环境(操作系统,开发语言)操作系统:Windows开发语言:C五. 实验要求l 修改词法:1) 将标识符的词法改为“以大写字母或小写字母开头,后面可以跟大写字母或小写字母或数字或下划线”。把while (isalpha(buffer)|(isdigit(buffer)改成while (isalpha(buffer)|(isdigit(buffer)|buffer=_)2) 将中的表示相等关系的单词“=”改为“= =”char *relation6=,=,;把其中的=改成=即可3) 将原来无小数的数改为可以有小数的数把while (isdigit(buffer)改成while (isdigit(buffer)|buffer=.)l 用C语言开发词法分析程序。读入用PL/0语言编写的测试用例源程序,将识别出的一个个单词组成单词流依序同时输出到屏幕和文件中。六. 实验步骤1) 根据修改词法后的PL/0语言编写测试用例源程序。2) 用C语言编写词法分析程序。读入PL/0语言的测试用例源程序,进行词法分析,将识别出的一个个单词组成单词流依序同时输出到屏幕和文件中。3) 设立断点,单步运行词法分析程序,依次单个输出单词。分析和理解词法分析程序,解释词法分析程序中的数据和变量变化的原因和输出结果。七. 实验结果(测试用例源程序,运行结果部分截图,词法分析函数主要部分源程序PL0程序:const a=6,b=81;var x,y;procEdure p; procedure q; x:=2;begin x:=1; write(x);end;begin call p;end.C程序:#include #include #include #include #include #define NULL 0FILE *fp;char cbuffer;char *key19=auto,break,case,char,const,continue,default,do,double, else,enum,extern,float,for,goto,if,int,long,register ;char *border6=,;,(,);char *arithmetic4=+,-,*,/;char *relation6=,=,;char *consts11=0,1,2,3,4,5,6,7,8,9,.;char *label20;int labelnum=0;int search(char searchchar,int wordtype) int i=0; switch (wordtype) case 1:for (i=0;i=18;i+) if (strcmp(keyi,searchchar)=0) return(1); return(0); break; case 2:for (i=0;i=5;i+) if (strcmp(borderi,searchchar)=0) return(i+1); return(0); break; case 3:for (i=0;i=3;i+) if (strcmp(arithmetici,searchchar)=0) return(1); return(0); break; case 4:for (i=0;i=5;i+) if (strcmp(relationi,searchchar)=0) return(1); return(0); break; case 5: for (i=0;i=10;i+) if (strcmp(constsi,searchchar)=0) return; return(0); break; char alphaprocess(char buffer) int atype; int i=-1; char alphatp20; while (isalpha(buffer)|(isdigit(buffer) alphatp+i=buffer; buffer=fgetc(fp); alphatpi+1=0; atype=search(alphatp,1); if(atype=1) printf(%s t 保留字n,alphatp);/结束 if(atype=0) printf(%s t 标示符n,alphatp); return(buffer);char digitprocess(char buffer) int i=-1; char digittp20; int dtype; while (isdigit(buffer) digittp+i=buffer; buffer=fgetc(fp); digittpi+1=0; dtype=search(digittp,5); if(dtype=1) printf(%s t 数字 t %sn,digittp,digittp); return(buffer);char otherprocess(char buffer) int i=-1; char othertp20; int otype,otypetp; othertp0=buffer; othertp1=0; otype=search(othertp,3); if (otype=1) printf(%s t 运算符n,othertp); buffer=fgetc(fp); goto out; otype=search(othertp,4); if (otype=1) buffer=fgetc(fp); othertp1=buffer; othertp2=0; otypetp=search(othertp,4); if (otypetp=1) printf(%s t 运算符n,othertp); goto out; else othertp1=0; printf(%s t 运算符n,othertp); goto out; if (buffer=:) buffer=fgetc(fp); if (buffer=) printf(:= t 运算符n); buffer=fgetc(fp); goto out; else if (otype=search(othertp,2) printf(%s t 界符n,othertp); buffer=fgetc(fp); goto out; if (buffer!=n)&(buffer!= ) printf(%c error,not a wordn,buffer); buffer=fgetc(fp);out: return(buffer);void main() if (fp=fopen(example.txt,r)=NULL) printf(error); elsecbuffer = fgetc(fp);while (cbuffer!=EOF) if (isalpha(cbuffer) cbuffer=alphaprocess(cbuffer); else if (isdigit(cbuffer) cbuffer=digitprocess(cbuffer); else cbuffer=otherprocess(cbuffer); printf(overn); getchar(); 八. 实验体会(词法分析程序修改的地方,解决问题的方法

温馨提示

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

评论

0/150

提交评论