问题标签 [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 投票
1 回答
442 浏览

c++ - 未排序模式的 boost::Spirit 语法

对于需要解析的模型,我有一部分模式。可以说它如下所示。

属性是:

  1. 元素可能看起来是无序的。
  2. 作为模式一部分的所有元素都必须出现,不能出现其他元素。
  3. 所有元素的综合属性都进入一个结构。
  4. (可选)模式将来可能取决于类型字段——即基于类型的不同字段——但是我目前并不关心这个。
0 投票
3 回答
3073 浏览

grammar - 什么是自动计算 FIRST 和 FOLLOW 集的好工具?

我目前正在使用 BNF 语法,我希望能够将其转换为 LL(1) 形式。但是,我今天第三次手动完成了更改并为语法计算了新的 FIRST 和 FOLLOW 集,我已经厌倦了。一定有更好的方法!

有人可以建议一个工具,给定一个语法,自动计算所有非终端的第一个和后续集吗?

0 投票
1 回答
1667 浏览

parsing - 是否可以使用递归下降解析器同时验证语法和构建解析树?

是否可以在使用递归下降解析器检查数据是否匹配语法的同时生成解析树?

如果是这样,当我递归下降时,我将使用什么方法来构建一棵树?

谢谢,博达赛多。

注意:我是解析新手。(已经问了几个关于 SO 的问题,我正在变得更好。)

0 投票
3 回答
773 浏览

parsing - 递归下降解析器 LL(1) 的日期数据类型的良好语法

我正在为生产环境构建一个自定义表达式解析器和评估器,以向用户提供有限的 DSL。解析器本身作为 DSL,需要简单。解析器将使用一种不支持动态表达式解析的外来语言构建,也没有任何可用的解析器生成器工具。

我目前的决定是采用 LL(1) 语法的递归下降方法,这样即使以前没有评估表达式经验的程序员也可以快速了解代码的工作原理。

它必须处理由多种数据类型组成的混合表达式:小数、百分比、字符串和日期。dd/mm/yyyy 格式的日期很容易与一串除法操作混淆。

哪里有很好的解决这个问题的方法?

我自己的解决方案旨在使解析器保持简单,并在日期前加上特殊符号,比如说撇号:

0 投票
2 回答
17709 浏览

language-agnostic - 将 EBNF 转换为 BNF

我的计算机语言课已经有几年了,所以我已经忘记了 BNF 和 EBNF 的优点,而且我身边没有教科书。具体来说,我忘记了如何将 EBNF 转换为 BNF。

根据我的记忆,我知道其中一个要点是转换

进入

但我不记得其他规则。我试图在网上查找这个,但我只能找到指向作业问题的链接,或者关于用花括号转换术语的小评论。我找不到定义翻译的详尽规则列表。

0 投票
1 回答
476 浏览

ruby - Ruby 中的解析器:处理粘性注释和引号

我正在尝试在 Ruby 中为语法创建递归下降解析器,该语法由以下规则定义

  1. 输入空格分隔的Cards组成,以Stop-word 开头,其中空格是正则表达式/[ \n\t]+/
  2. 卡片可能包含关键字或/和也由空格分隔的值,它们具有特定于卡片的顺序/模式
  3. 所有停用词和关键字都不区分大小写,即:/^[a-z]+[a-z0-9]*$/i
  4. 值可以是双引号字符串,不能用空格与其他单词分隔,例如:

    /li>
  5. 值也可以是单词 /^[a-z]+[a-z0-9]*$/整数浮点数(例如-1.15,或1.0e+2

  6. 单行注释由其他单词表示,#并且不能与其他单词分开,例如:

    /li>
  7. 多行注释/*and表示,*/不能与其他词分开,例如:

    /li>


由于大部分单词都用空格分隔,有一段时间我在考虑拆分整个输入并逐字解析。为了处理评论和引用,我打算这样做

但是,以这种方式修改了字符串的内容(和注释,如果我想保留它们)。您将如何处理这些粘性评论和引用?

0 投票
1 回答
461 浏览

compiler-construction - 帮助... LL 语法和递归下降解析器

我正在使用 ANTRL,这是我的一些语法,它给我带来了错误。

这是错误“Decision can match input such as "ELSE" using multiple alternatives ”。

我该如何解决?

0 投票
4 回答
3529 浏览

java - 在 Java 中编写递归下降解析来解析 epsilon(ε)

例如,

EBNF

A ::= B c;

B ::= T1 | T2 | ε

T1 ::= 一个

T2 ::= b

如何编写解析器在 Java 中解析 epsilon(空字符串集)?

0 投票
1 回答
215 浏览

parsing - 使用递归下降从该语法生成​​表达式

我有一个简单的语法。实际上,我使用的语法更复杂,但这是说明我的问题的最小子集。

Value匹配标识符、字符串、数字等。该Suffix规则用于消除左递归。这匹配表达式,例如:

也就是说,一个图a同时出现b和 的结果(c -> (d) (e)),并c出现de。我正在尝试为这些表达式生成一个抽象语法树,但我遇到了困难,因为所有运算符都可以在每一侧接受任意数量的操作数。我宁愿将生成 AST 的逻辑保留在递归下降解析方法中,因为它避免了重复提取表达式的逻辑。我目前的策略如下:

  1. 如果Value出现 a,将其推送到输出。

  2. 如果出现FromTo

    1. 输出分隔符。

    2. 得到下一个Expr

    3. 创建一个Link节点。

    4. 将输出中的第一组操作数弹出到 中,Link直到出现分隔符。

    5. 擦除发现的分隔符。

    6. 将第二组操作数弹出到Link直到分隔符中。

    7. Link到输出。

如果我在不遵循步骤 2.3-2.7 的情况下运行它,我会得到一个值和分隔符列表。对于上面引用的表达式,a -> b (c -> (d) (e)),输出应该是:

然后应用该To规则将产生:

随后:

需要注意的重要一点是sep_2,对于分隔第二个 的左侧操作数至关重要的->,没有出现,因此解析器认为表达式实际上是这样写的:

为了用我当前的策略解决这个问题,我需要一种在相邻表达式之间产生分隔符的方法,但前提是当前表达式是括号中的Fromor表达式。To如果这是可能的,那么我只是没有看到它,答案应该很简单。但是,如果有更好的方法来解决这个问题,请告诉我!

0 投票
8 回答
28324 浏览

powershell - 在 Powershell 中将文件重命名为小写

我正在尝试使用 Powershell 2.0 递归地重命名一堆文件。目录结构如下所示:

我正在使用以下命令:

它似乎重命名了文件,但抱怨子目录:

我每月使用 robocopy 重新加载数据,但目录没有改变,所以我可以手动重命名它们。有什么办法可以get-children跳过子目录(如find Leaflets -type f ...)?

谢谢。

更新:看来问题出在已经全部小写的文件上。我尝试将命令更改为:

但现在 Powershell 抱怨这if不是 cmdlet、函数等。我可以将输出通过管道get-childitem传输到if语句吗?

更新2:这有效: