1、 printf(n 打开文件 %s 错误! n, Scanout); es = 10; if (es = 0) es = program(); printf(=语法分析结果! = n); switch (es) case 0:语法分析成功!n break; case 10:printf(打开文件%s失败!,Scanout); case 1:缺少 !break; case 2:缺少 ! case 3:缺少标识符! case 4:少分号! case 5:缺少 (! case 6:缺少)! case 7:狹少操作数! fclose(fp); return(es);/ :=/program:= sta
2、tement_list int program() fscanf(fp, %s %sn, token, token1); if (strcmp(token, ) /判断是否为 es = 1; return(es);, &token, &token1); es = declaration_list(); if (es 0) return(es); es = statement_list();) /判断是否为, es = 2; return (es);= 1 / |e /3tJl* 0) return(es);=ID; = int ID; int declaration_stat() printf
3、 (,token, token1); if (strcmp (token, ID) return (es*3); /不是标识符 fscanf(fp,&token,&,token,token1); if(strcmp(token,?) return(es=4); fscanf (fp, = |e statement_list = |e /改成8= 0) return (es);if语句 |for语句 丨resd语句丨表达式语句if_statwhile_stat for_stat/ |expression_statint statement() if (es = 0 & strcmp(token,
4、 if) = 0) es = if_stat();while) = 0) es = while_stat();while语句for) = 0) es=for_stat(); for 语句resd) = 0) es = read_stat();readSJwrite) = 0) es = write_stat();write SI) = 0) es = compound_stat(); (strcmp(token, ) = 0 | strcmp(token, NUM() = 0) es = expression_stat(); = if ( ) 4136 = if ) else 0) retur
5、n (es = 5); /少左括号 es = expression(); 0) return (es = 4); /少分号) 0) return (es = 6); /少右括号 es = statement();else) = 0) /else部分处理 fscanf(fp, return (es);while 语句=while ( = while () ) 0) return (es= 6); es=statement(); for语句 = for ( ;=for (=write = write0) return (es); resci_j5 找日化变量resd_stat = resd ID;
6、int read_stat() 0) return(es=3) ; /例示识符 0) return (es=4); /少分号 fscanf (fp,-( = - ,: - -1int compound_stat() /复合语句函数 es= statement_list();人:丨;expressgLon_stat | ;int expression_stat() fscanf(fp, printf (,token,token1) ; if(es= 0 & strcmp (token, fscanf (fp, printf ( return(es); else es=4;标识符布尔表达式 = I
7、D=int expression() int es=0,filesdd; char token220,token340;) = 0) filesdd = ftell(fp); /记住当前文件位置%s %sVitoken2, &token3);, token2, token3 ) ; if (strcmp(token2, =) = 0) / = fscanf(fp, printf( es = bool_expr(); if (es 0) return(es ); else fseek(fp, filesdd, 0); /若非= ,则文件指针回到=前的标识符 ,token, token1); el
8、se es = bool_expr(); return (es) ;算术表达式算术表达式 (彳=丨additive_expr f= | = | = | !*)= 0 |strcmp(token,) =0 |strcmp (token, )=0 |strcmp (token, )=0 |strcmp(token,=)= 0|strcmp(token,= es= additive_expr();项 (+ | -) (+ | - ) int additive_expr() es=term();+- es = term();/ 48 | ( * | / ) * ( * ( /)int term() es= factor(); while(strcmp(token,*)=0|strcmp(token,/ es= factor(); if (es因子(= ()丨 ID|NUMint factor() es=expression(); if (strcmp (token, ) return (es=6); if (strcmp(token, token1)
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2