自底向上分析——LR方法

自底向上分析——LR方法

LR(k)表示在分析时要求向前看k个符号(即看输入流的前k个符号),以便唯一地确定分析动作。LR(k)一词来自:Left-to-right parse,Rightmost-derivation,k-token lookahead。LR分析主要有LR(0)分析法,SLR(1)分析法,LR(1)分析法以及SALR(1)分析法。

LR方法的思想:从输入流依次把符号移入到符号栈中,直至栈顶部中出现一个句柄;之后对句柄进行规约,直至栈顶部中不出现句柄为止;再重复上述过程,直至最终规约为一个开始符,且输入流为空。注意:真正的LR分析器并不用符号栈,而是用状态栈。LR分析法的主要动作是移入归约

增广文法:为处理方便,LR分析法通常要求文法的开始符不出现在任何产生式的右端。若不满足要求,则只需增加一条产生式: ZS ZS #,其中Z是新开始符,S是原开始符。这样扩充后的文法被称为原文法的增广文法。

基本概念

归约顺序:一个句型可有多个简单短语,因此,归约顺序可有多种。LR分析法采用用的是从左到右,即每次归约最左简单短语(称为句柄)的办法。也就是说,从左到右地扫描输入串,并且一旦出现一个简单短语,就立即进行归约(否则会出现倒退进行归约的不合理的现象)。

短语:称句型 αηβ 中的 η 是一个短语,若有: SαAβ A+η ,其中S是文法的开始符。换句话说,称句型αηβ中的η是短语,如果存在一个句型αAβ, A+η

简单短语:称句型αηβ中的η是一个简单短语,若有 SαAβ Aβ

句柄:一个句型中可能有多个简单短语,而句柄是其中最左简单短语。是自底向上分析的核心动作归约的单位。

规范推导:称一个句型推导为规范推导,如果它是最右推导的。

规范句型:规范推导导出的句型。不一定每个句型都有规范推导。

规范归约:如果归约的是最左简单短语(句柄),则称其归约为规范归约(从左到右的归约)。规范推导和规范归约存在互逆的关系。

规范结论:如果给定句型是规范句型,则经规范归约后得到的仍是规范句型。

活前缀

规范前缀:称规范句型的前缀为规范前缀,如果其后部分不包含非终极符。显然,每个规范句型的前缀都是规范前缀。

活前缀:称一个规范前缀 α 为活前缀,如果包含以下任意条件:

  1. α 不含简单短语;

  2. α 含一个简单短语,但其后没有符号。

    活前缀的含义:它表示至今被处理的终极符串部分在语法上是正确的。活前缀在分析格局中的逻辑关系如下图所示。它表示符号栈内容是活前缀 α ,符号栈内容和输入串连起来恰好形成规范句型(如果输入串是正确句子)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值