您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 词法分析设计方案实验报告(附代码)
4VC++/VB/JAVACError1234(token)56ifforwhileprintf1125,1,0.5,3.1416+-*/===[]123:4:VC++Ifi=0thenn++a=3b%)for(1,for)11i(6,i)12=(4=)130(50)14then(1then)15n(6,n)16++ErrorError17(2,)18a(6,a)21=(4,=)223bErrorError24%ErrorError24)(2,))25(2,)26key[]={auto,break,case,catch,char,class,const,continue,default,delete,do,double,else,enum,float,for,if,int,long,new,private,protected,public,register,return,short,static,struct,switch,this,void,while,then},1Delimiter[]={,(,),[,],,,.,{,}}2Operator[]={+,-,*,/}3R_operators[]={,=,==,,=},,1stringNumber[100]5stringIdentifier[100]6Iskey(),Isletter(),Isnumber()InsertId()Identifier[]InsertNumber()Number[]analyse()anaiyse()Word[]Word[]Word[]wordkeywordwordWord[]wordwordWordWord[]Ifi=0thenn++a=3b%)C++C++C++#includeiostream#includestringusingnamespacestd//#defineMAX33charch=''staticintline=1,row=0intNumberCount=0,IdCount=0stringkey[]={auto,break,case,catch,char,class,const,continue,default,delete,do,double,else,enum,float,for,if,int,long,new,private,protected,public,register,return,short,static,struct,switch,this,void,while,then}//1stringDelimiter[]={,(,),[,],,,.,{,}}//2stringOperator[]={+,-,*,/}//3stringR_operators[]={,=,==,,=}//4stringNumber[100]//5stringIdentifier[100]//6//intIskey(stringc){//intifor(i=0iMAXi++){if(key[i].compare(c)==0)return1}return0}//intIsLetter(charc){if(((c='z')&&(c='a'))||((c='Z')&&(c='A'))){if((ch='Z')&&(ch='A'))ch=ch+32//return1}elsereturn0}intIsNumber(charc){//if(c='0'&&c='9')return1elsereturn0}//arrintInsertId(strings){for(inti=0iIdCounti++){if(Identifier[i]==s){returnibreak}elseif(IdCount==i+1){Identifier[IdCount]=sreturnIdCountIdCount++}}}//arrintInsertNumber(strings){for(inti=0iNumberCounti++){if(Number[i]==s){returnibreak}elseif(NumberCount==i+1){Number[NumberCount]=sreturnNumberCountNumberCount++}}}voidanalyse(FILE*fpin){//arrstrTokenstringarr=while((ch=fgetc(fpin))!=EOF)//{arr=if(ch==''||ch=='\t'||ch=='\n')//{if(ch=='\n'){line++row=0}}elseif(IsLetter(ch)){while(IsLetter(ch)||IsNumber(ch)){arr=arr+chch=fgetc(fpin)}fseek(fpin,-1L,SEEK_CUR)//if(Iskey(arr)){row++//coutarr\t\t(1,arr)\t\t\t\t(line,row)endl}else{row++//InsertId(arr)coutarr\t\t(6,arr)\t\t\t\t(line,row)endl}}//elseif(IsNumber(ch)){while(IsNumber(ch))//||ch=='.'&&IsNumber(fgetc(fpin)){arr=arr+chch=fgetc(fpin)}if(IsLetter(ch)){while(IsLetter(ch)||IsNumber(ch)){arr=arr+chch=fgetc(fpin)}fseek(fpin,-1L,SEEK_CUR)row++coutarr\t\tError\t\tError\t\t(line,row)endl}else{InsertNumber(arr)row++//coutarr\t\t(5,arr)\t\t\t\t(line,row)endl}}//else{row++arr=chswitch(ch){case'+':{ch=fgetc(fpin)if(ch=='('||IsNumber(ch)||IsLetter(ch)){fseek(fpin,-1L,SEEK_CUR)cout+\t\t(3,+)\t\t\t\t(line,row)endl}elsecoutarr+ch\t\tError\t\tError\t\t(line,row)endl}breakcase'-':{ch=fgetc(fpin)if(ch=='('||IsNumber(ch)||IsLetter(ch)){fseek(fpin,-1L,SEEK_CUR)cout-\t\t(3,-)\t\t\t\t(line,row)endl}else{coutarr+ch\t\tError\t\tError\t\t(line,row)endl}}breakcase'*':cout-\t\t(3,*)\t\t\t\t(line,row)endlcase'=':{ch=fgetc(fpin)if(ch=='='){cout==\t\t(4,==)\t\t\t\t(line,row)endl}else{fseek(fpin,-1L,SEEK_CUR)cout=\t\t(4,=)\t\t\t(line,row)endl}}breakcase'/':coutch\t\t(3,ch)\t\t\t\t(line,row)endlbreakcase'(':case')':case'[':case']':case'':case'.':case',':case'{':case'}':coutch\t\t(2,ch)\t\t\t\t(line,row)endlbreakcase'':{ch=fgetc(fpin)if(ch=='=')cout=\t\t(4,=)\t\t\t\t(line,row)endlelse{cout\t\t(4,)\t\t\t\t(line,row)endlfseek(fpin,-1L,SEEK_CUR)}}breakcase'':{ch=fgetc(fpin)if(ch=='=')cout=\t\t(4,=)\t\t\t(line,row)endlelseif(ch=='')cout\t\t(4,)\t\t\t(line,row)endlelse{cout\t\t(4,)\t\t\t(line,row)endlfseek(fpin,-1L,SEEK_CUR)}}breakdefault:t\t(line,row)endlbreak}}}}intmain(){charin_fn[30]FILE*fpincout:for(){cinin_fnif((fpin=fopen(in_fn,r))!=NULL)breakelsecout:}cout\n*****************************************endlcoutendlanalyse(fpin)fclose(fpin)return0}
本文标题:词法分析设计方案实验报告(附代码)
链接地址:https://www.777doc.com/doc-7264511 .html