南昌大学编译原理实验2.doc_第1页
南昌大学编译原理实验2.doc_第2页
南昌大学编译原理实验2.doc_第3页
南昌大学编译原理实验2.doc_第4页
南昌大学编译原理实验2.doc_第5页
全文预览已结束

下载本文档

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

文档简介

实验报告学生姓名: 学号: 专业班级: 实验类型: 验证 综合 设计 创新 实验日期: 实验成绩: 一、 实验项目名称实验1 词法分析程序的设计二、 实验目的掌握计算机语言的词法分析程序的开发方法。三、 实验基本原理编制一个能够分析三种整数、标识符、主要运算符和主要关键字的词法分析程序。四、 主要仪器设备及耗材PC微机DOS操作系统或 Windows 操作系统Turbo C 程序集成环境或 Visual C+ 程序集成环境五、 实验步骤1、根据正规式,画出状态转换图;2、根据状态图,设计词法分析算法;3、 采用C或C+语言,设计函数scan( ),实现该算法;4、 编制测试程序(主函数main);5、调试程序:读入文本文件,检查输出结果。六、实验数据及处理结果输入数据:编辑一个文本文件program.txt,在文件中输入如下内容:if data+920x3f thendata=data+01;elsedata=data-01;正确结果: , -程序:#include #include #include #include #include #include #include #define NULL 0FILE *fp;char ch;char *keyword=then,do, else,if,int,while,main;char *operatornum=+,-,*,/,=,=,;,(,),;bool search(char searchstr,int wordtype)int i;switch (wordtype)case 1:for(i=0;i=6;i+)if(strcmp(keywordi,searchstr)=0)return(true); case 2:for(i=0;i=14;i+)if(strcmp(operatornumi,searchstr)=0)return(true);break;break;return(false);char letterprocess (char ch)/字母处理函数int i=-1;char letter20;while (isalnum(ch)!=0)letter+i=ch;ch=fgetc(fp);letteri+1=0;if (search(letter,1)printf(n,letter);elseprintf(n,letter);return(ch);char numberprocess(char ch)/数字处理程序int i=-1,j=-1;char num20;char num120;char ch11;if(ch=0)num+i=ch;ch=fgetc(fp);if(ch=x)num+i=ch;ch=fgetc(fp);while(isdigit(ch)!=0|(ch=a&ch=f)num+i=ch;num1+j=ch;ch=fgetc(fp);if(isalpha(ch)!=0)ch10=ch;ch11=0;while(isspace(ch)=0&(search(ch1,2)=0)num+i=ch;ch=fgetc(fp);ch10=ch; numi+1=0;printf(错误!非法标识符:%sn,num);goto u;num1j+1=0;printf(n,num1);else while (isdigit(ch)!=0)num+i=ch;num1+j=ch;ch=fgetc(fp);if(isalpha(ch)!=0)ch10=ch;ch11=0;while(isspace(ch)=0&(search(ch1,2)=0)num+i=ch;ch=fgetc(fp);ch10=ch; numj+1=0;printf(错误!非法标识符:%sn,num);goto u;num1j+1=0;printf(n,num1);elsewhile (isdigit(ch)!=0)num+i=ch;ch=fgetc(fp);if(isalpha(ch)!=0)ch10=ch;ch11=0;while(isspace(ch)=0&(search(ch1,2)=0) num+i=ch;ch=fgetc(fp);ch10=ch;numi+1=0;printf(错误!非法标识符:%sn,num);goto u;numi+1=0; printf(n,num);u: return(ch);char otherprocess(char ch)int i=-1;char other20;if (isspace(ch)!=0)ch=fgetc(fp);goto u;while (isspace(ch)=0)&(isalnum(ch)=0)other+i=ch;ch=fgetc(fp);otheri+1=0;if (search(other,2)printf(n,other);else printf(错误!非法字符:%sn,other);u:return (ch);void main ()char str,c;printf(*词法分析器*n);if (fp=fopen(program.txt,r)=NULL)printf(源程序无法打开!n);elsestr =fgetc(fp);while (str!=EOF)if (isalpha(str)!=0)str=letterprocess(str);elseif (isdigit(str)!=0)str=numberprocess(str);elsestr=otherprocess(str); ;printf(词法分析结束,谢谢使用!n);printf(点任意键退出!n);c=getch(); 结果截图:七、 思考讨论题或体会或对改进实验的建议1、词法分析能否采用空格来区分单词?答:不能,在词法分析中,处理不光有标识符还有连接符,而连接符和其他的标识符是可以连在一起出现的。如果用空格来区

温馨提示

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

评论

0/150

提交评论