第五章-自下而上分析

一:知识点

自下而上分析法是从输入串开始,逐步进行”规约“,直至规约到文法的开始符号;或者说,从语法树的末端开始,步步向上”规约“,直至根结。

【1】归约

1、短语:令G是一个文法,S是文法的开始符号,假定αβδ是文法G的一个句型,如果有S=*>αAδ,且S=+>β,则称β是句型αβδ相对于非终结符的短语。

2、直接短语:特别是,如果有A=>β,则称β是句型αβδ相对于规则的A->β的直接短语。

3、句柄:一个句型的最左直接短语称为该句型的句柄。

4、规范归约:假定α是文法G的一个句子,我们称序列αn,αn-1,......,α0是α的一个规范归约,如果此序列满足(1)α0=α;(2)α0为文法的开始符,即α0=S;(3)对任何i,0<i<=n,αi-1是从αi经把句柄替换为相应产生式的左部符号而得到的。从而可以得到,规范归约是关于α的一个最右推导的逆过程,因此,规范归约也成为最左归约。形式语言中。最右推导常被称为规范推导。

【2】算符优先分析

1、优先级关系:两个相继出现的终结符a和b(他们之间可能插有一个非终结符)的优先关系可能有三种:

①、a<•b(a的优先级低于b)②、a=•b(a的优先级等于b)③、a•>b(a的优先级高于b)【谁在前优先级低

注意:a<•b并不意味着b•>a,a=•b也不一定意味着b=•a。

2、算符文法:一个文法,如果它的任一产生式的右部都不含有两个相继(并列)的非终结符,即不含如下形式的产生式右部:...QR...,则我们称该文法为算符文法。

3、算符优先文法:如果一个算符文法G中的任何终结符对(a,b)至多只满足三种优先级关系之一,则称G为算符优先文法。

4、最左素短语:素短语是至少包含一个终结符,并且,除它自身之外不再含任何更小的素短语。那么最左素短语是指处于句型最左边的那个素短语。

【3】LR分析法

LR分析方法是一种自下而上的分析方法
LR分析法的归约过程是规范推导的逆过程,所以LR分析过程是一种规范归约过程
LR分析方法是一种适用于一大类上下文无关文法的分析方法
比较复杂,不适于用手工实现,可借助于YACC/bison实现
根据归约过程中向前看输入符号串中字符的个数,定义不同的LR(k)分析方法,通常,k=0,1
LR文法
 一个文法,如果能构造出一个所有条目都唯一的分析表。
LR(k)文法
 最多向前看K个的符号就可以决定动作的LR分析器所分析的文法成为LR(k)文法。
我们最感兴趣的是k=0,1
活前缀特点:
该前缀加上被分析串中未被分析的终结符,就可以构成一个规范句型
只要输入串的已扫描部分可归约成一个活前缀,意味着扫描过的部分没有错误
二、LR(0)项目集规范族的构造
1.构造G的拓广文法G’
 设S为文法G的开始符号,构造一个文法G’,它包含整个文法G,并且引进了一个不出现在G中的非终结符S,并加进一个新产生式S→S,这个S是G的开始符号。把G’成为G的拓广文法。(有一个仅含项目S→S. 的状态,这就是唯一的“接受”状态)
2.LR(0)分析表的ACTION和GOTO表的构造步骤
a)若项目A→•a属于Ik,且转换函数GO(Ik,a)=Ij,当a为终结符时 ,则置ACTION[k,a]为Sj。
b)若项目A→•属于Ik, 则对a为任何终结符或#′,置ACTION[k,a]=rj, j为产生式在文法G′中的编号。
c)若GO(Ik,A)=Ij,则置GOTO[k,A]=j,其中A为非终结符,j为某一状态号。
d)若项目S′→S•属于Ik,则置ACTION[k,#]= acc。
e)其它填上“报错标志”。
     LR(0)
  SLR(1):生成的LR(0)项目集如有冲突,则根据非终结符的FOLLOW集决定。
  LR(1)、LR(k):项目由心与向前搜索符组成,搜索符长度为1或k。

  LALR(1):对LR(1)项目集规范族合并同心集。

二,习题



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值