编译原理实验报告LR(1)分析法
更新时间:2023-08-28 02:49:01 阅读量: 教育文库 文档下载
编译原理实验报告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)的理解,再接再厉吧
正在阅读:
编译原理实验报告LR(1)分析法08-28
《乌丢丢的奇遇》测试题08-20
2012年1月礼仪学试题和答案12-06
小班语言活动05-27
学习实践科学发展观活动分析检查阶段总结05-08
应用统计学课后习题答案06-23
工程光学第二章207-27
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 分析法
- 编译
- 原理
- 实验
- 报告
- LR
- 《孩子,我为什么打你》阅读答案
- 在用塔式起重机安全状态鉴定检测工作程序
- 大写中文数字的半自动和全自动输入方式
- vray中文手册
- 医疗救护基础知识
- 中国共产党的领导是中国特色社会主义最本质特征
- 大学英语精读3(第三版)英汉互译Unit08
- 《范进中举》教案设计
- 高三一轮复习辅导与测试:第1部分-必修5-Unit 4
- 【题库】2018年临床执业医师泌尿系统:尿路感染
- 如何做好新形势下基层企业的思想政治工作
- 作风整顿简报第一期
- 实验15 WEB服务器配置
- 附表A1建筑行业劳动者接触的主要职业病危害因素
- 建筑智能化工程施工管理研究
- 我的中国梦手抄报word版电子小报模板
- 德牧的知识6
- 第7章 switch语句的应用
- 医院医疗服务项目成本核算暂行办法1007
- 如何发展农业保险