1、char alphaprocess(char buffer);char digitprocess(char buffer);char otherprocess(char buffer);/*语法分析函数声明* * void factor();void term ();void arithexp();void exp();void assign_stmt();void match();void error() ;/*中间代码函数声明* void inique(sqs *s) ;int push(sqs *s) ;int pop(sqs *s) ;void middlecode();void pr
2、int();void optimizecode ();/* / 词法分析部分 FILE *fp; /源文件 char *p;char filename10;int openfile=1;int line=1;int error1=0;int sourcebuf2;int sounum=0;char digittp20;/ 关键字 char *key32=and,arraybeginboolcallcasecharconstantdo, elseendfalseforifinputintegernotoforoutputprocedureprogramreadrealrepeatsetthent
3、rueuntilvarwhilewrite;/符号表 char *character21=+-*/():=/*/.;/常量表 char *integerbuf;/标志符表 char *label10;int constnum=0,labelnum=0;/以上有5张表,储存了所有的信息,其中2维数组source储存的源程序的程序内容, / 前面四张表的次序依次为 : 保留字表为1,符号表为2,常数表为3,标志符表为4;char alphaprocess(char buffer) /关键字和标识符处理子函数;int newid=1,id=1;int i=-1;char alphatp20;whil
4、e (isalpha(buffer)|(isdigit(buffer) alphatp+i=buffer;buffer=fgetc(fp); alphatpi+1=0/寻找保留字 i=0;int re=0;while(i32&re=0) if(strcmp(keyi,alphatp)=0) /printf(nt保留字:%s,keyi);sourcesounum0=1; /将保留字的位置放入数组之中 sourcesounum1=i;sounum+;id=0;re=1;i+;/标志符处理 if(id=1) for(i=0;i,line,buffer1);error1+;buffer1=fgetc(
5、fp); return(buffer1);/处理单字符的符号 buffer31= int id=0;,line,buffer3); error1+;return(buffer2);void scan() char cbuffer;printf(n请输入文件名:);scanf(,&filename);p=filename;if (fp=fopen(p,r)=NULL) n很抱歉,该文件打不开,请选择另一个!nopenfile=0; cbuffer = fgetc(fp);while (cbuffer!=EOF) if (isalpha(cbuffer) cbuffer=alphaprocess(cbuffer);else if (isdigit(cbuffer) cbuffer=digitprocess(cbuffer);else if(cbuffer=/) /处理注释 cbuffer=fgetc
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1