网站大量收购闲置独家精品文档,联系QQ:2885784924

编译原理-词法分析程序.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理-词法分析程序

// made from dragon // example1.cpp : Defines the entry point for the console application. //(1)将单词分为标识符、常数、保留字和分隔符。 //(2)事先建立一保留字表,以备在识别保留字时进行查询。变量名表及常数表则在词法分析过程中建立。 //(3)所输出的每一单词,均按形如(CLASS,VALUE)的二元式编码。 // (4)输出保留字表3、标识符表1、常量表2 、分隔符用4 //----------表示对源程序修改过的部分------------- // // // // //分析程序 source.txt //PROGRAM SOURCE ; //{this little source program is used to illustrate compiling procedure.} //VAR x , y , z : integer ; // a : integer ; //BEGIN //2ab //%%# //x:= 23+5; //z:= x DIV-3b; //y:= z+18*3; //a:= x + (y-2) DIV 4; //IF ab THEN s:=s+1; // ELSE s:=s-1; //WHILE x0 DO // y:=y+1; //END. #includeiostream using namespace std; #includestdio.h #includectype.h #includestring.h #include stdlib.h #define ID 1 //标识符------------- #define INT 2 //常量------------- #define SAVED 3 //保留字--------------- #define FENGE 4 //分隔符------------ char* s[11]={PROGRAM,VAR,BEGIN,DIV,END,INTEGER,WHILE,DO,IF,THEN,ELSE};//--------------------- char TOKEN[20]; char VAR[40][40];//标识符存放在该数组里---------------- char INTERG[20][20];//常量存放在该数组里--------------- char KEY[20][20];//保留字存放在该数组里--------------- int j=0;//-------- int k=0;//-------- int t=0;//--------- int lookup(char *b); void out(int a,char *b); void report_error(int n); void scanner_example(FILE *fp) { static int line=1; char ch; int i=0; int c; int a=0; ch=fgetc(fp); if(isalpha(ch))//判断字符ch是否为英文字母 { TOKEN[0]=ch; ch=fgetc(fp); i=1; while(isalnum(ch))//是否为英文字母 { TOKEN[i]=ch;//读取一个字符 i++; ch=fgetc(fp); } TOKEN[i]=\0; fseek(fp,-1,1);//重定位流(数据流/文件)上的文件内部位置指针 fseek 重定位流(数据流/文件)上的文件内部位置指针   注意:不是定位文件指针,文件指针指向文件/流。位置指针指向文件内部的字节位置,随着文件的读取会移动,文件指针如果不重新赋值将不会改变指向别的文件。 c=lookup(strupr(TOKEN));//转成大写------------------- if(c==0)//如果不是关键字 { out(ID,TOKEN); strcpy(VAR[j],TOKEN);//-------------- j++; } else//如果是关键字 { out(SAVED,TOKEN); strcpy(KEY[k],TOKEN);//-------------- k++; } } else { if(isdigit(ch))//是否是数字isdigit 功能:判断字符c是否为数字   说明:当c为数字0-9时,返回非零值,否则

文档评论(0)

xy88118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档