问题标签 [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.
parsing - 递归下降解析 - 从 LL(1) 向上
以下简单的“计算器表达式”文法(BNF)可以很容易地用一个简单的递归下降解析器来解析,它是预测性的 LL(1):
因为看到下一个标记总是足以知道要选择的规则。但是,假设我添加了以下规则:
为了在命令行上与计算器进行交互,使用变量,如下所示:
我不能使用简单的 LL(1) 预测解析器来解析<command>
规则,这是真的吗?我试图为它编写解析器,但似乎我需要知道更多的令牌。是使用回溯的解决方案,还是我可以只实现 LL(2) 并始终向前看两个令牌?
RD 解析器生成器如何处理这个问题(例如,ANTLR)?
compiler-construction - 递归下降与生成的解析器 - 效率
就性能而言,手写递归下降解析器(不可避免地是 LL(k))与生成的 LALR 解析器相比如何?
我知道 LALR 解析器能够处理比 LL(k) 多得多的语法;然而,我打算手动编写我的解析器,递归下降似乎是最合适的选择。出于兴趣,是否可以手动(合理地可读)编写任何其他类型?
注意我使用的是带有尾调用优化 (F#) 的函数式语言,因此 [精心定制的] 递归不会像其他语言那样成为问题。
parsing - 递归下降解析器:如何找到 FIRST、FOLLOW 和 PREDICT 集?
当给定语法时,我正在寻找对 RDP 的 FIRST、FOLLOW 和 PREDICT 集的定义的良好解释。
perl - 有没有一种简单的方法将文本文件分块成大括号平衡部分?
我正在尝试使用 Perl & Parse::RecDescent 从文件中解析一些数据。我不能把完整的数据文件扔给 perl 脚本,因为 RecDescent 需要几天的时间来研究它。因此,我将庞大的数据文件拆分为 RD 大小的块以减少运行时间。
但是,我需要在平衡括号内提取部分,并且我现在拥有的例程并不可靠(它过多地取决于换行符中最后一个右括号的位置)。例子:
我需要抓住一切,从cell ... {
匹配的结束}
,可以有不同数量的间距和小节。
必须有一些 linux 命令行的东西才能轻松做到这一点?有任何想法吗?
编辑:输入文件大约 8M,语法约 60 条规则。
python - PyParsing 中的简单递归下降
我已经尝试使用此代码并将其转换为我正在从事的用于编程语言处理的项目,但我遇到了简化版本的问题:
我已经对这个简单的设置进行了许多不同的修改。通常,尝试类似:
将返回['1']
。当我陷入深度递归时,例如:
关于我无法解析任意算术表达式的简单递归,我缺少什么,例如1+(2 * 3-(4*(5+6)-(7))...
?
parsing - 手动编写递归下降解析器的资源
我正在寻找手动编写递归下降解析器,并且正在寻找有关如何构造它、算法等的良好资源。
php - 是否可以使用 PEG 解析 PHP?
问题很简单:是否可以使用 PEG 解析 PHP?我想使用 PEG 解析器生成器来解析 PHP。请多多指教。谢谢!
jquery - jQuery - 选择同一级别的孩子(奇数或偶数)
有没有办法用 jQuery 替换下面的 CSS?
c++ - boost::spirit 从语法中组合语法
我已经弄清楚了如何使用精神——也就是说,我写了一个中等复杂的语法。我总是采用扩展程序的方法——一次一个子系统。我已经为一个复杂模型编写了数据结构,它在最高级别有 4 种类型。
我想使用由规则方法组成的语法一次解析一种类型的顶级类型——即,我想用一种顶级语法编写 4 个语法。如果这是可能的(我开始怀疑),有人可以发布一个片段或对执行此操作的项目的引用。
具有 50 多个(可能更多)规则(用于正确错误处理)的顶级语法听起来并不有趣(TMP 代码易变/编译缓慢,并提供无用的错误消息)。