自底向上分析——LR方法

来源:互联网 发布:泰国移动4g网络制式 编辑:程序博客网 时间:2024/05/21 08:56

自底向上分析——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分析法通常要求文法的开始符不出现在任何产生式的右端。若不满足要求,则只需增加一条产生式:ZSZS#,其中Z是新开始符,S是原开始符。这样扩充后的文法被称为原文法的增广文法。

基本概念

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

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

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

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

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

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

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

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

活前缀

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

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

  1. α不含简单短语;

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

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

原创粉丝点击