教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 教育文库 >

编译原理实验报告LR(1)分析法

来源:网络收集 时间:2026-07-25
导读: 编译原理实验报告LR(1)分析法 河南工业大学实验报告 课 程 编译原理 实验名称 实验四 LR(1)分析法 一.实验目的 1.掌握LR(1)分析法的基本原理; 2.掌握LR(1)分析表的构造方法; 3.掌握LR(1)驱动程序的构造方法。 二.实验内容及要求 根据某一文法编制调试LR

编译原理实验报告LR(1)分析法

河南工业大学实验报告

课 程 编译原理 实验名称 实验四 LR(1)分析法

一.实验目的

1.掌握LR(1)分析法的基本原理;

2.掌握LR(1)分析表的构造方法;

3.掌握LR(1)驱动程序的构造方法。

二.实验内容及要求

根据某一文法编制调试LR(1)分析程序,以便对任意输入的符号串进行分析。本次实验的目的主要是加深对LR(1)分析法的理解。

对下列文法,用LR(1)分析法对任意输入的符号串进行分析: (0)E->S

(1)S->BB

(2)B->aB

(3)B->b

程序输入一以#结束的符号串(包括a、b、#),如:abb#。输出过程如下:

步骤 状态栈 符号栈 ACTION GOTO 输入串

1 0 # abb# S3 ... ... ... ... ... ...

三.实验过程及结果

(说明:实验结果可以是运行画面的抓屏,抓屏图片要尽可能的小。) 实验代码:

#include<stdio.h>

#include<string.h>

char *action[10][3]={"S3#","S4#",NULL, /*ACTION表*/ NULL,NULL,"acc",

"S6#","S7#",NULL,

"S3#","S4#",NULL,

"r3#","r3#",NULL,

NULL,NULL,"r1#",

"S6#","S7#",NULL,

NULL,NULL,"r3#",

"r2#","r2#",NULL,

NULL,NULL,"r2#"};

int goto1[10][2]={

1,2, /*GOTO表*/

编译原理实验报告LR(1)分析法

0,0,

0,5,

0,8,

0,0,

0,0,

0,9,

0,0,

0,0,

0,0};

char vt[3]={'a','b','#'}; /*存放非终结符*/ char vn[2]={'S','B'}; /*存放终结符*/ char *LR[4]={"E->S#","S->BB#","B->aB#","B->b#"};/*存放产生式*/

int a[10];

char b[10],c[10],c1;

int top1,top2,top3,top,m,n;

void main(){

int g,h,i,j,k,l,p,y,z,count;

char x,copy[10],copy1[10];

top1=0;top2=0;top3=0;top=0;

a[0]=0;y=a[0];b[0]='#';

count=0;z=0;

printf("请输入表达式\n");

/*输出状态栈、输出符号栈、输出输入串*/

do{

scanf("%c",&c1);

c[top3]=c1;

top3=top3+1;

}while(c1!='#');

printf("步骤\t状态栈\t\t符号栈\t\t输入串\t\tACTION\tGOTO\n"); do{

y=z;m=0;n=0; /*y,z指向状态栈栈顶*/ g=top;j=0;k=0;

x=c[top];

count++;

printf("%d\t",count);

while(m<=top1){ /*输出状态栈*/ printf("%d",a[m]);

m=m+1;

}

printf("\t\t");

while(n<=top2){ /*输出符号栈*/

编译原理实验报告LR(1)分析法

n=n+1;

}

printf("\t\t");

while(g<=top3){ /*输出输入串*/ printf("%c",c[g]);

g=g+1;

}

printf("\t\t");

while(x!=vt[j]&&j<=2) j++;

if(j==2&&x!=vt[j]){

printf("error\n");

return;

}

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

printf("error\n");

return;

}

else

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

if(copy[0]=='S'){

z=copy[1]-'0';

top1=top1+1;

top2=top2+1;

a[top1]=z;

b[top2]=x;

top=top+1;

i=0;

while(copy[i]!='#'){

printf("%c",copy[i]);

i++;

}

printf("\n");

}

if(copy[0]=='r'){

i=0;

while(copy[i]!='#'){

printf("%c",copy[i]);

i++;

}

h=copy[1]-'0';

strcpy(copy1,LR[h]);

while(copy1[0]!=vn[k]) k++; /*处理移进*/ /*处理归约*/

编译原理实验报告LR(1)分析法

top1=top1-l+1;

top2=top2-l+1;

y=a[top1-1];

p=goto1[y][k];

a[top1]=p;

b[top2]=copy1[0]; z=p;

printf("\t");

printf("%d\n",p);

} }

while(action[y][j]!="acc"); printf("acc\n");

getchar();

}

截屏如下:

四.实验中的问题及心得

同前面一样。实验加深了对LR(1)的理解,再接再厉吧

…… 此处隐藏:270字,全部文档内容请下载后查看。喜欢就下载吧 ……
编译原理实验报告LR(1)分析法.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/108438.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)