test语法分析程序Word文档下载推荐.docx

上传人:wj 文档编号:346262 上传时间:2023-04-28 格式:DOCX 页数:12 大小:18.03KB
下载 相关 举报
test语法分析程序Word文档下载推荐.docx_第1页
第1页 / 共12页
test语法分析程序Word文档下载推荐.docx_第2页
第2页 / 共12页
test语法分析程序Word文档下载推荐.docx_第3页
第3页 / 共12页
test语法分析程序Word文档下载推荐.docx_第4页
第4页 / 共12页
test语法分析程序Word文档下载推荐.docx_第5页
第5页 / 共12页
test语法分析程序Word文档下载推荐.docx_第6页
第6页 / 共12页
test语法分析程序Word文档下载推荐.docx_第7页
第7页 / 共12页
test语法分析程序Word文档下载推荐.docx_第8页
第8页 / 共12页
test语法分析程序Word文档下载推荐.docx_第9页
第9页 / 共12页
test语法分析程序Word文档下载推荐.docx_第10页
第10页 / 共12页
test语法分析程序Word文档下载推荐.docx_第11页
第11页 / 共12页
test语法分析程序Word文档下载推荐.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

test语法分析程序Word文档下载推荐.docx

《test语法分析程序Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《test语法分析程序Word文档下载推荐.docx(12页珍藏版)》请在冰点文库上搜索。

test语法分析程序Word文档下载推荐.docx

//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()

))return(es=4);

//少分号

))return(es=6);

write_语句>

=write<

write_stat>

intwrite_stat()

read_语句>

=read<

read_stat>

=readID;

intread_stat()

))return(es=3);

//少标识符

intcompound_stat()//复合语句函数

|;

intexpression_stat()

printf("

}else

es=4;

//少分号

标识符>

布尔表达式>

=ID=<

bool_expr>

intexpression()

intes=0,fileadd;

chartoken2[20],token3[40];

fileadd=ftell(fp);

//记住当前文件位置

token2,&

token3);

token2,token3);

if(strcmp(token2,"

="

)==0)//'

='

{

fscanf(fp,"

printf("

es=bool_expr();

if(es>

}else

fseek(fp,fileadd,0);

//若非'

则文件指针回到'

前的标识符

}

}elsees=bool_expr();

算术表达式>

(>

|>

=|<

=|==|!

=)

//<

additive_expr>

//|<

=)<

intbool_expr()

es=additive_expr();

>

)==0

||strcmp(token,"

=="

!

es=additive_expr();

项>

{(+|-)<

term>

intadditive_expr()

es=term();

+"

-"

es=term();

因子>

{(*|/)<

factor>

intterm()

es=factor();

*"

/"

es=factor();

=(<

)|<

无符号整数>

)|ID|NUM

intfactor()

es=expression();

if(strcmp(token,"

))return(es=6);

return(es);

es=7;

//缺少操作数

externintTESTscan();

externintTESTparse();

voidmain()

es=TESTscan();

//调词法分析

if(es>

0)printf("

词法分析有错,编译停止!

elseprintf("

词法分析成功!

if(es==0)

{

es=TESTparse();

//调语法分析

if(es==0)printf("

elseprintf("

语法分析错误\n"

}

//下面定义保留字表,为简化程序,使用字符指针数组保存所有的保留字

//如果想增加保留字,可继续添加,并修改保存保留字数目keywordSum

#definekeywordSum8

char*keyword[keyw

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2