📜  LR解析器

📅  最后修改于: 2021-07-05 08:41:08             🧑  作者: Mango

在本文中,我们将讨论LR解析器,并对其进行概述,然后将讨论该算法。另外,我们将讨论解析表和LR解析器的工作图。让我们一一讨论。

左心室 解析器
LR解析器是一种无上下文语法的自底向上解析器,通常由计算机编程语言编译器和其他相关工具使用。 LR解析器从左到右读取它们的输入,并产生最右边的派生。之所以称为自下而上的解析器,是因为它尝试通过从叶子开始构建来减少顶级语法产生。在实际中,LR解析器是所有确定性解析器中最强大的解析器。

LR解析器的描述:
术语解析器LR(k)解析器,这里L表示从左到右扫描,R表示反向最右的派生,k表示制作解析器时使用的未使用的“向前看”输入符号的数量决定。通常,k为1,通常会省略。如果上下文无关文法存在LR(k)解析器,则称为LR(k)。这首先减少了左侧的令牌顺序。但是,当我们从上方阅读时,推导顺序首先扩展到非终结。

  1. 堆栈是空的,我们希望将规则减少S’→S $。
  2. 用一个 ”。”规则中的表示堆栈中已经有多少个规则。
  3. 点项目,或简称为项目,是带有点的生产规则,该点指示到目前为止已识别出多少RHS。关闭项目用于查看可以使用哪些生产规则来扩展当前结构。计算公式如下:

LR解析器的规则:
LR解析器的规则如下。

  1. 给定语法规则的第一项将自身添加为第一封闭集。
  2. 如果对象存在于A→α形式的闭包中。 β。 γ(在该符号之后的下一个符号是非终止符号的情况下),在点的第一项之前添加该符号的生产规则。
  3. 对(B)下添加的新项目重复步骤(B)和(C)。

LR解析器算法:
LR解析算法对于所有解析器都是相同的,但是每个解析器的解析表都不同。它包括以下组件。

  1. 输入缓冲器–
    它包含给定的字符串,并以$符号结尾。
  2. 堆 –
    状态符号和当前输入符号的组合用于引用解析表,以便做出解析决定。

解析表
解析表分为两部分-动作表和跳转表。操作表给出了一个语法规则,以在输入流中实现给定的当前状态和当前终端。动作表中有以下四种情况。

  1. 移位动作-在移位动作中,当前终端从输入流中删除,状态n被压入堆栈,它变为新的当前状态。
  2. 减少动作-数字m 被写入输出流。
  3. 规则m左侧提到的符号m表示状态已从堆栈中删除。
  4. 规则m左侧提到的符号m表示,在goto表中查找了一个新状态,并通过将其压入堆栈来使其成为新的当前状态。
An accept - the string is accepted
No action - a syntax error is reported

笔记 –
转到表指示应进行的状态。

LR解析器图: