test语法分析程序.docx
- 文档编号:117459
- 上传时间:2022-10-03
- 格式:DOCX
- 页数:12
- 大小:18.03KB
test语法分析程序.docx
《test语法分析程序.docx》由会员分享,可在线阅读,更多相关《test语法分析程序.docx(12页珍藏版)》请在冰豆网上搜索。
#include
#include
#include
#include
#include
#include
#include
intTESTparse();
intprogram();
intcompound_Stat();
intstatement();
intexpression_Stat();
intexpression();
intbool_expr();
intExchange();
intadditive_expr();
intterm();
intfactor();
intif_stat();
intwhile_stat();
intfor_stat();
intwrite_stat();
intread_stat();
intdeclaration_stat();
intdeclaration_list();
intstatement_list();
intcompound_stat();
intexpression_stat();
chartoken[20],token1[40];//token保存单词符号,token1保存单词值
externcharScanout[300];//保存词法分析输出文件名
FILE*fp;//用于指向输入文件的指
intTESTparse()
{
intes=0;
if((fp=fopen(Scanout,"r"))==NULL)
{
printf("\n打开%s错误!
\n",Scanout);
es=10;
}
if(es==0)es=program();
printf("=====语法分析结果!
=====\n");
switch(es)
{
case0:
printf("语法分析成功!
\n");break;
case10:
printf("打开文件%s失败!
\n",Scanout);break;
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;
}
fclose(fp);
return(es);
}
//program:
:
={
intprogram()
{
intes=0;
fscanf(fp,"%s%s\n",token,token1);
printf("%s%s\n",token,token1);
if(strcmp(token,"{"))//判断是否为'{'
{
es=1;
return(es);
}
fscanf(fp,"%s%s\n",&token,&token1);
printf("%s%s\n",token,token1);
es=declaration_list();
if(es>0)return(es);
es=statement_list();
if(es>0)return(es);
if(strcmp(token,"}"))//判断是否为'}'
{
es=2;
return(es);
}
return(es);
}
//<声明序列>:
:
=<声明序列><声明语句>|$
//
:
=
//
//改成
:
={
intdeclaration_list()
{
intes=0;
while(strcmp(token,"int")==0)
{
es=declaration_stat();
if(es>0)return(es);
}
return(es);
}
//<声明语句>:
:
=int<变量>;
//
:
=intID;
intdeclaration_stat()
{
intes=0;
fscanf(fp,"%s%s\n",&token,&token1);
printf("%s%s\n",token,token1);
if(strcmp(token,"ID"))return(es=3);//不是标识符
fscanf(fp,"%s%s\n",&token,&token1);
printf("%s%s\n",token,token1);
if(strcmp(token,";"))return(es=4);
fscanf(fp,"%s%s\n",&token,&token1);
printf("%s%s\n",token,token1);
return(es);
}
//<语句序列>:
:
=<语句序列><语句>|$
//
:
=
//改成
:
={
intstatement_list()
{
intes=0;
while(strcmp(token,"}"))
{
es=statement();
if(es>0)return(es);
}
return(es);
}
//<语句>:
:
=
//
:
=
intstatement()
{
intes=0;
if(es==0&&strcmp(token,"if")==0)es=if_stat();//
if(es==0&&strcmp(token,"while")==0)es=while_stat();//
if(es==0&&strcmp(token,"for")==0)es=for_stat();//
if(es==0&&strcmp(token,"read")==0)es=read_stat();//
if(es==0&&strcmp(token,"write")==0)es=write_stat();//
if(es==0&&strcmp(token,"{")==0)es=compound_stat();//<复合语句>
if(es==0&&strcmp(token,"ID")==0||strcmp(token,"NUM")==0||strcmp(token,"(")==0)
es=expression_stat();//<表达式语句>
return(es);
}
//
:
=if(<表达式>)<语句>[else<语句>]
//
:
=if(
intif_stat()
{
intes=0;//if
fscanf(fp,"%s%s\n",&token,&token1);
printf("%s%s\n",token,token1);
if(strcmp(token,"("))return(es=5);//少左括号
fscanf(fp,"%s%s\n",&token,&token1);
printf("%s%s\n",token,token1);
es=expression();
if(es>0)return(es);
if(strcmp(token,")"))return(es=6);//少右括号
fscanf(fp,"%s%s\n",&token,&token1);
printf("%s%s\n",token,token1);
es=statement();
if(es>0)return(es);
if(strcmp(token,"else")==0)//else部分处理
{
fscanf(fp,"%s%s\n",&token,&token1);
printf("%s%s\n",token,token1);
es=statement();
if(es>0)return(es);
}
return(es);
}
//
:
=while(<表达式>)<语句>
//
:
=while(
intwhile_stat()
{
intes=0;
fscanf(fp,"%s%s\n",&token,&token1);
printf("%s%s\n",token,token1);
if(strcmp(token,"("))return(es=5);//少左括号
fscanf(fp,"%s%s\n",&token,&token1);
printf("%s%s\n",token,token1);
es=expression();
if(es>0)return(es);
if(strcmp(token,")"))return(es=6);//少右括号
fscanf(fp,"%s%s\n",&token,&token1);
printf("%s%s\n",token,token1);
es=statement();
return(es);
}
//
:
=for(<表达式>;<表达式>;<表达式>)<语句>
//
:
=for(
intfor_stat()
{
intes=0;
fscanf(fp,"%s%s\n",&token,&token1);
printf("%s%s\n",token,token1);
if(strcmp(token,"("))return(es=5);//少左括号
fscanf(fp,"%s%s\n",&token,&token1);
printf("%s%
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- test 语法分析 程序