LR分析程序Word格式文档下载.docx

上传人:b****3 文档编号:6939811 上传时间:2023-05-07 格式:DOCX 页数:7 大小:16.20KB
下载 相关 举报
LR分析程序Word格式文档下载.docx_第1页
第1页 / 共7页
LR分析程序Word格式文档下载.docx_第2页
第2页 / 共7页
LR分析程序Word格式文档下载.docx_第3页
第3页 / 共7页
LR分析程序Word格式文档下载.docx_第4页
第4页 / 共7页
LR分析程序Word格式文档下载.docx_第5页
第5页 / 共7页
LR分析程序Word格式文档下载.docx_第6页
第6页 / 共7页
LR分析程序Word格式文档下载.docx_第7页
第7页 / 共7页
亲,该文档总共7页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

LR分析程序Word格式文档下载.docx

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

LR分析程序Word格式文档下载.docx

当在栈顶形成句柄时,则归约为相应的非终结符A,即文法中有A-B的产生式,若B的长度为R(即|B|=R),则从状态栈和文法符号栈中自顶向下去掉R个符号,即栈指针SP减去R,并把A移入文法符号栈内,j=GOTO[i,A]移进状态栈,其中i为修改指针后的栈顶状态。

(3)接受acc:

当归约到文法符号栈中只剩文法的开始符号S时,并且输入符号串已结束即当前输入符是'

#'

,则为分析成功。

(4)报错:

当遇到状态栈顶为某一状态下出现不该遇到的文法符号时,则报错,说明输入端不是该文法能接受的符号串。

2)、实验过程

(1):

数据结构:

动作表(ACTION)和状态转换(GOTO)表用二维数组表示.

(2)).使用文法

E->

E+T

T

T->

T*F

F

F->

(E)

i

3)程序思路

(1)建立LR分析表

(2)控制部分:

从键盘输入一个表达式符号串;

利用LR分析算法进行表达式处理:

根据LR分析表对表达式符号串进行堆栈(或其他)操作,输出分析结果,如果遇到错误则显示错误信息。

(3)主函数:

从键盘输入一个表达式符号串进行识别;

参考程序

#include<

stdio.h>

string.h>

char*action[12][6]={"

S5#"

NULL,NULL,"

S4#"

NULL,NULL,/*ACTION表*/

NULL,"

S6#"

NULL,NULL,NULL,"

acc"

NULL,"

r2#"

"

S7#"

NULL,"

r4#"

"

NULL,NULL,

r6#"

S11#"

NULL,

r1#"

r3#"

r5#"

};

intgoto1[12][3]={1,2,3,/*GOTO表*/

0,0,0,

0,0,0,

8,2,3,

0,9,3,

0,0,10,

0,0,0};

charvt[6]={'

i'

'

+'

*'

('

)'

/*存放终结符*/

charvn[3]={'

E'

T'

F'

/*存放非终结符*/

char*LR[7]={"

S->

E#"

E+T#"

T#"

T*F#"

F#"

(E)#"

i#"

/*存放产生式*/

inta[10];

charb[10],c[10],c1;

inttop,m,n;

intjudge()

{intg,h,i,j,k,l,p,y,z,count;

charx,copy[10],copy1[10];

length;

top=0;

a[0]=0;

y=a[0];

b[0]='

;

count=0;

z=0;

printf("

步骤\t状态栈\t\t符号栈\t\t输入串\t\tACTION\tGOTO\n"

);

do{

y=z;

/*y,z指向状态栈栈顶*/

g=top;

k=0;

x=c[top];

count++;

printf("

%d\t"

count);

m=0;

while(m<

=top){/*输出状态栈*/

printf("

%d"

a[m]);

m=m+1;

}

\t\t"

n=0;

while(n<

=top){/*输出符号栈*/

%c"

b[n]);

n=n+1;

while(g<

=length){/*输出输入串*/

c[g]);

g=g+1;

j=0;

while(j<

6&

&

x!

=vt[j])j++;

if(j>

=6){

error\n"

return0;

if(action[y][j]==NULL){

return0;

strcpy(copy,action[y][j]);

if(copy[0]=='

a'

)return1;

S'

){/*处理移进*/

z=copy[1]-'

0'

if(copy[2]!

='

)z=z*10+copy[2]-'

top=top+1;

a[top]=z;

b[top]=x;

i=0;

while(copy[i]!

){

printf("

copy[i]);

i++;

}

\n"

r'

){/*处理归约*/

h=copy[1]-'

strcpy(copy1,LR[h]);

while(copy1[0]!

=vn[k])k++;

l=strlen(LR[h])-4;

top=top-l+1;

y=a[top-1];

p=goto1[y][k];

a[top]=p;

b[top]=copy1[0];

z=p;

\t"

%d\n"

p);

}while

(1);

}

voidmain(){

inti;

length=0;

请输入表达式\n"

scanf("

&

c1);

c[length]=c1;

length=length+1;

}while(c1!

i=judge();

if(i==1)printf("

acc\n"

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

当前位置:首页 > 解决方案 > 学习计划

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

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