LR语法分析器

LR语法分析器是一种自底向上的分析技术,适用于大多数上下文无关文法。它通过结合“历史”(分析栈)和“展望”(输入符号)信息,识别句柄并进行规范归约。LR分析器的核心是分析表,包括“动作”表和“状态转移”表,用于指导分析过程。LR(0)项目集族和LR(0)分析表的构造涉及LR项、状态转移和可行前缀的识别。在构造分析表时,通过非确定性有限自动机(NFA)和确定性有限自动机(DFA)转换来确定分析状态。
摘要由CSDN通过智能技术生成

1 LR语法分析器

本节介绍一个有效的自底向上的分析技术,可以用于一大类上下文无关文法的语法分析。这种技术叫做LR(k)分析法,其中L表示从左到右扫描输入串,R表示构造一个最右推导的逆过程,k指的是在决定语法分析动作时需要向前看的符号个数。(k)省略时,假设k是1。LR分析富有吸引力的原因有以下几点:

v LR语法分析器能识别几乎所有能用上下文无关文法描述的程序设计语言的结构。

v LR分析法是已知的最一般的无回溯移动归约语法分析法,而且可以和其它移动归约分析一样被有效地实现。

v LR分析法分析的文法类是预测分析法能分析的文法类的真超集。

v 在自左向右扫描输入符号串时,LR语法分析器能及时发现语法错误。

这种分析方法的主要缺点是,对典型的程序设计语言文法,手工构造LR语法分析器的工作量太大,需要专门的工具。

1.1 LR语法分析算法

规范归约(最左归约-最右推导的逆过程)的关键问题是寻找句柄。在一般的“移进-归约”过程中,当一串貌似句柄的符号串呈现于栈顶时,我们有什么方法可以确定他是否为相对于某一个产生式的句柄呢?LR分析的基本思想是,在规范归约过程中,一方面记住已移进和归约出的整个符号串,即记住“历史”,另一方面根据所用的产生式推测未来可能碰到的输入符号,即对未来进行“展望”。当一串貌似句柄的符号串呈现于分析栈的顶端时,我们希望能够根据所记载的“历史”和“展望”以及“现实”的输入符号等三方面的材料,来确定栈顶的符号串是否构成相对某一产生式的句柄。

从LR分析方法可以看出,其实现有一定的困难。作为归约过程的“历史”材料的积累虽不困难(实际上,这些材料都存在分析栈中),但是“展望”材料的汇集却是一件很不容易的事情。这种困难不是理论上的,而是实际实现上的。

后面所讨论的LR分析方法都是带有一定限制的。

一个LR分析器实质上十一个带先进后出内存(栈)的确定有限状态自动机。我们将把“历史”和“展望”材料综合的抽象成某些“状态”,存放在栈里。栈里的每个状态概括了从分析开始直到某一归约阶段的全部“历史”和“展望”资料。

LR分析器的每一步工作都是由栈顶状态和现行输入符号所唯一确定的。为了有助于明确归约手续,我们把已归约出的文法符号串也同时放在栈里。由此,可以看到栈的结构如下:


图表 41

栈的每一项内容包括状态S和文法符号X两部分。(S0 , $)为分析开始前预先放到栈里的初始状态和句子括号($句子$)。栈顶状态为Sm,符号串X1X2…Xm是至今

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值