问题标签 [ll]

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

parsing - LL和递归下降解析器之间的区别?

我最近试图自学解析器(用于语言/上下文无关语法)是如何工作的,除了一件事之外,其中大部分似乎都是有意义的。我特别关注LL(k) 语法,其中两个主要算法似乎是LL 解析器(使用堆栈/解析表)和递归下降解析器(仅使用递归)。

据我所知,递归下降算法适用于所有 LL(k) 语法,甚至可能更多,而 LL 解析器适用于所有 LL(k) 语法。然而,递归下降解析器显然比 LL 解析器要简单得多(就像 LL 解析器比 LR 解析器更简单一样)。

所以我的问题是,使用任何一种算法时可能会遇到哪些优势/问题?为什么有人会选择 LL 而不是递归下降,因为它适用于同一组语法并且实现起来更棘手?

0 投票
1 回答
1148 浏览

parsing - 使用 ANTLR 解析 Markdown 块引用

这一直是困扰我一段时间的事情。如何使用 ANTLR 将以下文本解析为下面的 HTML?我似乎根本无法解决这个问题。

有任何想法吗?

降价:

输出 HTML:

0 投票
1 回答
1476 浏览

recursion - Antlr 左递归问题

我的 Antlr 语法中有一个左递归问题。虽然我认为我理解为什么会出现问题,但我无法想到解决方案。问题在于我的数据类型规则的最后一行。我已经包含了整个语法供您查看:

我正在使用 Antlr 进行开发,它提供了解决此问题的功能 - 但不幸的是它似乎不起作用:s

任何帮助都会很棒。

谢谢。

编辑:

这是我尝试实现/解析的语言示例

例如:

0 投票
1 回答
450 浏览

parsing - LL 解析器如何评估这个表达式?

考虑这个表达式:

3 + 2 + 2 * 2 = ?

会是14吗?

0 投票
3 回答
3453 浏览

parsing - 解析中使用的 FIRST 和 FOLLOW 集是什么?

什么是 FIRST 和 FOLLOW 集?它们在解析中用于什么?它们是用于自上而下还是自下而上的解析器?

谁能向我解释以下一组语法规则的 FIRST 和 FOLLOW SETS:

0 投票
1 回答
2473 浏览

compiler-construction - 自上而下的解析器希望在“代码”中有不错的案例示例左递归

你好,堆栈的流成员。

我正在学习编译器类。我确实理解 Top-Down Parser 应该避免左递归,并转换为右递归方式。

问题是,

a)我是否理解正确的 Top-Down Parser 等于 LL 而 Bottom-Up Parser 等于 LR ?

b) 我发现左递归是自称 ex) Expr :== Expr '+' Term | 可以导致无限循环查找 Expr 的项。但无论如何,任何考虑输入 C 或 Java 的示例代码?(我不想要解析器或扫描仪代码)我需要的是带有句子形式的案例代码示例,通过左递归发生无限循环。

c) 在自顶向下解析器中使用右递归实际上有什么不同?

ANS c) 无需回溯。但还有别的吗?

ANS b)x - 2 * y还有别的东西吗?因为这个适用于回溯的解析方式。

我发现了非左递归和左递归的案例示例。

左递归语法

非左递归语法

两者都进入无限循环。

谢谢你,感谢你所有的专家。

0 投票
7 回答
14359 浏览

parsing - LL 解析器比 LR 解析器有什么优势?

LL 解析器与 LR 解析器相比有哪些优势,以保证它们在当今的解析器生成器工具中相对受欢迎?

根据Wikipedia,LR 解析似乎比 LL 具有优势:

LR解析比LL解析可以处理更大范围的语言,并且在错误报告方面也更好,即当输入不符合语法时,它会尽快检测到语法错误。这与 LL(k)(或更糟糕的是,LL(*) 解析器)形成对比,后者可能会由于回溯而将错误检测推迟到语法的不同分支,这通常会使错误更难在具有长公共前缀的析取中定位.

注意:这不是家庭作业。当我发现 Antlr 是一个 LL 解析器生成器时,我感到很惊讶(尽管它的名字中有“LR”!)。

0 投票
4 回答
1312 浏览

parsing - 编写手动解析器

我需要手动编写解析器。不能在 LL(*) 和 LR 之间进行选择(也许试试 Earley?)。我应该使用自下而上的解析,因为 LL 的语法会相当困难吗?

0 投票
1 回答
549 浏览

lalr - 将 LALR 转换为 LL

我有 SABLECC 的这个(工作)LALR 语法:

我试图将它转换为使用 ANTLR(LL 解析器生成器)的 XText。我在转换这两个左递归规则时遇到了麻烦:

我该怎么做?我认为我应该使用运算符优先级,但现在我不能只是以LL 的方式思考。

0 投票
3 回答
2509 浏览

parsing - 编写正确的 LL(1) 语法?

我目前正在尝试为编程语言编写一个(非常)小的解释器/编译器。我已经设置了语言的语法,现在我需要写下语言的语法。我打算使用 LL(1) 解析器,因为经过一番研究,它似乎是最容易使用的。

我是这个领域的新手,但根据我收集到的信息,强烈建议使用 BNF 或 EBNF 形式化语法。然而,似乎并非所有语法都适合使用 LL(1) 解析器来实现。因此,我想知道以 LL(1) 形式编写语法的正确(或推荐)方法是什么。

谢谢你的帮助,查理。

PS:我打算使用 Haskell 的 Parsec 库编写解析器。

编辑:另外,根据 SK 逻辑,Parsec 可以处理无限前瞻(LL(k) ?) - 但我想这个问题仍然代表这种类型的语法。