问题标签 [lr1]

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 投票
1 回答
97 浏览

java - 这个解析器生成器说这个语法不是 LR(1) 但我有疑问

我用 Java 编写了一个解析器生成器,经过几次颠簸(例如,早期版本并不特别喜欢左递归),我设法使它与一些简单的语法一起工作(所以我可以手动验证产生是正确的) 我尝试给它提供一个更复杂的语法,结果是它不是 LR(1) 语法(源于解析器试图在解析表的同一个单元格上写两次的事实)

有问题的语法是

S->aAb|SA
A->aA|e|S

我很确定这个语法是 LR(1),无论如何,这是我的程序 http://pastebin.com/hJNC9uuN的输出

任何建议都将是最宝贵的谢谢(如果有人有一个解析器生成器来输出自动机和解析表,这样我就可以面对他们,那就更好了)

0 投票
0 回答
158 浏览

parsing - 给定一个文法,生成 LR(1) 项

我正在研究 LR(1) 项目,我有点怀疑,希望有人能为我澄清。给定以下语法,我必须生成 LR(1) 项。我生成了第一项,但不确定它是否正确,所以在继续之前,我想确保我的第一项正确。如果有人可以帮助我/为我澄清,我将非常感激。谢谢你。这是我所拥有的:

0 投票
0 回答
97 浏览

parsing - LR(1) 自动机:项目之间的差异

我对LR(1)自动机构造有疑问:

内核[A->b., x] (state_1)的状态是否等同于内核[A->b.,x/y] (state_2)的状态?

就像,如果我处于状态[A->.b, x]和 shift_b 状态,如果我已经有 state_2,是否需要创建 state_1?

希望很清楚。

0 投票
1 回答
217 浏览

bnf - LR(1) items 和 LALR(1) 解析表怎么做呢?

从下面给出的语法创建 LR(1) 项并合并具有给出 LALR(1) 项集的项集。我不知道如何从这个语法构造

B -> 身份证 | 编号 ( B ) | 乙。编号 | 乙[乙]| 乙。身份证(乙)

到目前为止的答案:i0- B' -> .B, $ | .id, $ | .id ( B )

0 投票
0 回答
67 浏览

compiler-construction - 野牛:即使 %left %right 指令也有移位减少冲突

我知道大多数移位/减少冲突可以通过使用 %left 或 %right 指令来解决。但即便如此,我也遇到了冲突。以下是我的语法块:

我有如下的优先级和关联性指令:

它仍然给出了 11 个换班错误。这是给出这些错误的状态 84。

我无法弄清楚为什么这些指令不起作用。

如果需要,这是解析器文件:parser.y

编辑:文件parser.y已被删除。

0 投票
1 回答
1628 浏览

parsing - LR(1) 使用 epsilon 产生式解析表

我无法使用包含 epsilon 产生式的语法为 LR(1) 解析器构建项目集的集合。例如,给定以下语法(其中 eps 代表 epsilon)

State0 将是

从 State0 用 'a' 移动会得到以下状态,我们称之为 State2

为了预测 State2 的第二项,我需要计算 FIRST(U$)。我知道 FIRST(U) = {'b', eps}。我的第一个问题是:State2 的第二项的前瞻是 $ 和 'b'?由于 U 可以是 eps,我的大脑告诉我,我也可以将 $ 作为前瞻,而不仅仅是“b”。如果 FIRST(U) 只是 {'b'},它就只是 'b'。那是对的吗?

第二个问题:在某些时候,我将有如下状态

我在这里做什么?我是否需要与 eps 一起移动并与该项目一起设置U -> eps., $?如果我有另一个终端作为前瞻,即X -> .eps, a/$?如果我搬家,最终有一套表格X -> eps., $,我会减少吗?

还有更多:我需要在解析表中插入 eps 作为符号吗?

谢谢

0 投票
1 回答
198 浏览

rust - LR(1) 移位/减少歧义

给定带有重复BLOCKs 的输入,其中每个块都有重复BEGIN EVENTEND EVENT条目(END EVENT总是跟在 a之后BEGIN EVENT):

你如何用 LR(1) 来消除这个语法的歧义?我正在使用LALRPOP,最小的例子是:

因为 LR(1) 只能向前看一个标记,所以这个语法是模棱两可的,因为 LALRPOP 有用地告诉你(部分错误):

我看到它告诉我,在解析 BlockHeader、Begin 和 End 之后,它无法确定下一个标记是另一个 Begin 还是另一个 Block 的开始。我还没有找到在 LR(1) 中消除歧义的方法,但我只能假设这是我缺乏理解,而不是 LR(1) 语法的继承限制?

0 投票
1 回答
39 浏览

parsing - 在 LR(1) 前瞻中考虑了哪些产生式?

我目前正在使用 http://jsmachines.sourceforge.net/machines/lr1.html上的工具查看两个闭包计算示例

示例 1

在这里,在初始状态下以闭包结束:

示例 2

计算的第一步闭合是:

在示例 1 中,为什么规则 3 中的 b 不包含在前瞻中?在案例 2 中,我们遵循 B 来确定 $ 是前瞻的一部分,那么是否有一些特殊的理由不考虑案例 1 中的所有规则?

0 投票
1 回答
476 浏览

compiler-construction - 可以用 LL(1) 解析语法但不能用 LR(1) 解析语法吗?

对于家庭作业,我得到了以下语法:

我用 LL(1) 计算得很好。第一组是:

以下套装是:

当我制作解析表时,示例字符串“ab”解析得很好。但是,当我尝试使用 LR(1) 解析相同的语法时,我遇到了错误。

对于项目集 0,我得到以下信息:( , 分隔前瞻终端)

如果你做表,你会清楚地看到项目集0中A和B之间存在reduce-reduce冲突。如果要求我解析字符串“ab”,解析器将不知道是否要减少我的空到A或减少到B。我做错了什么?我总是被告知 LR(1) 实际上可以解析比 LL(1) 更多的语法,那么这里有什么问题呢?如果有人可以帮助我,我将不胜感激,因为这让我发疯。谢谢

0 投票
1 回答
41 浏览

compiler-construction - 如何解析给定的 LALR(1) 语法

我无法使用 LALR 方法解析以下语法。

一开始我没问题,这里是项目状态 0:(分隔前瞻状态的 , )

现在这很好,但是当您从广告终端转到状态 1 时,我会感到困惑。我的书的状态 2 如下:

X非终端中的前瞻终端“d”来自哪里?我以为 dX 来自 .dX,它有前瞻终端“$”和 $d”。但是在进行 E-closure 时,前瞻不应该是 $d 的第一个,即“$”?为什么是“$”,或“d”?我认为它可能来自另一个州,因为这是 LALR,但我最终合并状态 1 的状态也没有前瞻广告。有人可以向我解释为什么有一个“d”配对在这个状态的前瞻中有“$”?谢谢。