1、iostream#include stdlib.husing namespace std;/*定义结构体*/typedef struct Token char name20; int state; /状态,为0是标识符,为1是字符,为2是字符串,为3是数字,为4是关键字,为5是界符 Token;typedef struct STR / int code;STR;STR iT10;STR cT20;STR sT20;STR CT20;STR KT10=int,4,main,5,void,6,if,7,else,8,char,9;STR PT30=,10,11,=,12,13,14,15,+,16
2、,-,17,*,18,/,19, ,20,21,22,;,23,(,24,),25,26,27;/*全局变量声明*/Token CurrentToken; /正在读的tokenToken token200;FILE *fp; /源文件指针char ch; /读取字符int state=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的下标/*函数声明*/ /读的是字母,关键字和标示符/,;+-/*主函数*/int main() int i =0; if(f
3、p=fopen(source.txtr)=NULL) coutcan not open the source file!nendl; exit(1); ch=fgetc(fp); /文件中读一个字符 while(ch!=#) for(i=0; i0)&(chaz)|(chAZ)|(ch=_) /关键字和标识符 IsAlpha(); else if(ch= |ch=n else IsOther(); i=index;i+) couttokeni.name) CurrentToken.namek+=ch;/将数字放入单词缓冲区 bool flag=1; if(ch=. if(ch flag=0;
4、if(flag=1) strcpy(CTCT_i+.name,CurrentToken.name); strcpy(tokenindex.name,CurrentToken.name ); tokenindex+.state=3; /coutCurrentToken.name error/*是否为关键字*/void IsAlpha() int i=0; if(state=0) bool flag=0;)|ch=)/将完整的单词放入单词缓冲区 CurrentToken.namei+=ch; /判断是否是关键字7; if(strcmp(CurrentToken.name,KTi.name)=0)
5、flag=1; /printf(%s ,CurrentToken.name,KTi.code); strcpy(tokenindex.name,CurrentToken.name); tokenindex+.state =4; printf(,KTi.code); break; if(flag!=1)|(ch00,CurrentToken.name);); strcpy(tokenindex.name,CurrentToken.name); tokenindex+.state =0; int tag=0; for(int j=0;jiT_i;j+) if(strcmp(CurrentToken
6、.name,iTj.name)=0) tag=1; break; if(tag=0) strcpy(iTiT_i.name,CurrentToken.name); iTiT_i+.code=0;/*其它 */int IsOther() int i; /将缓冲区初始化 switch(ch) case: CurrentToken.name0= if(ch = CurrentToken.name1=+-*/,() case ch strcpy(tokenindex.name,CurrentToken.name); tokenindex+.state =1; int tag=0; for(int j=
7、0;=cT_i; if(strcmp(cTcT_i.name ,CurrentToken.name )=0) tag=1; if(tag=0) strcpy(cTcT_i+.name,CurrentToken.name);error1error2 int j=1; while(ch CurrentToken.namej+=ch; CurrentToken.namej+=02=sT_i; if(strcmp(sTsT_i.name ,CurrentToken.name )=0) tag=1; if(tag=0) strcpy(sTsT_i+.name,CurrentToken.name);err
8、or3 if(CurrentToken.name0! if(strcmp(CurrentToken.name,PTi.name)=0)%d,CurrentToken.name,PTi.code);,PTi.code); strcpy(tokenindex.name ,CurrentToken.name ); tokenindex+.state =PTi.code; /while(ch=) ch=fgetc(fp);程序运行结果:(截屏)输入:Source.txt文本int main (void) int a=1, d=2,c; if(a=d) c=a; a=d; d=c;char ch10=okchar x,y=c=a+d;#输出:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1