编译原理及实现附录C语法分析程序代码包含词法分析代码Word文档格式.docx

上传人:b****2 文档编号:5631278 上传时间:2023-05-05 格式:DOCX 页数:22 大小:18.62KB
下载 相关 举报
编译原理及实现附录C语法分析程序代码包含词法分析代码Word文档格式.docx_第1页
第1页 / 共22页
编译原理及实现附录C语法分析程序代码包含词法分析代码Word文档格式.docx_第2页
第2页 / 共22页
编译原理及实现附录C语法分析程序代码包含词法分析代码Word文档格式.docx_第3页
第3页 / 共22页
编译原理及实现附录C语法分析程序代码包含词法分析代码Word文档格式.docx_第4页
第4页 / 共22页
编译原理及实现附录C语法分析程序代码包含词法分析代码Word文档格式.docx_第5页
第5页 / 共22页
编译原理及实现附录C语法分析程序代码包含词法分析代码Word文档格式.docx_第6页
第6页 / 共22页
编译原理及实现附录C语法分析程序代码包含词法分析代码Word文档格式.docx_第7页
第7页 / 共22页
编译原理及实现附录C语法分析程序代码包含词法分析代码Word文档格式.docx_第8页
第8页 / 共22页
编译原理及实现附录C语法分析程序代码包含词法分析代码Word文档格式.docx_第9页
第9页 / 共22页
编译原理及实现附录C语法分析程序代码包含词法分析代码Word文档格式.docx_第10页
第10页 / 共22页
编译原理及实现附录C语法分析程序代码包含词法分析代码Word文档格式.docx_第11页
第11页 / 共22页
编译原理及实现附录C语法分析程序代码包含词法分析代码Word文档格式.docx_第12页
第12页 / 共22页
编译原理及实现附录C语法分析程序代码包含词法分析代码Word文档格式.docx_第13页
第13页 / 共22页
编译原理及实现附录C语法分析程序代码包含词法分析代码Word文档格式.docx_第14页
第14页 / 共22页
编译原理及实现附录C语法分析程序代码包含词法分析代码Word文档格式.docx_第15页
第15页 / 共22页
编译原理及实现附录C语法分析程序代码包含词法分析代码Word文档格式.docx_第16页
第16页 / 共22页
编译原理及实现附录C语法分析程序代码包含词法分析代码Word文档格式.docx_第17页
第17页 / 共22页
编译原理及实现附录C语法分析程序代码包含词法分析代码Word文档格式.docx_第18页
第18页 / 共22页
编译原理及实现附录C语法分析程序代码包含词法分析代码Word文档格式.docx_第19页
第19页 / 共22页
编译原理及实现附录C语法分析程序代码包含词法分析代码Word文档格式.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

编译原理及实现附录C语法分析程序代码包含词法分析代码Word文档格式.docx

《编译原理及实现附录C语法分析程序代码包含词法分析代码Word文档格式.docx》由会员分享,可在线阅读,更多相关《编译原理及实现附录C语法分析程序代码包含词法分析代码Word文档格式.docx(22页珍藏版)》请在冰点文库上搜索。

编译原理及实现附录C语法分析程序代码包含词法分析代码Word文档格式.docx

printf("

\n打开文件%s错误!

\n"

Scanout);

es=10;

}

if(es==0)es=program();

printf("

=====语法分析结果!

========\n"

);

switch(es)

case0:

语法分析成功!

\n"

break;

case10:

printf("

打开文件%s失败!

Scanout);

case1:

缺少{!

break;

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;

return(es);

=<

声明语句>

1<

//<

=

declaration_stat>

|e//3tJ^l<

*{<

intdeclaration_list()

intes=0;

while(strcmp(token,"

int"

)==0)

es=declaration_stat();

if(es>

0)return(es);

=ID<

变量>

;

=intID;

intdeclaration_stat()

printf("

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>

=<

statement>

|e//改成<

8={<

intstatement_list()

while(strcmp(token,"

))

es=statement();

if(es>

0)return(es);

if语句>

|<

while參语句>

for语句>

丨<

write语句>

resd语句>

丨<

复合语句>

表达式语句>

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

while语句^>

for"

)==0)es=for_stat();

for语句>

resd"

)==0)es=read_stat();

readS^J>

write"

)==0)es=write_stat();

writeS^I>

)==0)es=compound_stat();

(strcmp(token,"

)==0||strcmp(token,"

NUM"

("

)==0))es=expression_stat();

=if(<

表达式>

)<

4136<

]

=if{<

expression>

)<

statement>

[else<

]

intif_stat()

//if

("

))if(es>

0)return(es=5);

//少左括号

es=expression();

0)return(es=4);

//少分号

)"

0)return(es=6);

//少右括号

es=statement();

else"

)==0)//else部分处理

fscanf(fp,"

return(es);

while语句>

=while(<

=while(<

expr>

)<

intwhile_stat()

if(strcmp(token,"

0)return(es=5);

//少左括号

token1);

es=expression();

if(es>

)"

0)return(es=6);

es=statement();

for语句>

=for(<

;

=for(<

intfor_stat()

%s.%s\n"

write_语句>

=write<

write_stat>

=write<

intwrite_stat()

token,&

token1);

if(es>

0)return(es);

}

resci_j5^>

^找日化变量>

resd_stat>

=resdID;

intread_stat()

0)return(es=3);

//例示识符

0)return(es=4);

//少分号

fscanf(fp,"

-(<

compound_stat>

={<

}一:

i>

-,:

-^-1

intcompound_stat()//复合语句函数

es=statement_list();

人:

丨;

expressgLon_stat>

|;

intexpression_stat()

fscanf(fp,"

printf("

token,token1);

if(es==0&

strcmp(token,"

fscanf(fp,"

printf("

return(es);

else

es=4;

标识符>

布尔表达式>

=ID==<

bool_expr>

intexpression()

intes=0,filesdd;

chartoken2[20],token3[40];

)==0)

filesdd=ftell(fp);

//记住当前文件位置

%s%sVi"

token2,&

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);

elsees=bool_expr();

return(es);

—〈算术表达式>

算术表达式>

(>

彳>

=丨<

=|==f:

!

=)

^-m.c'

.j

additive_expr>

additive_expr>

f>

=|<

=|==|!

*)<

intbool_expr()

es=additive_expr();

>

)==0||strcmp(token,"

)==0||strcmp(token,"

)==0||strcmp(token,"

)==0||strcmp(token,"

=="

)==0||strcmp(token,"

="

es=additive_expr();

项>

{(+|-)<

term>

{(+|-)<

intadditive_expr()

es=term();

+"

-"

es=term();

//<

项>

48<

因子>

|(*|/)<

)>

*<

factor>

{(*(/)<

factor>

intterm()

es=factor();

while(strcmp(token,"

*"

)==0||strcmp(token,"

/"

es=factor();

if(es>

因子>

(<

无符号整数>

=(<

)丨ID|NUM

intfactor()

es=expression();

if(strcmp(token,"

))return(es=6);

if(strcmp(token,"

token1)

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

当前位置:首页 > 工程科技 > 能源化工

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

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