文档介绍:学生学号实验课成绩武汉理工大学学生实验报告书实验课程名称《编译原理》开课学院计算机科学与技术学院指导老师姓名学生姓名学生专业班级2011—2012学年第1学期实验课程名称:编译原理实验项目名称单词的词法分析器的设计实验成绩实验者专业班级组别同组者实验日期年月日第一部分:实验分析与设计(可加页)实验内容描述(问题域描述):设计,编制并调试一个词法分析程序,加深对词法分析原理的理解。:在上机前应认真做好各种准备工作,熟悉机器的操作系统和语言的集成环境,独立完成算法编制和程序代码的编写;上机时应随带有关的高级语言教材或参考书;要学会程序调试与纠错;每次实验后要交实验报告。。实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述):(1)关键字:benginifthenwhiledoend所有的关键字都是小写。(2)运算符和界符::=+-*/<<=<>>>==;()#(3)其他单词是标志符(ID)和整形常数(NUM),通过以下正规式定义:ID=letter(letter|digit)*NUM=digitdigit*(4)空格空白、制表符和换行符组成。空格一般用来分隔ID、NUM、运算符、界符和关键字,词法分析阶段通常被忽略。:17if2:=18then3<20while4<>21do5<=22end6>23Letter(letter|digit)10>=24digitdigit*11=25+13;26-14(27*15)28/16#:#include<>#include<>charprog[80],token[6];charch;intsyn,p,m,n,sum;char*rwtab[6]={"begin","if","then","while","do","end"};main(){p=0;printf("\npleaseintputstring:");do{ch=getchar();prog[p++]=ch;}while(ch!='#');p=0;do{scaner();switch(syn){case11:printf("(%d,%d)\n",syn,sum);break;case-1:printf("inputerror\n");break;default:printf("(%d,%s)\n",syn,token);}}while(syn!=0);getch();}/*词法扫描程序:*/scaner(){for(n=0;n<8;n++)token[n]=NULL;m=0;ch=prog[p++];while(ch=='')ch=prog[p++];if((ch<='z'&&ch>='a')||(ch<='Z'&&ch>='A')){while((ch<='z'&&ch>='a')||(ch<='Z'&&ch>='A')||(ch<='9'&&ch>='0')){token[m++]=ch;ch=prog[p++];}token[m++]='\0';ch=prog[--p];syn=10;for(n=0;n<6;n++)if(strcmp(token,rwtab[n])==0){syn=n+1;break;}}elseif((ch<='9'&&ch>='0')){sum=0;while((ch<='9'&&ch>='0')){sum=sum*10+ch-'0';ch=prog[p++];}ch=prog[--p];syn=11;}elseswitch(ch){case'<':m=0;token[m++]=ch;ch=prog[p++];if(ch=='>'){syn=21;token[m++]=ch;}elseif(ch=='='){syn=22;token[m++]=ch;}else{syn=20;ch=prog[--p];}break;case'>':token[m++]=ch;ch=prog[p++];if(ch=='='){syn=24;token[m++]=ch;}else{syn=23;ch=prog[--p];}break;case':':token[m++]=ch;ch=prog[p++];if(ch=='='){syn=18;token[m++]=ch;}else{syn=17;ch=prog[--p];}break;case'+':syn=13;token[0]=ch;break;case'-':syn=14;token[0]=ch;break;case'*':syn=15;token[0]=ch;brea