test语法分析程序Word文档格式.docx
《test语法分析程序Word文档格式.docx》由会员分享,可在线阅读,更多相关《test语法分析程序Word文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
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("
语法分析成功!
break;
case10:
打开文件%s失败!
case1:
缺少{!
case2:
缺少}!
case3:
缺少标识符!
case4:
少分号!
case5:
缺少(!
case6:
缺少)!
case7:
缺少操作数!
fclose(fp);
return(es);
}
//program:
:
={<
declaration_list>
<
statement_list>
intprogram()
fscanf(fp,"
%s%s\n"
token,token1);
if(strcmp(token,"
{"
))//判断是否为'
{'
es=1;
return(es);
&
token,&
token1);
es=declaration_list();
if(es>
0)return(es);
es=statement_list();
}"
}'
es=2;
//<
声明序列>
=<
声明语句>
|$
delaration_list>
=
declaration_stat>
//改成<
intdeclaration_list()
while(strcmp(token,"
int"
)==0)
es=declaration_stat();
if(es>
=int<
变量>
;
=intID;
intdeclaration_stat()
ID"
))return(es=3);
//不是标识符
"
))return(es=4);
fscanf(fp,"
语句序列>
语句>
statement>
intstatement_list()
))
es=statement();
0)return(es);
if语句>
|<
while语句>
for语句>
read语句>
write语句>
复合语句>
表达式语句>
if_stat>
while_stat>
for_stat>
compound_stat>
expression_stat>
intstatement()
if(es==0&
&
strcmp(token,"
if"
)==0)es=if_stat();
//<
while"
)==0)es=while_stat();
//<
for"
)==0)es=for_stat();
//<
read"
)==0)es=read_stat();
//<
write"
)==0)es=write_stat();
)==0)es=compound_stat();
//<
)==0||strcmp(token,"
NUM"
)==0||strcmp(token,"
("
)==0)
es=expression_stat();
//<
=if(<
表达式>
)<
[else<
]
expression>
intif_stat()
//if
))return(es=5);
//少左括号
es=expression();
)"
))return(es=6);
//少右括号
es=statement();
else"
)==0)//else部分处理
fscanf(fp,"
printf("
=while(<
expr>
intwhile_stat()
//少左括号
//少右括号
=for(<
intfor_stat()
%s%