资源描述:
《南昌大学编译原理实验2》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验报告学生姓名:学号:专业班级:实验类型:□验证□综合□设计□创新实验日期:实验成绩:一、实验项目名称实验1词法分析程序的设计二、实验目的掌握计算机语言的词法分析程序的开发方法。 三、实验基本原理编制一个能够分析三种整数、标识符、主要运算符和主要关键字的词法分析程序。四、主要仪器设备及耗材PC微机DOS操作系统或Windows操作系统TurboC程序集成环境或VisualC++程序集成环境五、实验步骤1、根据正规式,画出状态转换图;2、根据状态图,设计词法分析算法;3、采用C或C++语言,设计函数scan(),实现该算法;4、编制测试程序(主函
2、数main);5、调试程序:读入文本文件,检查输出结果。六、实验数据及处理结果输入数据:编辑一个文本文件program.txt,在文件中输入如下内容:ifdata+92>0x3fthendata=data+01;elsedata=data-01;正确结果:<0,data><+,-><1,92><>,-><3,3f><0,data><=,><0,data><+,-><2,1><;,-><0,data><=,-><0,data><-,-><2,-><;,->程序:#include#incl
3、ude#include#include#include#include#include#defineNULL0FILE*fp;charch;char*keyword[]={"then","do","else","if","int","while","main"};char*operatornum[]={"+","-","*","/","<","<=","=",">",">=","==",";","(",")","{","}"};boo
4、lsearch(charsearchstr[],intwordtype){inti;switch(wordtype){case1:for(i=0;i<=6;i++){if(strcmp(keyword[i],searchstr)==0)return(true);}case2:{for(i=0;i<=14;i++){if(strcmp(operatornum[i],searchstr)==0)return(true);}break;}break;}return(false);}charletterprocess(charch)//字母处理函数{in
5、ti=-1;charletter[20];while(isalnum(ch)!=0){letter[++i]=ch;ch=fgetc(fp);};letter[i+1]=' ';if(search(letter,1)){printf("<%s,->",letter);}else{printf("<0,%s>",letter);}return(ch);}charnumberprocess(charch)//数字处理程序{inti=-1,j=-1;charnum[20];charnum1[20];charch1[1];if(ch=='0')
6、{num[++i]=ch;ch=fgetc(fp);if(ch=='x'){num[++i]=ch;ch=fgetc(fp);while(isdigit(ch)!=0
7、
8、(ch>='a'&&ch<='f')){num[++i]=ch;num1[++j]=ch;ch=fgetc(fp);}if(isalpha(ch)!=0){ch1[0]=ch;ch1[1]=' ';while(isspace(ch)==0&&(search(ch1,2)==0)){num[++i]=ch;ch=fgetc(fp);ch1[0]=ch;}num[i+1]=' '
9、;printf("错误!非法标识符:%s",num);gotou;}num1[j+1]=' ';printf("<3,%s>",num1);}else{while(isdigit(ch)!=0){num[++i]=ch;num1[++j]=ch;ch=fgetc(fp);}if(isalpha(ch)!=0){ch1[0]=ch;ch1[1]=' ';while(isspace(ch)==0&&(search(ch1,2)==0)){num[++i]=ch;ch=fgetc(fp);ch1[0]=ch;}num[j+1]=' ';p
10、rintf("错误!非法标识符:%s",num);gotou;}num1[j+1]=' ';printf("<2,%s>",n