问题标签 [recursive-descent]

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

parsing - 与递归下降解析器一起生成输出

编写简单的解析器是微不足道的,多年来我已经实现了几个。在大学里,我们也不得不写一篇。但是我们不必使用这种方法生成有意义的输出;我们从未学会如何创建后端。

如果我有一个用于简化 Pascal 的递归下降解析器,并且我想将代码转换为 C++,我将如何去做呢?我认为不需要中间步骤,例如生成抽象语法树。

那么我该如何输出编译或翻译的代码呢?我发现的唯一有用的例子是在 Jack Crenshaw 的教程中,但它更多地关注前端,就像大多数其他资源一样。我的解析器代码和我的语法之间的关系非常明显。解析器方法和输出之间的关系如何?我的函数声明解析器方法可以与一个 EmitLn( C++ code here ) 调用完全相关。但是那些不那么容易的解析器方法呢,比如表达式。表达式被分解为可能更多的调用,因此暗示需要一个 Emit() 函数,它允许我逐段分解表达式的输出代码。是否有任何用于输出代码的样板代码,例如 Jack Crenshaw 的 Lets Build a Compiler 中的 EmitLn 函数?这也表明我需要维护一个基本的符号表,这是大多数示例中经常省略的另一件事。

我对吗?我还应该知道什么?任何提示/建议或资源?我的大问题是,编译器前端的教程太多了,但是后端的一些解释怎么样?我可以解析语言,现在我想将其发展为能够将它们翻译和编译成其他语言。

0 投票
3 回答
308 浏览

parsing - 使用选项类型而不是递归下降解析器的异常?

我正在用 OCaml 编写一个简单的递归下降解析器。通常(据我从在线教程和书籍中得知),异常用于指示解析失败,例如:

但是,我正在考虑使用选项类型,即:

我想这样做的主要原因是使用选项类型可以让我优化我的一些组合器是尾递归的。

使用选项而不是异常有什么缺点吗?当我开始解析更复杂的结构时,这个决定会咬我的脚吗?

0 投票
1 回答
120 浏览

parsing - Parser implementations comparison: correctness confirmation and (perhaps) optimization

I've implemented two expression parsers, in recursive descent and operator precedence. They're implemented in Object Pascal. Here's the recursive descent:

and here's the operator precedence:

Those are the only essential difference between the two. Some simple tests show that both seem to parse correctly. However, I'm not really sure about the operator precedence implementation because this is the first time I really implement it. And the surprising fact which bothers me, it runs slower than the recursive descent version (it takes 1.5 more times)! My compiler classes and all articles I read states that operator precedence parsing should be more efficient than recursive descent due to fewer function calls and that's what I'm expecting as well since the code seems to show that. I've inline-d additional functions to get the operator precedence and right-associativity testing but this doesn't seem to help much. Please tell me whether I did something wrong. Feel free to ask for clarity of certain things.

0 投票
2 回答
1544 浏览

math - delta 在梯度下降算法中到底是什么意思?

如图所示:

在此处输入图像描述

有人可以帮我理解梯度下降算法中 delta 的确切含义吗?

0 投票
1 回答
310 浏览

python - 使用 NLTK 在递归下降解析器中指定重复标记

我正在尝试解析与此类似的语法。

这不是 NLTK 的递归下降解析器的有效语法。如何在此语法中指定多个重复标记之一

0 投票
1 回答
296 浏览

c# - Perl 中的 Parse::RecDescent 模块

我发现Parse::RecDescent是一个实现自然语言解析器的 Perl 模块。还有什么方法可以用 C# 语言实现 Parse::RecDescent 吗?

0 投票
0 回答
441 浏览

php - PHP中的递归下降解析器

可能重复:
是否有可用于 8 位嵌入式系统的 flex/bison 替代方案?

我想做这个解析器很久了,但我什至不知道从哪里开始。这些解析器脚本对我来说远非很清楚,因此任何针对初学者的教程都会派上用场。我在 PHP 方面有足够的经验来做到这一点。

谢谢!

0 投票
2 回答
197 浏览

python - Python 中用于 Python 的 ISO 人类可读解析器

我正在寻找用人类可读的 Python 编写的 Python 解析器(最好是 v. 2.7)。性能或灵活性并不重要。解析的准确性/正确性和解析器代码的清晰度在这里是更重要的考虑因素。

在网上搜索我发现了一些生成人类可读的 Python 代码的解析器生成器,但是我没有找到对应的 Python 语法来与它们中的任何一个一起使用(据我所见,它们都遵循不同的语法规范约定)。无论如何,即使我能找到合适的解析器生成器/Python 语法组合,满足我要求的现成 Python解析器(人类可读的 Python 代码)自然要好得多。

有什么建议么?

谢谢!

0 投票
0 回答
1444 浏览

c# - 带括号的表达式递归下降解析器

对于下面列出的语法规则,我想编写一个递归下降解析器:

所以我使用了下面的 C# 代码:

解析器适用于 (2+3) 之类的东西,但不适用于 (3+(2+4)*4)

那么如何让解析器解析表达式直到最后?

0 投票
1 回答
917 浏览

java - 需要帮助编写 Java 方法来执行递归下降解析

官方问题:

编写 Java 方法来执行以下产生式的递归下降解析:

这就是我想出的:

我非常有信心我在这里有大致的想法,但我希望有人可以帮助我完善这个/确认我在正确的轨道上..提前致谢!