编译原理词法分析实验一-词法分析扫描器的设计实现_第1页
编译原理词法分析实验一-词法分析扫描器的设计实现_第2页
编译原理词法分析实验一-词法分析扫描器的设计实现_第3页
编译原理词法分析实验一-词法分析扫描器的设计实现_第4页
编译原理词法分析实验一-词法分析扫描器的设计实现_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

1、编译原理程序设计实验报告实验题目班级:计算机1306姓名:学号:289实验目标:词法分析扫描器的设计实现实验内容:1.概要设计1) 主函数:每次从文件中读取一个字符,不是#,继续判断其是否是09数字,是进入isnumber ()函数,否继续判断其是否是 az 或AZ,是进入isalpha()函数,否继续判断是否是空格或换行符, 是继续读下一个字符,否进入isother ()函数。2) Isnumber():读字符,将数字(包括小数点)全部接收,并存入常数表。3) Isalpha ():读字符,将az或AZ (包括下划线)全部接收,与 关键字表比较,匹配,输出序号,否则存入标识符表。4) Iso

2、ther ():读字符,将符号都接受,与界符表比较,匹配输出序号,遇到”或分别存入字符表和字符串表。2.流程图3.关键函数void lsNumber(); / 读的是数字void lsAlpha(); /读的是关键字和标示符int lsOther();读字符、字符串、界符源程序代码:(加入注释)#i nclude #in clude #i nclude #i nclude using n amespace std;定义结构体typedef struct Toke nchar n ame20;int state;状态,为0是标识符,为1是字符,为2是字符串,为字,为4是关键字,为5是界符 Tok

3、e n;typedef struct STR /char n ame20;int code;STR;STR iT10;STR cT20;STR sT20;STR CT20;STR KT10=i nt,4,mai n,5,void,6,if,7,else,8,char,9;STR3是数PT30=,10,14,15,+,16,-,17,*,18,/,19,20,21,22,;,23,(,24,),25,26,27;全局变量声明*/Token CurrentToken; /正在读的 tokenToken toke n200;FILE *fp;/源文件指针char ch; /读取字符int state

4、=0;/0表示标识符,1表示字符,2表示字符串int iT_i=0;/iT结构体数组下标int cT_i=0;int sT_i=0;int CT_i=0;int index=0;/token 的下标/*函数声明*/void lsNumber(); 读的是数字void lsAlpha(); /读的是字母,关键字和标示符 int lsOther();,; +-主函数*int main()int i =0;if(fp=fope n(source.txt,r)=NULL)coutca n not ope n the source file! nen dl; exit(1);ch=fgetc(fp);

5、/文件中读一个字符while(ch!=#)for(i=0; i=0)&( ch=a)&( ch=A)&( ch=Z)|(ch=_)/ 关键字和标识符IsAlpha();else if(ch= |ch=n)ch=fgetc(fp);elseIsOther();coute ndl;for(i=0;i=i ndex;i+)couttoke ni. namecoute ndl;coutfi ni sh=0)&(ch9)Curre ntToke n.n amek+=ch;flag=0;elsewhile(ch=0)&(ch=9)Curre ntToke n.n amek+=ch;/将数字放入单词缓冲区

6、ch=fgetc(fp);if(flag=1)strcpy(CTCT_i+. name,Curre ntToke n.n ame);strcpy(toke nin dex. name,Curre ntToke n.n ame );toke ni ndex+.state=3;coutCurre ntToke n.n ame e ndl; cout ;elsecoutCurre ntToke n.n ame =a)&( ch=A)&( ch=Z)|ch=_) 将完整的 单词放入单词缓冲区Curre ntToke n.n amei+=ch; ch=fgetc(fp);flag=0; 判断是否是关键字

7、for(i=0;i7;i+)if(strcmp(Curre ntToke n.n ame,KTi. name)=0)flag=1;pri ntf(%s n,Curre ntToke n.n ame,KTi.code);strcpy(toke nin dex. name,Curre ntToke n.n ame);toke ni ndex+.state =4; prin tf( ,KTi.code);break; if(flag!=1)while(ch=a)&(ch=A)&( ch=0)&( ch=9 )Curre ntToke n.n amei+=ch; ch=fgetc(fp);/pri n

8、tf(%s n,Curre ntToke n.n ame); prin tf( );strcpy(toke nin dex. name,Curre ntToke n.n ame);toke ni ndex+.state =0;int tag=0;for(i nt j=0;jiT_i;j+)if(strcmp(Curre ntToke n.n ame,iTj. name)=0)tag=1;break;if(tag=0)strcpy(iTiT_i. name,Curre ntToke n.n ame); iTiT_i+.code=0;/*甘*/int lsOther()int i;for(i=0;

9、 i;flag=1;ch=fgetc(fp);if(ch =)Curren tToke n.n ame1=; ch=fgetc(fp);break;elsebreak;casev:Curren tToke n.n ame0=a&ch=A&ch=Z) Curre ntToke n.n ame1=ch; ch=fgetc(fp); if(ch=)Curren tToke n.n ame2=;cout ;strcpy(toke nin dex. name,Curre ntToke n.n ame);toke ni ndex+.state =1;int tag=0;for(i nt j=O;j=cT_

10、i;j+)if(strcmp(cTcT_i. name ,Curre ntToke n.n ame )=0)tag=1;if(tag=0)strcpy(cTcT_i+. name,Curre ntToke n.n ame); ch=fgetc(fp);return 0;else couterror1;exit(1);elsecout=a&ch=A&ch=Z) Curre ntToke n.n amej+=ch; ch=fgetc(fp);if(ch=)Curre ntToke n.n amej+=;cout ;strcpy(toke nin dex. name,Curre ntToke n.n

11、 ame);toke ni ndex+.state =1;int tag=0;for(i nt j=0;j=sT_i;j+)if(strcmp(sTsT_i. name ,Curre ntToke n.n ame )=0)tag=1;if(tag=0)strcpy(sTsT_i+. name,Curre ntToke n.n ame);ch=fgetc(fp);return 0;elsecouterror3;exit(1);if(Curre ntToke n.n ame0!=0)for(i=0;i20;i+)if(strcmp(Curre ntToke n.n ame,PTi. name)=0

12、)pri ntf(%s n,Curre ntToke n.n ame,PTi.code);prin tf( ,PTi.code);strcpy(toke nin dex. name ,Curre ntToke n.n ame );toke ni ndex+.state =PTi.code; break;if(flag!=1)ch=fgetc(fp);while(ch= |ch=n) ch=fgetc(fp);return 0;程序运行结果:(截屏)输入:Source.txt 文本int mai n (void)int a=1, d=2,c; if(a10 一二基|智/IP协议栈的实现的集与处理技术的研究研统研究与开发控制面板的研制研度仪的研制研制割机床短循环走丝方式研究机、的研究系勺应用研究应计与研究片机机用研究研制 应用 系统的研制.究片I基一WOWWP.02468026802468024680246802468024680246802468000001究与实现开究研研究研染测量仪的研制实现改造 监测技术议转换器 的设计究 舀及实现在嵌入式I上

温馨提示

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

评论

0/150

提交评论