《编译?原理》
课程设?计性实验报告
课程?题目: ? ?LR(0)分析法
姓? 名: ? ? 钟继文
?专业班级: ? 计算机科?学与技术(1)班
指?导老师: ? ? 孙长圣老师
学 ? 号: ? ? 0019
报告日期:? ? 2015?年6月7日
编译原?理语法分析实验报告
?
实验内容
利?用C语言编写一个程序?,对字符串进行语法分?析,了解掌握实验的原?理及方法,要求该文法?为LR(0)文法。
?
实验目的
? LR(K?)分析方法是1965?年Knuth提出的,?括号中的K表示向右查?看输入串符号的个数。?对于大多数用无二义性?上下文无关文法描述的?语言都可以用相应的L?R分析器进行识别,而?且这种方法还具有分析?速度快,能准确、及时?地指出出错位置。它的?主要缺点是对于一个实?用语言文法的分析器的?构造工作量相当大,K?愈大构造愈复杂,实现?相当困难。
LR分析?法是一种自底向上分析?方法。它的分析过程是?一种规范归约过程,规?范归约是规范推导的逆?过程。规范推导是最右?推导,规范归约是其逆?过程,则是最左归约。? LR分析法的可归约?串是当前句型的句柄,?即最左直接短语。
对?于大多数用无二义性上?下文无关文法描述的语?言都可以用相应的LR?分析器进行识别,而且?这种方法还具有分析速?度快,能准确、及时地?指出出错位置。
本实?验通过设计、调试一个?简单的的LR分析器,?实现对词法分析程序所?提供的单词序列进行语?法检查和结构分析,进?一步掌握常用的语法分?析方法。
实?验功能
通过?定义的文法G,G是一?个LR(0)文法,输?入源码,能够基本判别?出该源码是否是正确的?。如果是正确的则接收?,反之,如果是错误的?则显示错误。
?
?实验步骤
类ALGO?LF的文法
-> ?
-?>
?-> ;
->b?egin
->?;d
? ->s;end
<?Compound T?ail> ->s;<?Compound T?ail>
-> b?egin ?
用小写字母表示终结?符,大写字母表示非终?结符
b:begin? d:d ?s:s e:e?nd
P:
B:
S:
H:?
T:?
则文法为:
1 ?P->B ? 5 ?H->H;d
2 ? P->S ? 6 ? T->se
3? B->H;T ? 7? T->s;T
?4 H->bd ? ?8 S->bT
拓?广后为G’,增加产生?式 P’->p
1 ? P’->P
?2 P->B
3 ? P->S
4 B?->H;T
5 H?->bd
6 H-?>H;d
7 T-?>se
8 T->?s;T
S->bT
?
3.项目集规范族?:
P’->·?P P’-?>P·
P->?·B P-?>B·
P->?·S P-?>S·
B->?·H;T B-?>H·;T B?->H;·T ? B->H;T·
? H->·bd ? H->b·d? H->bd? ·
H->·?H;d H->?H·;d H-?>H;·d ? H->H;d·
? T->·se ? T->s·e? T->se?·
T->·s?;T T-?>s·;T T?->s;·T ? T->s;T·?
S->·bT ? S->b·T ? S->bT ·
?4.LR(0)的分?析表
(s表示移进,?r表示归约)
状态
?ACTION
GOT?O
b
d
?s
e
;
#
P
?B
S
H
T
0?
S12
?1
2
3
4
?1
acc?
2
r?2
r2