完整word版LR0分析器实验报告.docx
- 文档编号:7343323
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:7
- 大小:208.48KB
完整word版LR0分析器实验报告.docx
《完整word版LR0分析器实验报告.docx》由会员分享,可在线阅读,更多相关《完整word版LR0分析器实验报告.docx(7页珍藏版)》请在冰豆网上搜索。
完整word版LR0分析器实验报告
《编译原理》
课程设计性实验报告
课程题目:
LR(0)分析法
姓名:
钟继文
专业班级:
计算机科学与技术
(1)班
指导老师:
孙长圣老师
学号:
110920120019
报告日期:
2015年6月7日
编译原理语法分析实验报告
1、实验内容
利用C语言编写一个程序,对字符串进行语法分析,了解掌握实验的原理及方法,要求该文法为LR(0)文法。
2、实验目的
LR(K)分析方法是1965年Knuth提出的,括号中的K表示向右查看输入串符号的个数。
对于大多数用无二义性上下文无关文法描述的语言都可以用相应的LR分析器进行识别,而且这种方法还具有分析速度快,能准确、及时地指出出错位置。
它的主要缺点是对于一个实用语言文法的分析器的构造工作量相当大,K愈大构造愈复杂,实现相当困难。
LR分析法是一种自底向上分析方法。
它的分析过程是一种规范归约过程,规范归约是规范推导的逆过程。
规范推导是最右推导,规范归约是其逆过程,则是最左归约。
LR分析法的可归约串是当前句型的句柄,即最左直接短语。
对于大多数用无二义性上下文无关文法描述的语言都可以用相应的LR分析器进行识别,而且这种方法还具有分析速度快,能准确、及时地指出出错位置。
本实验通过设计、调试一个简单的的LR分析器,实现对词法分析程序所提供的单词序列进行语法检查和结构分析,进一步掌握常用的语法分析方法。
3、实验功能
通过定义的文法G,G是一个LR(0)文法,输入源码,能够基本判别出该源码是否是正确的。
如果是正确的则接收,反之,如果是错误的则显示错误。
4、
实验步骤
1.类ALGOLF的文法
用小写字母表示终结符,大写字母表示非终结符
b:
begind:
ds:
se:
end
P:
B:
S:
H:
T:
则文法为:
1P->B5H->H;d
2P->S6T->se
3B->H;T7T->s;T
4H->bd8S->bT
2.拓广后为G’,增加产生式P’->p
1P’->P
2P->B
3P->S
4B->H;T
5H->bd
6H->H;d
7T->se
8T->s;T
9S->bT
3.项目集规范族:
P’->·PP’->P·
P->·BP->B·
P->·SP->S·
B->·H;TB->H·;TB->H;·TB->H;T·
H->·bdH->b·dH->bd·
H->·H;dH->H·;dH->H;·dH->H;d·
T->·seT->s·eT->se·
T->·s;TT->s·;TT->s;·TT->s;T·
S->·bTS->b·TS->bT·
4.LR(0)的分析表
(s表示移进,r表示归约)
状态
ACTION
GOTO
b
d
s
e
;
#
P
B
S
H
T
0
S12
1
2
3
4
1
acc
2
r2
r2
r2
r2
r2
r2
3
r3
r3
r3
r3
r3
r3
4
S5
5
S7
S8
6
r4
r4
r4
r4
r4
r4
7
r6
r6
r6
r6
r6
r6
8
S9
S10
9
r7
r7
r7
r7
r7
r7
10
S8
11
11
r8
r8
r8
r8
r8
r8
12
S14
S8
13
13
r9
r9
r9
r9
r9
r9
14
r5
r5
r5
r5
r5
r5
6.部分代码
⏹界面(为了便于客户体验)
intmenu()
{
intn;
printf("=======================\n");
printf("-------欢迎使用--------\n");
printf("1.显示文法信息\n");
printf("2.符号串判定\n");
printf("3.退出\n");
printf("-----------------------\n");
printf("=======================\n");
printf("请选择你要执行的内容:
\n");
scanf("%d",&n);
getchar();
returnn;
}
在main程序中可以直接调用。
voidmain()
{
intt=1,n;
charch;
while(t)
{
n=menu();
}
⏹分析过程的实现
voidActionTable(intsta,charsymb,intcol)
{//statu用于状态栈,sym用于符号栈
if(sta==1&&col==5)//sta[1]col[5]中存放ACC,即表
//示所输入的源码是该文法的语法。
{
printf("\t接收\n");
IsAccept=1;//IsAccept为void函数,如果
//源码判断成功,则显示接收,
//将IsAccept赋值为1,方便退出。
return;//ActionTable是void类型的
}
if(act[sta].st[col]!
=0)//存放移进操作
{
//如果进行源码判断时,要进行移进操作,则直接将进行相应的栈操作
printf("\t移进\n");
sta[++sta_Index]=act[sta].st[col];
symbol[++mark_Index]=symb;
exp_top++;
}elseif(act[sta].re[col]!
=0)//存放归约操作
{
printf("\t归约\n");
Reduce(sta,symb,col);//Reduce为void函数,用来对进行归
//约的项进行相应操作,使用栈来进行
//处理。
}else
{
printf("\t错误\n");
getchar();//从stdio流中读字符用
}
}
⏹使用到的头文件
#include
#include
⏹实验结果(截图)
5、实验总结
通过这次LR(0)分析器的实验,实现对词法分析程序所提供的单词序列进行语法检查和结构分析,进一步掌握了LR语法分析的方法。
对于LR(0)方法有了更深刻的了解,不蛋蛋只是纸上谈兵,实验的完成,也就是实践的过程。
虽然在这个实践的过程中遇到了许多的困难,但是在老师和同学的帮助下,最终还是将实验初步完成。
完成的LR(0)分析器只能对于一个特定的文法进行判断,完整的是要求能够对于任一一中LR(0)文法都能够进行判断,在这方面上还需要对程序有进一步的了解才能够最终实现,通过后续的努力,终能够将LR(0)分析器完整实现。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整 word LR0 分析器 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)