编译原理课程设计理工Word文件下载.docx

上传人:b****1 文档编号:13288009 上传时间:2022-10-09 格式:DOCX 页数:18 大小:112.79KB
下载 相关 举报
编译原理课程设计理工Word文件下载.docx_第1页
第1页 / 共18页
编译原理课程设计理工Word文件下载.docx_第2页
第2页 / 共18页
编译原理课程设计理工Word文件下载.docx_第3页
第3页 / 共18页
编译原理课程设计理工Word文件下载.docx_第4页
第4页 / 共18页
编译原理课程设计理工Word文件下载.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

编译原理课程设计理工Word文件下载.docx

《编译原理课程设计理工Word文件下载.docx》由会员分享,可在线阅读,更多相关《编译原理课程设计理工Word文件下载.docx(18页珍藏版)》请在冰豆网上搜索。

编译原理课程设计理工Word文件下载.docx

⑸<

项>

{+<

|-<

⑹<

因子>

{*<

|/<

⑺<

=ID|NUM|(<

2.2要求说明

输入单词串,以“#”结束,如果是文法正确的句子,则输出成功信息,打印“success”,否则输出“error”。

例如:

输入begina:

=9;

x:

=2*3;

b:

=a+xend#

输出success!

输入x:

=a+b*cend#

输出error

2.3语法分析程序的酸法思想

(1)主程序示意图如图2-1所示。

图2-1语法分析主程序示意图

(2)递归下降分析程序示意图如图2-2所示。

(3)语句串分析过程示意图如图2-3所示。

图2-3语句串分析示意图

图2-2递归下降分析程序示意图

(4)statement语句分析程序流程如图2-4、2-5、2-6、2-7所示。

否是

图2-4statement语句分析函数示意图图2-5expression表达式分析函数示意图

否否

图2-6term分析函数示意图

图2-7factor分析过程示意图

3.语法分析程序的C语言程序源代码

#include"

stdio.h"

string.h"

charprog[100],token[8],ch;

char*rwtab[6]={"

begin"

"

if"

then"

while"

do"

end"

};

intsyn,p,m,n,sum;

intkk;

factor();

expression();

yucu();

term();

statement();

lrparser();

scaner();

main(){ 

p=kk=0;

printf("

\npleaseinputastring(endwith'

#'

):

\n"

);

do 

{scanf("

%c"

&

ch);

prog[p++]=ch;

}while(ch!

='

p=0;

getch();

}lrparser(){ 

if(syn==1) 

{

/*读下一个单词符号*/ 

yucu();

/*调用yucu()函数;

*/ 

if(syn==6) 

{scaner();

if((syn==0)&

&

(kk==0))

printf("

success!

\n"

else{if(kk!

=1)printf("

thestringhaven'

tgota'

end'

!

kk=1;

else{printf("

haven'

begin'

kk=1;

return;

}yucu(){

/*调用函数statement();

while(syn==26) 

{

scaner();

if(syn!

=6)

return;

}statement(){if(syn==10) 

if(syn==18) 

expression();

else{printf("

thesing'

:

iswrong!

wrongsentence!

}expression(){term();

while((syn==13)||(syn==14)) 

term();

/*调用函数term();

}term(){factor();

while((syn==15)||(syn==16)) 

factor();

/*调用函数factor();

*/ 

}factor(){if((syn==10)||(syn==11))scaner();

elseif(syn==27) 

if(syn==28)

theerroron'

('

theexpressionerror!

scaner() 

sum=0;

for(m=0;

m<

8;

m++)token[m++]=NULL;

m=0;

ch=prog[p++];

while(ch=='

'

)ch=prog[p++];

if(((ch<

z'

)&

(ch>

a'

))||((ch<

Z'

A'

))) 

{while(((ch<

))||((ch>

0'

(ch<

9'

{token[m++]=ch;

p--;

syn=10;

token[m++]='

\0'

;

for(n=0;

n<

6;

n++) 

if(strcmp(token,rwtab[n])==0) 

{syn=n+1;

break;

elseif((ch>

)) 

{while((ch>

{sum=sum*10+ch-'

p--;

syn=11;

elseswitch(ch) 

{case'

'

m=0;

if(ch=='

>

) 

syn=21;

elseif(ch=='

syn=22;

else 

syn=20;

case'

{syn=24;

{syn=23;

{syn=18;

{syn=17;

+'

syn=13;

-'

syn=14;

*'

syn=15;

break;

/'

syn=16;

syn=27;

)'

syn=28;

syn=25;

syn=26;

syn=0;

default:

syn=-1;

}

4.结果分析

输入begina:

=a+xend#后输出success!

如图2-1所示:

图2-8

输入x:

=a+b*cend#后输出error如图2-2所示:

图2-9

5.总结

通过本次试验,了解了语法分析的运行过程,主程序大致流程为:

“置初值”调用scaner函数读下一个单词符号调用IrParse结束。

递归下降分析的大致流程为:

“先判断是否为begin”不是则“出错处理”,若是则“调用scaner函数”调用语句串分析函数“判断是否为end”不是则“出错处理”,若是则调用scaner函数“判断syn=0&

kk=0是否成立”成立则说明分析成功打印出来。

不成立则“出错处理”。

附录语义分析源程序

语义分析源程序

intsyn,p,m,n,sum,q;

struct{charresult1[8];

charag11[8];

charop1[8];

charag21[8];

}quad[20];

char*factor();

char*expression();

intyucu();

char*term();

intstatement();

intlrparser();

char*newtemp();

emit(char*result,char*ag1,char*op,char*ag2);

main()

{intj;

q=p=kk=0;

"

do

if(q>

19)printf("

tolongsentense!

elsefor(j=0;

j<

q;

j++)printf("

%s=%s%s%s\n\n"

quad[j].result1,quad[j].ag11,quad[j].op1,quad[j].ag21);

g

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

当前位置:首页 > 表格模板 > 书信模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1