问题标签 [left-recursion]

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 回答
100 浏览

left-recursion - 如何在他的以下删除左递归?

这里是制作。

现在我应该做

会是正确的答案吗?那是'b'或'c'都可以用吗?

0 投票
1 回答
302 浏览

context-free-grammar - 删除 CFG 中的左递归

我将如何从语法中的这一行中删除左递归?

A -> D | 右 | r 巴 n ; | 机管局 | ε

r、n 和 ; 是终端符号。D,R,B 和 A 都是非终结符。

提前致谢

0 投票
3 回答
1123 浏览

prolog - Prolog dcg 从语言中生成所有单词

我正在尝试在 prolog 中编写一些 dcg 语法来描述
a^nb^n n>=0
"",ab,aabb,aaabbb itd

我写的都是

只要我想做的只是检查单词是否正确,它就很好,但是 dcg 语法应该如何在 prolog 中查看?-phrase(s,X)它将从我的语言中生成所有单词?

0 投票
1 回答
327 浏览

prolog - Change DCG to be deterministic

how to change this gramma to be deterministic

I just dont know where to put cut to avoid backtracking.

0 投票
1 回答
313 浏览

recursion - 如何去掉左递归

我想制作一个允许柯里化函数调用的语法。

那是:

我的第一个刺是这样的:

但是由于左递归而失败。

0 投票
4 回答
2252 浏览

prolog - 删除 DCG 中的左递归 - Prolog

我在这个语法中的左递归有一个小问题。我正在尝试在 Prolog 中编写它,但我不知道如何删除左递归。

我写过类似的东西,但它根本不起作用。如何更改它以使该程序正常工作?

0 投票
2 回答
1246 浏览

parsing - LL(1) 语法问题

对于 Mini Java 的子语法,我有 26 条规则语法。该语法应该是非面向对象的。无论如何,我一直在尝试对它进行左分解并删除左递归。但是,我用 JFLAP 对其进行了测试,但它告诉我它不是 LL(1)。我遵循了 Aho-Sethi 书中算法的每一步。

你能给我一些建议吗?

每个<IDENTIFIER>都是有效的 Java 标识符,并且<INTEGER-LITERAL>是一个简单的整数。每个e产生式代表一个 epsilon 产生式,$第一条规则中的 是文件结束标记。

0 投票
1 回答
217 浏览

parsing - 递归下降解析器 - 避免左递归

我有以下作品

所以很明显有左递归

据说使用以下规则可以避免左递归

这里如何避免左递归?函数A'中仍然存在递归。任何人都可以解释一下。我是这个主题的初学者吗?

0 投票
1 回答
280 浏览

ruby - 如何在不回溯的情况下避免树顶的左递归?

在我正在研究的这个简单的表达式解析器中,我无法避免左递归。本质上,我想将方程“fx y”解析为两个表达式“fx”和“(fx)y”(带有隐式括号)。如何在避免左递归和回溯的同时做到这一点?是否必须有一个中间步骤?

0 投票
2 回答
608 浏览

prolog - 删除其他抽象语法中的歧义以编写 DCG 解析器 Prolog

P => 程序 K => 块

S => 单命令

C => 命令

E => 表达式

B => 布尔表达式

I => 标识符

N > 数字

P ::= K。

K ::= 开始 C 结束

C ::= C1 ; C2 | 小号

S ::= 我 := E | 如果 (B) 则 S | 如果 (B) 则 S1 否则 S2 | 而(B)做S | 重复 C 直到 (B) | ķ | 打印 E

E ::= - E | E1 + E2 | E1 - E2 | E1 E2 | E1 分区 E2 | E1 模组 E2 | (五) | 我 | ñ

B ::= E1 = E2 | E1 > E2 | E1 < E2 | E1 != E2 | 不是 B | B1 和 B2 | B1 或 B2 | (乙)

我应该删除 E 和 B 中的歧义,以便我可以在 prolog 中编写 DCG 解析器。