1 / 12
文档名称:

张新豪.doc

格式:doc   页数:12页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

张新豪.doc

上传人:825790901 2016/7/22 文件大小:0 KB

下载得到文件列表

张新豪.doc

相关文档

文档介绍

文档介绍:1 编译原理课程设计实验报告课题: 词法分析器专业: 计算机科学与技术班级: <1> 班姓名: 张新豪学号: 07538024 指导教师: 许高建安徽农业大学经济技术学院 2010-11-04 毕 2 目录 1. 课题、小组成员及分工。。。。。。。。。。。。。。。。3 2. 课程设计及要求。。。。。。。。。。。。。。。。。。。。。。。3 3. 主要算法描述。。。。。。。。。。。。。。。。。。。。。。。。4 4. 运行效果及截图。。。。。。。。。。。。。。。。。。。。。。。9 5. 设计小结。。。。。。。。。。。。。。。。。。。。。。。。。。。。 10 6. 主要参考文献。。。。。。。。。。。。。。。。。。。。。。。。。 11 3 07 级计算机科学与技术<1> 班一、课题、小组成员及分工 1、课题: c 语言语法分析器 2、小组成员及分工: 张新豪(组长) :编写源程序代码周浩:修改并测试程序及监工。魏少骞(副组长) :提供环境及指导意见。张强、韩张纯:共同研究发现问题,解决问题。二、课程设计及要求在计算机高速普及的今天, 越来越多的高级语言面向了世人, 而对于每一种高级语言都配置了一个甚至多个编译程序, 因此编译程序就显得尤为重要了, 因此本课程设计用 c 语言编写一个小型的词法分析器以实现词法分析的部分功能。要求:能够分析出词法的五大类即:标识符、关键字、常量、分间符、运算符; 给出一个语句判断是否正确,若出错,指出什么错误。 4 三、主要算法描述#include"" #include"" #include"" #include"" void main(){ printf(" 此程序是编译原理的课程设计-- 简单的词法分析器\n\n 授课教师:许高建\n\n"); printf(" 温馨提示: \n 本语言标识符只能由字母数字组成,并且首元素只能是字母\n\n"); zxh: printf(" 请输入一条语句: "); char gjz[3]={'i','n','t'}; char gjz1[4]={'c','h','a','r'}; char input[1024]; char zf[10]; char bzf1[1024]; char bzf2[1024]; char cl[1024]; 5 gets(input); int len=strlen(input); //printf("%d",len); int i=0,j=0,k=0,l=0; int a1=0,a2=0,a3=0,a4=0; //for(int m1=0;m1<len;m1++) //printf("%c",input[m1]); do{ if(input[i]==' '){ j=i;i++;} else if(input[i]=='='){ k=i;i++;} else if(input[i]=='+'||input[i]=='-'||input[i]=='* '||input[i]=='/'){ l=i;i++;} else i++; }while(i<len); //printf("%d,%d,%d",j,k,l); 6 int b1=j+1,b2=k+1,b3=l+1; for(int m=0;m<j;m++){ if(input[m]!=gjz[m] && input[m]!=gjz1[m]){ printf(" 输入了非法的关键字"); a1=1;break; } else zf[m]=input[m]; } for(int n=j+1;n<k;n++){ if(isalnum(input[n])==0){ printf("\n 输入的第一个标识符不合法,只能由字母及数字组成\n"); a2=1;break; } else bzf1[n-b1]=input[n]; } for(int r=k+1;r<l;r++){ if(isalnum(input[r])==0){ printf("\n 输入的第二个标识符不合法,只能由字母及数字组成\n"); 7 a3=1;break; } else bzf2[r-b2]=input[r]; } for(int s=l+1;s<len-1;s++){ if(isdigit(input[s])==0){ printf("\n 输入了非数值型常量\n"); a4=1;break; } else cl[s-b3]=input[s]; } zf[j]='\0';bzf1[k-b1]='\0';bzf2[l-b2]='\0';cl [len-b3-1]='\0'; if(input[len-1]!=';'){ printf(" 未输入结束符\n"); } e