编译原理-词法分析程序

编译原理-词法分析程序

ID:35427908

大小:60.73 KB

页数:8页

时间:2019-03-24

编译原理-词法分析程序_第1页
编译原理-词法分析程序_第2页
编译原理-词法分析程序_第3页
编译原理-词法分析程序_第4页
编译原理-词法分析程序_第5页
资源描述:

《编译原理-词法分析程序》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、//madefromdragon//examplel.cpp:Definestheentrypointfortheconsoleapplication.//(1)将单词分为标识符、常数、保留字和分隔符。//(2)事先建立一保留字表,以备在识别保留字时进行查询。变量名表及常数表则在词法分析过程中建立。〃(3)所输岀的每一单词,均按形如(CLASS,VALUE)的二元式编码。〃(4)输出保留字表3、标识符表1、常量表2、分隔符用4//表示对源程序修改过的部分////////〃分析程序source.txt要新建/

2、/PROGRAMSOURCE;//{thislittlesourceprogramisusedtoillustratecompilingprocedure.}//VARx,y,z:integer;//a:integer;//BEGIN//2ab//%%#//x:=23+5;//z:=xDIV-3b;//y:=z+18*3;//a:=x+(y-2)DIV4;//IFa>bTHENs:=s+l;//ELSEs:=s-l;//WHILEx>0DO//y:=y+l;//END.#includeu

3、singnamespacestd;#include#include#include#include#defineID1〃标识符#defineINT2〃常量#defineSAVED3〃保留字#defineFENGE4〃分隔符char*s[11[={“PROGRAM",”VAR“,”BEGIN”,“DIV“,“END”,“INTEGER”,“WHILE”,”DO”,”IF”,“THEN“,“ELSE”};//charTORE叫20];c

4、harVAR[40][40];//标识符存放在该数组里charINTERG120J120];//常量存放在该数组里charKEY[20][20];//保留字存放在该数组里intj=O;//intk=0;//intt=0;//intlookup(char*b);voidout(inta,char*b);voidreport_error(intn);voidscanner_example(FILE*fp){staticintline=l;charch;inti=();intc;inta=0;ch=fgetc(f

5、p);if(isalpha(ch))//判断字符ch是否为英文字母{TOKEN[0]=ch;ch=fgetc(fp);i=l;while(isalnum(ch))//是否为英文字母{TOKEN[i]二ch;〃读取一个字符i++;ch=fgetc(fp);}TOKENJiW;fseek(fp,-1,1);//重定位流(数据流/文件)上的文件内部位置指针fseek重定位流(数据流/文件)上的文件内部位置指针注意:不是定位文件指针,文件指针指向文件/流。位置指针指向文件内部的字节位置,随着文件的读収会移动,文件指

6、针如果不重新赋值将不会改变指向别的文件。c=lookup(strupr(TOKEN));//转成大写if(c==0)//如果不是关键字{out(ID,TOKEN);strcpy(VARrjl,TOKEN);//j++;1else//如果是关键字out(SAVED,TOKEN);strcpy(KEY[k],TOKEN);//k++;}}else{if(isdigit(ch))//是否是数字isdigit功能:判断字符c是否为数字说明:当为数字0・9时,返回非零值,否则返回零。{TOKEN[0]=ch;ch=f

7、getc(fp);i=l;while(isdigit(ch)

8、

9、isalpha(ch)){if(isalpha(ch)){a=l;}TOKEN[i]=ch;i++;ch=fgetc(fp);}TOKEN[i]='';fseek(fp,・l,l);if(a==l){report_error(line);cout«n数字开头的标识符:”;cout«TOKEN«endl;a=0;}else}out(INT,TOKEN);strcpy(INTERG[t],TOKEN);//t++;〃}}else//既不是数字也

10、不是英文字母switch(ch)caseVch=fgetc(fp);if(ch=='-)out(FENGE,U<=H);elseif(ch==*>,)out(FENGE,”v>“);else{fseek(fp,-l,l);out(FENGE,U=n);else{fs

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。