预测分析法编译原理文档格式.doc

上传人:b****2 文档编号:13330950 上传时间:2022-10-09 格式:DOC 页数:5 大小:34KB
下载 相关 举报
预测分析法编译原理文档格式.doc_第1页
第1页 / 共5页
预测分析法编译原理文档格式.doc_第2页
第2页 / 共5页
预测分析法编译原理文档格式.doc_第3页
第3页 / 共5页
预测分析法编译原理文档格式.doc_第4页
第4页 / 共5页
预测分析法编译原理文档格式.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

预测分析法编译原理文档格式.doc

《预测分析法编译原理文档格式.doc》由会员分享,可在线阅读,更多相关《预测分析法编译原理文档格式.doc(5页珍藏版)》请在冰豆网上搜索。

预测分析法编译原理文档格式.doc

Step

Stack

String

Rule

1

#S

m+m*m#

AT

10

#TUm

m*m#

M匹配

2

#TA

A->

BU

11

#TU

*m#

U->

*BU

3

#TUB

B->

m

12

#TUB*

*匹配

4

13

m#

5

+m*m#

$

14

6

#T

T->

+AT

15

#

7

#TA+

+匹配

16

8

17

接受

9

五、提示

本实验重点有两个:

一是如何用适当的数据结构实现预测分析表存储和使用;

二是如何实现各规则右部串的逆序入栈处理。

建议:

使用结构体数组。

六、分析与讨论

1、若输入串不是指定文法的句子,会出现什么情况?

2、总结预测语法分析程序的设计和实现的一般方法。

代码:

#include<

stdio.h>

stdlib.h>

string.h>

windows.h>

structstack1

{

charstack[10];

}sta[][7]=

"

\0"

"

+"

*"

("

)"

m"

#"

S"

AT"

A"

BU"

T"

+AT"

$"

B"

(S)"

U"

*BU"

};

//structstack*head;

charstack_1[10]={'

\0'

},stack_2[10]={'

},stack_3[10]={'

inti,j,k,len_1,len_2,len_3,mark=0;

voidmain()

//voidc_stack();

voidanalyze_stack();

voidsurplus_str();

intrules();

//printf("

%s\t"

sta[0][1].stack);

//printf("

\n"

);

while

(1)

{

// system("

cls"

mark=0;

printf("

请输入串:

gets(stack_3);

if(stack_3[0]=='

0'

break;

stack_1[0]='

S'

;

len_3=strlen(stack_3);

if(stack_3[len_3-1]!

='

#'

printf("

字符串输入错误,字符串不以#号结束!

continue;

}

分析栈\t\t剩余串\t\t\t\t\t\t规则\n"

for(i=0;

i<

=100;

i++)

analyze_stack();

surplus_str();

rules();

if(mark==1)

break;

if(stack_1[0]=='

&

stack_3[0]=='

{

printf("

#\t\t#\t\t\t\t\t\t成功接受\n"

break;

}

}

voidanalyze_stack()//分析栈

#%-15s"

stack_1);

len_1=strlen(stack_1);

voidsurplus_str()//剩余串//注意拼写的正确性,写成surlpus_str()报错,unresolvedsxternalsymbol_surplus_str;

%-48s"

stack_3);

intrules()//所用规则

intp,q,h;

chartemp;

//printf("

%d"

len_1);

if(stack_1[len_1-1]==stack_3[0])

printf("

%c匹配\n"

stack_3[0]);

stack_1[len_1-1]='

for(h=1;

h<

=len_3-1;

h++)

stack_3[h-1]=stack_3[h];

stack_3[len_3-1]='

elseif(stack_1[len_1-1]<

'

A'

||stack_1[len_1-1]>

Z'

报错\n"

mark=1;

return0;

elseif(stack_1[len_1-1]>

stack_1[len_1-1]<

for(j=1;

j<

=5;

j++)

if(stack_1[len_1-1]==sta[j][0].stack[0])

{

p=j;

break;

}

if(j>

=6)

mark=1;

return0;

for(k=1;

k<

=6;

k++)

if(stack_3[0]==sta[0][k].stack[0])

q=k;

if(k>

=7)

if(sta[p][q].stack[0]=='

printf("

mark=1;

return0;

strcpy(stack_2,sta[p][q].stack);

len_2=strlen(stack_2);

%c->

%s\n"

stack_1[len_1-1],stack_2);

if(stack_2[0]=='

$'

else

for(h=0;

len_2/2;

temp=stack_2[h];

stack_2[h]=stack_2[len_2-1-h];

stack_2[len_2-1-h]=temp;

strcat(stack_1,stack_2);

return0;

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

当前位置:首页 > 人文社科 > 文学研究

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

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