问题标签 [lr]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1382 浏览

parsing - 判断文法是否为 LR(0)

我是编译主题的新手,刚刚开始了自下而上解析的练习。

我一直坚持以下问题。

为以下语法构建一个 LR(0) 解析表:

在 E 上,DFA 中的下一个状态是:

从我目前了解到的情况来看,这不是 SR 冲突吗?因为解析器不知道是减少还是移位,因为它没有前瞻变量?所以这不应该是 LR(0) 语法吗?

但是我正在阅读的 PDF 已经构建了 LR(0) 表。那么PDF中有错误还是我在理解这个概念的地方出错了?

0 投票
1 回答
56 浏览

parsing - 关于 LR 解析器的问题

  1. 与其说“最右推导”,不如说“最左归约”?他们的意思是一样的吗?我读起来非常困惑。

  2. 什么是闭包集,它在解析过程中如何发挥作用?我在互联网上找到的每套讲义都假设我已经知道它是什么以及它做了什么。

0 投票
1 回答
133 浏览

parsing - LR Parsing 中的归约和 GOTO 可以处于一种状态吗?

在下面的示例中,很明显,当您想要通过 状态0进入状态3T,您将面临一种状态的还原和正常状态。
老实说,我以前没有看到这一点。这就是我问的原因。

这可能吗?我应该继续减少吗?或者我错了吗?

在此处输入图像描述

如果需要,这里是语法:

E ---> E+T | T
T ---> T * F | F
F ---> (E) | ID

0 投票
2 回答
845 浏览

parsing - LR(1) 解析器状态大小仍然是个问题?

从历史上看,LALR(1) 解析器优于 LR(1) 解析器,因为 LR(1) 解析器生成的大量状态需要资源。很难相信这仍然是当今计算环境中的一个问题。由于 LALR 语法是 LR 语法的适当子集,现在仍然是这种情况还是现代编译器是使用规范的 LR 解析器构建的?

0 投票
1 回答
53 浏览

parsing - 是否有处理 S/R 和 R/R 冲突的 LR(0) 解析算法?

如果存在冲突,LR(0) 动作表中的每个条目可能有一个班次和几个减少动作;在解析时,我想可以通过拆分堆栈来尝试所有操作。这种解析方式有名字吗?

0 投票
1 回答
260 浏览

parsing - LR(1) 解析器可以解析这个语法吗?

我想用 LR(1) 解析器解析以下 CFG:

S → A | 乙

A → ε | 一个

B → ε |B

LR(1) 解析器可以解析这个语法吗?如果是这样,你能告诉我解析表吗?如果不是,为什么不,你怎么知道?

0 投票
1 回答
145 浏览

compiler-construction - 关于 SLR、LALR 的语法和一些挑战

我知道:

如果一种语言可以由 LL(1) 语法生成,则称该语言为 LL(1)。可以证明 LL(1) 文法是

但我遇到了一个问题。

为什么语法

S-> aBDb

B -> 拉姆达

D-> dD | 拉姆达

为什么这个语法不是 LL(1) 也不是 SLR 也不是 LALR?谁能形容我?

0 投票
2 回答
176 浏览

parsing - 解析特殊情况

如果我理解正确,解析会将一系列符号变成一棵树。我的问题是,是否可以使用一些标准程序(LR、LL、PEG、..?)来解析以下两个示例,或者是否有必要手动编写专门的解析器?

  1. Python 源代码,即空格缩进的块

我想我在某处读到解析器跟踪前导空格的数量,并假装用大括号替换它们来分隔块。是因为标准解析技术不够强大还是出于性能原因而从根本上需要它?

  1. PNG图像格式,块以标头和块大小开头,之后是块的内容

内容可能包含类似于某些标头的字节,因此有必要“知道”接下来的 x 个字节不会被“解析”,即应该跳过它们。比如说,如何用 PEG 来表达这一点?换句话说,“右括号”由内容的长度表示。

0 投票
1 回答
162 浏览

parsing - 在 LR 解析中难以解决这个例子?

语法是:

S → ( L ) | id
L → S | ,小号

我正在尝试使用 LR 解析在给定语法上计算 CLOSURE 和 GOTO。

我们的老师解决了这个问题,但是第一步他没有使用第二个产生式L-->S|L,S,我不知道为什么。所以我解决了同样的例子,但在第一步中使用了完整的语法。
这样一来,原来的只是9步骤,而我的是10步骤。

我的问题是,我的解决方案是否正确?我想我做了LR(1)。


1)讲座中的解决方案-------- 2)我的解决方案。

在此处输入图像描述

0 投票
2 回答
3078 浏览

parsing - SLR(1) 和 LALR(1) 和减少

我很困惑 完全正确!!!!!!!

我在我的一篇教授笔记中阅读了以下示例。

1) 我们有一个 SLR(1) 语法 G,如下所示。我们使用 SLR(1) 解析器生成器并为 G 生成解析表 S。我们使用 LALR(1) 解析器生成器并为 G 生成解析表 L。

解:S中带有R(reduce)的元素数量多于L。

但在一个网站上我读到:

2) 假设 T1、T2 是用语法 G 的 SLR(1) 和 LALR(1) 创建的。如果 G 是 SLR(1) 语法,以下哪项是正确的?

a) T1 和 T2 没有任何区别。

b) T1 中非错误条目的总数低于 T2

c) T1 中的错误条目总数低于 T2

解决方案:

LALR(1) 算法生成的状态与 SLR(1) 算法完全相同,但它可以生成不同的动作;它能够解决比 SLR(1) 算法更多的冲突。但是,如果文法是 SLR(1),则两种算法将产生完全相同的机器(a 是正确的)。

任何人都可以为我描述其中哪些是真实的?

编辑:事实上,我的问题是为什么对于给定的 SLR(1) 语法,LALAR(1) 和 SLR(1) 的解析表完全相同,(错误和非错误条目相等,reduce 的数量相等)但是对于上面的文法,S 中 Reduced 的个数要多于 L。

我在另一本书中看到,我们通常有:

在此处输入图像描述

概括:

1)对于我在问题1中写的上述语法,为什么减少的数量不同?

2)如果我们有一个 SLR(1) 语法,为什么表是完全一样的?(减少和错误条目的数量变得相同)