程序设计训练实验报告-词法分析器_第1页
程序设计训练实验报告-词法分析器_第2页
程序设计训练实验报告-词法分析器_第3页
程序设计训练实验报告-词法分析器_第4页
程序设计训练实验报告-词法分析器_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

本科实验报告课程名称:程序设计训练 学院:电子信息与电气工程学部 词法分析器程序说明: 此词法分析器是一个能够扫描输入的字符流,并将扫描到的字符按照二元式的形式保存到word.txt文件中的一个程序(也可以通过屏幕输出的方式输出)。通过词法分析可以为完成对应语言的编译程序做准备,同时词法分析器也可以完成对输入流的字符统计。运行环境: WINDOWS7,visualc++6.0。定义语言G={VN,VT,P,S}其中,VN={P,D,S,B,T’,L,L’,E,T,F,NUM,RELOP,ID}VT={int,if,then,else,while,do,read,write,;,&,|,{,},>=,<=,>,<,==,!=,=,+,-,*,/,++,--,(,),a~z,A~Z,0~9,}P={P→{DS}D→intID;{intID;}S→if(B)thenS[elseS]|while(B)doS|{L}|ID=E|write<E>;|readID;L→SL’L’→;L|eB→T’{∨T’}T’→F’{∧F’}F’→IDrelopID|IDE→T{+T|-T}T→F{*F|/F}F→(E)|NUM|IDNUM->0|1|2|3|4|5|6|7|8|9RELOP-><|<=|>|>=|==}S={P}P代表程序,D代表声明语句,S代表语句,L代表语句的表列,B代表布尔表达式,非零代表真。实现的代码如下#include<stdio.h>#include<string.h>#defineMAX80#defineIDMAX8//标识符最大长度为IDMAX个字符,最大输入字符为MAX个字符,类别编码syn,保留字共8个rwtab[8]charprog[MAX],token[IDMAX],ch;intsyn,p,m,n,sum;char*rwtab[8]={"int","if","then","else","while","do","read","write"};//保留字voidscaner();intmain(){FILE*fout;fout=fopen("word.txt","w");//建立单词本 p=0;printf("\npleaseinputastring(endwith'#'):\n");do{scanf("%c",&ch);prog[p++]=ch;}while(ch!='#');p=0;do{scaner();switch(syn){case-1:printf("youhaveinputawrongstring\n");return0;break;default: fprintf(fout,"%d\t%s\n",syn,token);//文件输出和屏幕输出切换 //printf("%s\t%d\n",token,syn);break;}}while(syn!=0);getchar();}voidscaner(void){sum=0;for(m=0;m<8;m++)token[m++]='\0';ch=prog[p++];m=0;while((ch=='')||(ch=='\n'))ch=prog[p++];if(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A'))){while(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A'))||((ch>='0')&&(ch<='9'))){token[m++]=ch;ch=prog[p++];}//匹配为标识符p--;syn=24;for(n=0;n<8;n++)//匹配为保留字if(strcmp(token,rwtab[n])==0){syn=n+1;break;}}elseif((ch>='0')&&(ch<='9')){while((ch>='0')&&(ch<='9')){sum=sum*10+ch-'0';ch=prog[p++];}p--;syn=25;}//匹配为NUMelse{switch(ch){case'&':syn=13;token[m++]=ch;break;case'|':syn=14;token[m++]=ch;break;case'<':token[m++]=ch;ch=prog[p++];if(ch=='='){syn=15;token[m++]=ch;}else{syn=15;p--;}break;case'>':token[m++]=ch;ch=prog[p++];if(ch=='='){syn=15;token[m++]=ch;}else{syn=15;p--;}break;case'+':token[m++]=ch;ch=prog[p++];if(ch=='+'){syn=22;token[m++]=ch;}else{syn=9;p--;}break;case'-':token[m++]=ch;ch=prog[p++];if(ch=='-'){syn=23;token[m++]=ch;}else{syn=10;p--;}break;case'!':ch=prog[p++];if(ch=='='){syn=15;token[m++]=ch;}break;case'=':token[m++]=ch;ch=prog[p++];if(ch=='='){syn=15;token[m++]=ch;}else{syn=21;p--;}break;case'*':syn=11;token[m++]=ch;break;case'/':syn=12;token[m++]=ch;break;case'(':syn=19;token[m++]=ch;break;case')':syn=20;token[m++]=ch;break;case'{':syn=16;token[m++]=ch;break;case'}':syn=17;token[m++]=ch;break;case';':syn=18;token[m++]=ch;break;case'\"':syn=12;token[m++]=ch;

温馨提示

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

最新文档

评论

0/150

提交评论