版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
编译原理实验报告实验名称:分析调试语义分析程序TEST抽象机模拟器完整程序保证能用!!!!!一、实验目的通过度析调试TEST语言的语义分析和中间代码生成程序,加深对语法制导翻译思想的理解,掌握将语法分析所辨认的语法范畴变换为中间代码的语义翻译方法。二、实验设计程序流程图语法分析程序代码:Main.cpp#include<stdio.h>#include<ctype.h>externboolTESTparse(char*pFileName);externintTESTScan(FILE*fin,FILE*fout);FILE*fin,*fout;//用于指定输入输出文献的指针intmain(){ﻩcharszFinName[300];ﻩcharszFoutName[300];ﻩprintf("请输入源程序文献名(涉及途径):"); scanf("%s",szFinName); printf("请输入词法分析输出文献名(涉及途径):");ﻩscanf("%s",szFoutName); if((fin=fopen(szFinName,"r"))==NULL)ﻩ{ printf("\n打开词法分析输入文献犯错!\n");ﻩﻩreturn0; }ﻩif((fout=fopen(szFoutName,"w"))==NULL) { printf("\n创建词法分析输出文献犯错!\n"); return0; } intes=TESTScan(fin,fout);ﻩfclose(fin);ﻩfclose(fout); if(es>0) printf("词法分析有错,编译停止!共有%d个错误!\n",es);ﻩelseif(es==0)ﻩ{ ﻩprintf("词法分析成功!\n");ﻩ intesﻩ=ﻩ0; es =ﻩTESTparse(szFoutName);//调语法分析 if(es==true)printf("语法分析成功!\n"); elseprintf("语法分析错误!\n"); }ﻩelse printf("词法分析出现未知错误!\n");}Parse.cpp#include<stdio.h>#include<string.h>#include<ctype.h>#include<conio.h>#include<vector>//functionboolTESTparse();boolcompound_Stat();boolprogram();boolstatement();boolexpression_stat();boolexpression();boolbool_expr();booladditive_expr();boolterm();boolfactor();boolif_stat();boolwhile_stat();boolfor_stat();boolwrite_stat();boolread_stat();booldeclaration_stat();booldeclaration_list();boolstatement_list();boolcompound_stat();chartoken[20],token1[40];ﻩﻩ //token保存单词符号,token1保存单词值FILE*fp;ﻩ ﻩ ﻩﻩ//用于指向输入文献的指针intEsLine = 0;typedefstruct{ intes; intline;}EsInf;std::vector<EsInf>ﻩStackEs;//语法分析程序voidProcessError(intes){ﻩEsInf temp;ﻩtemp.esﻩﻩ= es; temp.line =ﻩEsLine;ﻩStackEs.push_back(temp);}boolReadFile(char*tok,char*tok1){ﻩif(feof(fp)) returnfalse;ﻩfscanf(fp,"%s\t%s\n",tok,tok1);ﻩprintf("%s\t%s\n",tok,tok1);ﻩEsLine++; returntrue;}boolTESTparse(char*pFileName){ﻩboolesﻩ= true; if((fp=fopen(pFileName,"r"))==NULL) {ﻩﻩprintf("\n打开%s错误!\n",pFileName); returnfalse; }ﻩelseﻩﻩprogram(); if(!feof(fp)) ﻩProcessError(9);ﻩfclose(fp); printf("=====语法分析结果!=====\n");ﻩif(StackEs.size()==0)ﻩ{ﻩﻩprintf("语法分析成功!\n");ﻩﻩreturntrue;ﻩ}ﻩelseﻩ{ ﻩinti; for(i=0;i<StackEs.size();i++)ﻩﻩ{ﻩﻩ printf("在第%d行",StackEs[i].line); switch(StackEs[i].es) ﻩ{ﻩﻩ ﻩcase1:printf("缺少{!\n");break; ﻩ ﻩcase2:printf("缺少}!\n");break; ﻩ case3:printf("缺少标记符!\n");break; ﻩ case4:printf("缺少分号!\n");break; ﻩﻩﻩcase5:printf("缺少(!\n");break;ﻩ ﻩﻩcase6:printf("缺少)!\n");break;ﻩﻩﻩ case7:printf("缺少操作数!\n");break;ﻩﻩ case8:printf("文献为空!\n");break; ﻩ case9:printf("文献尾有多余字符!\n");break; ﻩ case10:printf("\n打开%s错误!\n",pFileName);break; }ﻩ }ﻩ returnfalse;ﻩ}}//《程序》::={<声明序列><语句序列>}//program::={<declaration_;list><statement_list>}boolprogram(){ booles=true;ﻩif(ReadFile(token,token1)==false) { ProcessError(8); ﻩ //文献结束ﻩ returnfalse; } if(strcmp(token,"{")) ﻩﻩ//判断是否为‘{’ ﻩProcessError(1);ﻩif(ReadFile(token,token1)==false)ﻩ//文献中仅有{ﻩ ProcessError(2); ﻩ ﻩ es = declaration_list(); if(es==false)ﻩ returnfalse; es =ﻩstatement_list();ﻩif(es==false) returnfalse;ﻩif(strcmp(token,"}"))ﻩﻩ //判断是否为‘}’ﻩﻩProcessError(2);ﻩreturntrue;}//<声明序列>::=<声明序列><声明语句>|<声明语句>//<declaration>::=//<declaration_list><declaration_stat>|ε//改成<declaration_list>::={<declaration_stat>}booldeclaration_list(){ﻩbooles=true;ﻩwhile(strcmp(token,"int")==0)ﻩ{ ﻩes =ﻩdeclaration_stat(); ﻩif(es==false) ﻩreturnfalse; } returnes;}//<声明语句>::=int<变量>;//<declaration_stat>::=intID;booldeclaration_stat(){ booles=true; if(ReadFile(token,token1)==false)ﻩ{ ﻩProcessError(2); ﻩ//缺少} returnfalse; ﻩﻩ //文献结束 }ﻩif(strcmp(token,"ID")) ﻩProcessError(3);//不是标记符 if(ReadFile(token,token1)==false) {ﻩ ProcessError(2); //缺少}ﻩﻩreturnfalse; ﻩ //文献结束ﻩ}ﻩif(strcmp(token,";")) ProcessError(4); if(ReadFile(token,token1)==false) { ﻩProcessError(2); //缺少} returnfalse; ﻩ//文献结束 } return(es);}//<语句序列>::=<语句序列><语句>|ε//<statement_list>::=<statement_list><statement>|ε//改成<statement_list>::={<statement>}boolstatement_list(){ﻩbooles =ﻩtrue; if(feof(fp)) ﻩreturnfalse; while(strcmp(token,"}")) { ﻩes =ﻩstatement(); ﻩif(es==false)ﻩ return(es); } return(es);}//<语句>::=<if语句>|<while语句>|<for语句>|<read语句>//|<write语句>|<复合语句>|<表达式语句>//<statement>::=<if_sttat>|<while_stat>|<for_stat>//|<compound_stat>|<expression_stat>boolstatement(){ boolesﻩ= true; if(strcmp(token,"if")==0) ﻩes=if_stat(); ﻩ ﻩﻩ//<if语句>ﻩelseif(strcmp(token,"while")==0)ﻩﻩes=while_stat();ﻩﻩ //<while语句>ﻩelseif(strcmp(token,"for")==0) ﻩes=for_stat();ﻩﻩ ﻩﻩ//<for语句> elseif(strcmp(token,"read")==0) es=read_stat();ﻩ ﻩ ﻩ //<read语句> elseif(strcmp(token,"write")==0)ﻩﻩes=write_stat();ﻩ ﻩ //<write语句> elseif(strcmp(token,"{")==0) es=compound_stat(); ﻩ ﻩﻩ//<复合语句> elseif(strcmp(token,"ID")==0||strcmp(token,"NUM")==0||strcmp(token,"(")==0) ﻩes=expression_stat();ﻩﻩ ﻩ//<表达式语句> return(es);}//<if语句>::=if(<表达式>)<语句>[else<语句>]//<if_stat>::=if(<expressiion>)<statement>[else<statement>]boolif_stat(){ booles = true;ﻩ ﻩ //if if(ReadFile(token,token1)==false)ﻩ{ ﻩProcessError(2);ﻩ ﻩ//缺少} ﻩreturnfalse;ﻩﻩ //文献结束 }ﻩif(strcmp(token,"("))ﻩ ProcessError(5);ﻩ ﻩ //少左括号 if(ReadFile(token,token1)==false)ﻩ{ﻩ ProcessError(2);ﻩﻩ //缺少} ﻩreturnfalse;ﻩ ﻩﻩ//文献结束ﻩ} es=expression();ﻩif(es==false)ﻩ return(es);ﻩif(strcmp(token,")")) ﻩProcessError(6);ﻩﻩ //少右括号ﻩif(ReadFile(token,token1)==false) { ﻩProcessError(2); ﻩﻩ//缺少}ﻩ returnfalse; ﻩﻩﻩ//文献结束ﻩ} es=statement(); if(es==false) ﻩreturn(es); if(strcmp(token,"else")==0) //else部分解决 {ﻩﻩif(ReadFile(token,token1)==false)ﻩ { ﻩ ProcessError(2); //缺少}ﻩﻩﻩreturnfalse;ﻩﻩﻩﻩ//文献结束ﻩ }ﻩ es=statement(); ﻩif(es==false)ﻩ return(es);ﻩ} return(es);}//<while语句>::=while(<表达式>)<语句>//<while_stat>::=while<espr><statement>boolwhile_stat(){ﻩbooles=true; if(ReadFile(token,token1)==false) { ﻩProcessError(2);ﻩﻩ //缺少}ﻩﻩreturnfalse;ﻩﻩﻩﻩ//文献结束 }ﻩif(strcmp(token,"(")) ProcessError(5); ﻩﻩ //少左括号ﻩif(ReadFile(token,token1)==false)ﻩ{ﻩ ProcessError(2); ﻩﻩ//缺少} returnfalse; ﻩ//文献结束ﻩ} esﻩ=ﻩexpression();ﻩif(es==false)ﻩﻩreturn(es);ﻩif(strcmp(token,")"))ﻩ ProcessError(6); //少右括号 if(ReadFile(token,token1)==false)ﻩ{ ProcessError(2);ﻩﻩ //缺少} ﻩreturnfalse;ﻩ ﻩﻩ//文献结束 }ﻩes=statement(); if(es==false)ﻩﻩreturnes; return(es);}//<for语句>::=for(<表达式>;<表达式>;<表达式>)<语句>//<for_stat>::=for(<expression>;<expression>;<expression>)<statement>boolfor_stat(){ﻩboolesﻩ= true; if(ReadFile(token,token1)==false) { ProcessError(2);ﻩﻩﻩ//缺少} ﻩreturnfalse;ﻩ ﻩ//文献结束ﻩ} if(strcmp(token,"("))ProcessError(5);//少左括号ﻩif(ReadFile(token,token1)==false)ﻩ{ ProcessError(2);ﻩﻩﻩ//缺少} returnfalse; ﻩ //文献结束 } es=expression(); if(es==false)return(es); if(strcmp(token,";"))ProcessError(4);//少分号ﻩif(ReadFile(token,token1)==false)ﻩ{ ﻩProcessError(2);ﻩﻩﻩ//缺少}ﻩﻩreturnfalse;ﻩﻩ //文献结束 } es=expression(); if(es==false)return(es); if(strcmp(token,";"))ProcessError(4);//少分号ﻩif(ReadFile(token,token1)==false)ﻩ{ ProcessError(2); ﻩ //缺少} ﻩreturnfalse;ﻩ ﻩ//文献结束ﻩ}ﻩes=expression(); if(es==false)return(es);ﻩif(strcmp(token,")"))ProcessError(6);//少右括号ﻩif(ReadFile(token,token1)==false)ﻩ{ﻩﻩProcessError(2); //缺少}ﻩﻩreturnfalse;ﻩﻩﻩﻩ//文献结束 }ﻩes=statement(); if(es==false)return(es);ﻩreturnes;}//<write_语句>::=write<表达式>;//<write_stat>::=write<expression>boolwrite_stat(){ booles=true;ﻩif(ReadFile(token,token1)==false)ﻩ{ ProcessError(2); ﻩ//缺少} ﻩreturnfalse;ﻩ ﻩﻩ//文献结束 }ﻩes=expression(); if(es==false)return(es); if(strcmp(token,";"))ProcessError(4);//少分号 if(ReadFile(token,token1)==false)ﻩ{ﻩﻩProcessError(2);ﻩ //缺少}ﻩ returnfalse;ﻩ ﻩﻩ//文献结束ﻩ} returnes;}//<read_语句>::=read<变量>//<read_stat>::=readId;boolread_stat(){ boolesﻩ= true;ﻩif(ReadFile(token,token1)==false) {ﻩﻩProcessError(2);ﻩﻩﻩ//缺少}ﻩ returnfalse; ﻩ//文献结束 }ﻩif(strcmp(token,"ID")) ProcessError(3);//少标记符if(strcmp(token,";")) ProcessError(4);//少分号 if(ReadFile(token,token1)==false) { ProcessError(2); ﻩ //缺少} returnfalse; ﻩﻩ //文献结束ﻩ}ﻩreturnes;}//<复合语句>::{<语句序列>}//<compound_stat>::={<statement_list>}boolcompound_stat()//复合语句函数{ boolesﻩ= true; if(ReadFile(token,token1)==false)ﻩ{ﻩﻩProcessError(2); ﻩﻩ//缺少}ﻩﻩreturnfalse;ﻩﻩﻩ //文献结束ﻩ} es =ﻩstatement_list();ﻩif(es==false)ﻩ returnes; //--------------new----------ﻩif(strcmp(token1,"}")!=0) ﻩﻩProcessError(2); elseﻩ{ﻩﻩif(ReadFile(token,token1)==false)ﻩﻩ{ﻩ ﻩProcessError(2);ﻩﻩﻩ//缺少}ﻩ returnfalse; ﻩﻩﻩ//文献结束ﻩﻩ} }ﻩ//---------------new---------- returnes;}//<表达式语句>::=<<表达式>;|;//<expression_stat>::=<expression>;|;boolexpression_stat(){ﻩboolesﻩ= true;ﻩif(strcmp(token,";")==0) { if(ReadFile(token,token1)==false) ﻩ{ ProcessError(2);ﻩ //缺少} ﻩﻩreturnfalse; ﻩ//文献结束ﻩﻩ}ﻩ returnes;ﻩ} es=expression(); if(es==false)returnes; if(strcmp(token,";")==0) {ﻩﻩif(ReadFile(token,token1)==false) ﻩ{ﻩﻩﻩProcessError(2); ﻩﻩ//缺少}ﻩ returnfalse;ﻩ ﻩﻩ//文献结束ﻩﻩ}ﻩ returnes; }ﻩelse {ﻩﻩProcessError(4);//少分号 } returnes;}//<表达式>::=<标记符>=<布尔表达式>|<布尔表达式>//<expression>::=ID=<bool_expr>|<bool_expr>boolexpression(){ﻩbooles = true;ﻩintfileadd;ﻩchartoken2[20],token3[40]; if(strcmp(token,"ID")==0)ﻩ{ ﻩfileadd=ftell(fp);//记住当前文献位置 ﻩif(ReadFile(token2,token3)==false)ﻩﻩ{ﻩ ProcessError(2); ﻩﻩ//缺少}ﻩﻩﻩreturnfalse; ﻩﻩ //文献结束 }ﻩﻩif(strcmp(token2,"=")==0)//'='ﻩ { ﻩif(ReadFile(token,token1)==false)ﻩﻩ {ﻩﻩﻩﻩProcessError(2);ﻩﻩ //缺少}ﻩﻩ returnfalse; ﻩﻩﻩ//文献结束ﻩ ﻩ} ﻩ es=bool_expr(); if(es==false)returnes;ﻩﻩ}ﻩﻩelseﻩﻩ{ﻩﻩﻩfseek(fp,fileadd,0);//若非‘=’,则文献指针回到‘=’前的标记符 ﻩ EsLine--; ﻩes=bool_expr();ﻩ if(es==false)returnes; ﻩ}ﻩ}ﻩelseﻩ{ es=bool_expr();ﻩﻩif(es==false)returnes;ﻩ} returnes;}//<布尔表达式>::= <算术表达式>[(>|<|>=|<=|==|!=)<算数表达式>]ﻩ //<bool_expr>::=ﻩ<additive_expr>[(>|<|>=|<=|==|!=)<additive_expr>]boolbool_expr(){ booles =ﻩtrue;ﻩes=additive_expr(); if(es==false)returnes;ﻩif(strcmp(token,">")==0||strcmp(token,">=")==0 ﻩ||strcmp(token,"<")==0||strcmp(token,"<=")==0ﻩﻩ||strcmp(token,"!=")==0||strcmp(token,"==")==0)ﻩ{ ﻩif(ReadFile(token,token1)==false) {ﻩﻩﻩProcessError(2); ﻩ //缺少} ﻩﻩreturnfalse;ﻩﻩ //文献结束ﻩ }ﻩﻩes=additive_expr(); ﻩif(es==false)returnes;ﻩ}ﻩreturnes;}//<算数表达式>::=<项>{(+|-)<项>}//<additive_expr>::=<term>{(+|-)<term>}booladditive_expr(){ﻩbooles =ﻩtrue; es=term(); if(es==false)returnes;ﻩwhile(strcmp(token,"+")==0||strcmp(token,"-")==0) { if(ReadFile(token,token1)==false) { ProcessError(2);ﻩﻩ //缺少}ﻩ returnfalse; ﻩ ﻩ//文献结束 ﻩ} ﻩes=term(); ﻩif(es==false)returnes; }ﻩreturnes;}//<项>::=<因子>{(*|/)<因子>}//<term>::=<factor>{(*|/)<factor>}boolterm(){ boolesﻩ= true;ﻩes=factor();ﻩif(es==false)returnes; while(strcmp(token,"*")==0||strcmp(token,"/")==0)ﻩ{ ﻩif(ReadFile(token,token1)==false)ﻩﻩ{ﻩ ProcessError(2); ﻩﻩ//缺少} ﻩreturnfalse; ﻩ //文献结束 } es=factor(); if(es==false)returnes; } returnes;}//<因子>::=(<表达式>)|<标记符>|<无符号整数>//<factor>::=(<expression>)|ID|NUMboolfactor(){ﻩbooles =ﻩtrue;ﻩif(strcmp(token,"(")==0) { ﻩif(ReadFile(token,token1)==false)ﻩﻩ{ﻩﻩ ProcessError(2);ﻩﻩﻩ//缺少} ﻩﻩreturnfalse; ﻩﻩ//文献结束ﻩﻩ} es=expression();ﻩﻩif(es==false)returnes;ﻩ if(strcmp(token,")"))ProcessError(6);//少右括号 if(ReadFile(token,token1)==false) { ﻩ ProcessError(2);ﻩﻩﻩ//缺少} ﻩﻩreturnfalse; ﻩ ﻩ//文献结束 }ﻩ}ﻩelse { ﻩif(strcmp(token,"ID")==0||strcmp(token,"NUM")==0) {ﻩ if(ReadFile(token,token1)==false)ﻩﻩﻩ{ ﻩ ProcessError(2);ﻩﻩ //缺少} ﻩﻩreturnfalse;ﻩﻩ ﻩ//文献结束ﻩ ﻩ}ﻩﻩﻩreturnes;ﻩﻩ}ﻩ elseﻩ { ProcessError(7);//缺少操作数 ﻩ}ﻩ}ﻩreturnes;}Scan.cpp#include<ctype.h>#include<cstring>#include<stdio.h>//保存字#defineﻩKEYWORDNUM 8char *pKeyword[KEYWORDNUM]ﻩ=ﻩ{"if","else","for","while","do","int","read","write"};//单分界符charﻩszSingleWord[50]ﻩ=ﻩ"+-(){};,:";//双分界符char szDoubleWord[10] = "<>!";//其他符char *szDivideﻩ ﻩ= "/";char *szStar ﻩ =ﻩ"*";charﻩ*szEqualﻩﻩ = "=";#defineSTATUSNUMﻩ 16 ﻩ//状态个数#defineDATANUM 10 //数据流个数//数据流类型typedefunsignedintDATA;#defineOTHERﻩ ﻩ0ﻩ //wronginput#defineLETTER ﻩ 1 ﻩ//字母#defineDIGIT ﻩ 2 //数字#defineSINGLEWORDﻩ 3 ﻩ//单分界符#defineDOUBLEWORD 4ﻩ //双分界符#defineDIVIDEﻩ ﻩ5 ﻩ///#defineEQUAL ﻩﻩ6ﻩﻩ//=#defineSTARﻩﻩ 7ﻩﻩ//*#defineSPACE ﻩ8 ﻩ//空白#defineFILEOVERﻩﻩ9ﻩ //状态类型typedefunsignedintSTATUS;#defineNOSTATUSﻩﻩ0 //wronginput#defineSTART 1#defineCASE_IDﻩ ﻩ2ﻩ#defineEND_ID ﻩ 3 #defineCASE_NUM 4 #defineEND_NUMﻩﻩ 5#defineCASE_SINGLE ﻩ6#defineEND_SINGLEﻩ 7 #defineCASE_DOUBLEﻩﻩ8#defineCASE_DOUBLE2 9#defineEND_DOUBLE ﻩ10 #defineCASE_DIVIDEﻩﻩ11#defineCASE_NOTE 12#defineEND_NOTE 13#defineCASE_ERRORﻩﻩ14#defineEND_ERROR ﻩ15 //状态转换表// :到达终结状态的数据不保存在输出串中intﻩreflect[STATUSNUM][DATANUM] ={ ﻩ ﻩ//OTHERﻩ LETTER DIGIT ﻩSINGLEWORD DOUBLEWORD DIVIDE ﻩEQUALﻩ STAR SPACE FILEOVER/*NOSTATUS*/ﻩ{NOSTATUS,ﻩNOSTATUS,ﻩNOSTATUS, NOSTATUS,ﻩNOSTATUS,ﻩNOSTATUS, NOSTATUS, NOSTATUS, NOSTATUS, NOSTATUS},/*START*/ﻩﻩ{CASE_ERROR,CASE_ID,ﻩCASE_NUM, CASE_SINGLE,CASE_DOUBLE,CASE_DIVIDE,CASE_DOUBLE,CASE_SINGLE,START,ﻩﻩSTART},/*CADE_ID*/ ﻩ{END_ID,ﻩCASE_ID,ﻩCASE_ID, END_ID,ﻩ END_ID,ﻩﻩEND_ID, ﻩEND_ID, END_ID,ﻩ END_ID,ﻩﻩEND_ID},/*END_ID*/ﻩﻩ{NOSTATUS,ﻩNOSTATUS, NOSTATUS, NOSTATUS,ﻩNOSTATUS,ﻩNOSTATUS, NOSTATUS, NOSTATUS,ﻩNOSTATUS, NOSTATUS},/*CASE_NUM*/ﻩ{END_NUM,ﻩEND_NUM,ﻩCASE_NUM,ﻩEND_NUM, END_NUM,ﻩEND_NUM, END_NUM,ﻩEND_NUM, END_NUM, END_NUM},/*END_NUM*/ﻩﻩ{NOSTATUS, NOSTATUS, NOSTATUS, NOSTATUS,ﻩNOSTATUS, NOSTATUS, NOSTATUS,ﻩNOSTATUS, NOSTATUS,ﻩNOSTATUS},/*CASE_SINGLE*/{END_SINGLE,END_SINGLE,ﻩEND_SINGLE, END_SINGLE, END_SINGLE,ﻩEND_SINGLE,ﻩEND_SINGLE, END_SINGLE, END_SINGLE, END_SINGLE},/*END_SINGLE*/ {NOSTATUS,ﻩNOSTATUS, NOSTATUS, NOSTATUS, NOSTATUS, NOSTATUS, NOSTATUS,ﻩNOSTATUS,ﻩNOSTATUS,ﻩNOSTATUS},/*CASE_DOUBLE*/ {END_SINGLE,END_SINGLE,ﻩEND_SINGLE,ﻩEND_SINGLE, END_SINGLE,ﻩEND_SINGLE, CASE_DOUBLE2,END_SINGLE,END_SINGLE, END_SINGLE},/*CASE_DOUBLE2*/{END_DOUBLE,END_DOUBLE, END_DOUBLE,ﻩEND_DOUBLE,ﻩEND_DOUBLE, END_DOUBLE, END_DOUBLE,ﻩEND_DOUBLE,ﻩEND_DOUBLE,ﻩEND_DOUBLE},/*END_DOUBLE*/ {NOSTATUS, NOSTATUS, NOSTATUS, NOSTATUS, NOSTATUS, NOSTATUS,ﻩNOSTATUS, NOSTATUS,ﻩNOSTATUS,ﻩNOSTATUS},/*CASE_DIVIDE*/ {END_SINGLE,END_SINGLE, END_SINGLE, END_SINGLE,ﻩEND_SINGLE,ﻩEND_SINGLE, END_SINGLE,ﻩCASE_NOTE,ﻩEND_SINGLE, END_SINGLE},/*CASE_NOTE*/ {END_NOTE, END_NOTE,ﻩEND_NOTE, END_NOTE, END_NOTE, END_NOTE,ﻩEND_NOTE, END_NOTE,ﻩEND_NOTE, END_NOTE},/*END_NOTE*/ﻩ{NOSTATUS,ﻩNOSTATUS,ﻩNOSTATUS, NOSTATUS, NOSTATUS, NOSTATUS, NOSTATUS, NOSTATUS,ﻩNOSTATUS,ﻩNOSTATUS},/*CASE_ERROR*/ {END_ERROR,ﻩEND_ERROR,ﻩEND_ERROR,ﻩEND_ERROR,ﻩEND_ERROR,ﻩEND_ERROR,ﻩEND_ERROR, END_ERROR, END_ERROR, END_ERROR},/*END_ERROR*/ {NOSTATUS,ﻩNOSTATUS,ﻩNOSTATUS,ﻩNOSTATUS,ﻩNOSTATUS,ﻩNOSTATUS,ﻩNOSTATUS,ﻩNOSTATUS, NOSTATUS,ﻩNOSTATUS}};//若在pString中找到word则返回true,否则,返回falseboolSearchChar(charword,constchar*pString){ﻩintn =ﻩstrlen(pString); for(inti=0;i<n;i++)ﻩ{ﻩ if(word==pString[i])ﻩ returntrue;ﻩ}ﻩreturnfalse;}//得到word的数据流类型DATAGetDataByword(charword){ if(word==EOF) returnFILEOVER;ﻩif(isalpha(word))ﻩ returnLETTER; if(isdigit(word)) returnDIGIT;ﻩif(SearchChar(word,szSingleWord))ﻩ returnSINGLEWORD;ﻩif(SearchChar(word,szDoubleWord))ﻩ returnDOUBLEWORD; if(SearchChar(word,szDivide)) returnDIVIDE;ﻩif(SearchChar(word,szEqual))ﻩ returnEQUAL;ﻩif(SearchChar(word,szStar))ﻩ returnSTAR; if(isspace(word)) ﻩreturnSPACE; returnOTHER;}//得到从status状态输入word后到达的状态STATUSGetNextStatus(STATUSstatus,DATAword){ returnreflect[status][word];}//返回值表达错误个数。当返回值为-1时,表达出现未知错误intTESTScan(FILE*fin,FILE*fout){ﻩif(fin==NULL||fout==NULL) //若fin或fout为空,则此法分析失败 return0; ﻩintes=0; ﻩ//记录结果中错误的个数ﻩcharﻩszScanout[40];ﻩ//存放要写入文献的内容ﻩDATA data; //初始化ﻩSTATUS status =ﻩSTART;ﻩint i=0; charw
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度版权转让合同中的权益确认与支付方式
- 2024年度云计算数据中心运营合同
- 2024年度网络安全系统维护及升级服务合同
- 2024年度知识产权侵权赔偿代偿合同
- 病毒感染细胞信号通路
- 2024年度打孔工程材料采购合同
- 2024年度餐饮店废水处理设备采购合同
- 2024年度餐馆特许经营合同
- 2024年全数字化超声诊断仪项目规划申请报告
- 2024年版度假区场地租赁协议
- 副乳教学演示课件
- 企业法律和合规要求课件
- 趣味化学知识讲座
- 医疗垃圾分类与处理知识培训课件
- 供应链韧性优化模型与算法研究
- 2024年兴业证券股份有限公司招聘笔试参考题库含答案解析
- 全国行政区划大全
- GD3005勘察文件质量检查报告
- 储气罐使用注意事项培训
- 12米(27米)满堂高支模方案(专家论证已通过)
- 皮肤科《色素性皮肤病》课件
评论
0/150
提交评论