问题标签 [parslet]

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

ruby - Parslet 中是否提供反向引用?

有没有一种方法可以反向引用 parslet 中的前一个字符串,类似于\1典型正则表达式中的功能?

我想提取块中的字符,例如:

其中“Marker”是一个已知的字符串,但“SomeName”是先验未知的,所以我相信我需要类似的东西:

我不知道如何使用 Parslet 和/或 Ruby 语言编写 backreference_to_name 规则

0 投票
1 回答
233 浏览

ruby - 直到出现分隔符的 Parslet 词

我只是从 ruby​​ 和 parslet 开始,所以这对其他人来说可能很明显(希望如此)。

我想在不消耗它的情况下将所有单词都放在分隔符 (^) 之前

以下规则有效(但会消耗分隔符),结果为{:wrd=>"otherthings"@0, :delim=>"^"@11}

我试图使用“礼物?”,

但这会引发异常:

在稍后阶段,我将要检查分隔符右侧的单词以构建更复杂的语法,这就是我不想使用分隔符的原因。

我正在使用 parslet 1.5.0。

谢谢你的帮助!

0 投票
1 回答
90 浏览

ruby - 如何在 Parslet 中拆分原子?

我正在构建一种类似 SQL 的查询语言。我希望能够处理以逗​​号分隔的项目列表。我已经用这段代码成功地实现了这一点:

SELECT id,name,fork FROM forks正确输出{:select=>"id,name,fork"@7, :from=>"forks"@25}树的地方。

现在,我希望能够将SELECT参数(id,name,fork在本例中)转换为数组,而不是稍后再搞砸。我可以通过运行来做到这一点'id,name,fork'.split ','。应用时,我无法让 Parslet 转换器为我执行此操作。这是我的查询转换器的代码:

像这样应用时:

结果与我没有应用它时相同:{:select=>"id,name,fork"@7, :from=>"forks"@25}.

我希望:select成为的值是这样的数组["id","name","fork"]

我的问题是:如何:select使用转换器将值拆分为数组?

0 投票
1 回答
202 浏览

ruby - 逗号分隔列表的简单 parslet 解析器不起作用

为什么以下 Parslet 解析器不适用于解析逗号分隔的列表?当我解析时,它卡住并且不提供错误消息:

我知道“直到出现分隔符的 Parslet 词”,并且我知道如何以其他方式解析列表,但我不明白为什么上述方法不起作用。

0 投票
1 回答
320 浏览

ruby - 为什么 Parslet(在 Ruby 中)在解析空字符串文字时返回一个空数组?

我在玩欧芹。这是一个简单的解析器,它向我展示了一些不明显的行为。

显然,它应该解析双引号字符串。它确实如此。但以下结果对我来说似乎很奇怪。

此代码返回{:string=>[]}. 为什么empty array有但没有empty string?我错过了什么?

我正在使用ruby 2.1.1parslet 1.6.1

0 投票
2 回答
85 浏览

ruby - 如何让我的解析器原子在包含可选空格的规则内终止?

我可以让原子单独解析,但是当我使用>>解析器链接它们时似乎不想离开:integer规则。

我收到此错误:

运行以下代码时:

0 投票
2 回答
137 浏览

ruby - Ruby:如何在程序中生成代码行?

我正在使用parslet库在 Ruby 中开发一个解析器。

我正在解析的语言有很多关键字可以合并成一个解析规则,如下所示:

有没有一种通过读取包含所有关键字的文本文件来动态生成这组代码行的好方法?这将帮助我保持解析器的简洁和小巧,从而更轻松地添加新关键字而无需修改代码。

我想嵌入的伪代码是rule(:keyword)这样的:

到目前为止,我发现的解决方法是让一个单独的 ruby​​ 程序加载解析器代码:

其中解析器代码具有以下几行:

有没有更优雅的方法来实现这一点?

0 投票
2 回答
252 浏览

ruby - Parslet:识别除给定关键字之外的任何内容

我正在尝试为 Handlebars 编写一个 Ruby/Parslet 解析器,但我遇到了{{ else }}关键字。为了向那些不使用 Handlebars 的人解释一下,if/else 是这样写的:

但它变得棘手,因为内联和帮助程序可以使用相同的语法,例如:

所以我首先制定了一个规则来识别替换:

哪个匹配任何类似{{name}}or {{people.name}}。问题当然是也匹配{{ else }}块。这是我编写规则以匹配 if/else 块的方式:

(注意: docurly is {{, dccurly is}}和 block 或多或少可以是任何东西)

所以我现在需要重写 `identifier` 规则,使其匹配任何单词,但不匹配“else”。

提前致谢,文森特

0 投票
1 回答
66 浏览

regex - 如何在不使规则过于贪婪的情况下在 PEG 中执行前瞻?

我正在用 Parslet 编写解析器。在我要解析的文件中,我有以下结构:

为了解析这些动作,我做了以下事情:

  • 由于我有有限但未知数量的动作,我制定了一条action规则,并重复了它
  • 对于每个动作,我都会解析所有内容,直到达到有效动作(即“加注”、“跟注”等),因为玩家名称基本上可以包含任何字符。这是玩家名字
  • 然后我解析有效动作,后跟一个空格

问题是玩家姓名规则太贪心,所以,解析后,我得到这样的响应:

这是我正在使用的代码:

所以,这似乎是我的思维问题,而不是解析器,这就是为什么我在这里而不是在论坛等上发帖。你们能帮我弄清楚我做错了什么吗?

0 投票
1 回答
185 浏览

ruby - 解析 markdown 缩进代码块

我正在尝试使用用 Parslet 编写的语法来解析 Markdown。但是,我无法通过缩进的代码块,因为到目前为止我尝试的所有内容都陷入了递归。它们看起来像这样:

为了解决这个问题,我编写了一个最小的示例,将行(包括\n)替换为空格,a空白行(\n\n)替换为空格,例如:a aaa aa.

运行rspec recurring_group_parser.rb正常。只有当我把换行符放回时,它才会停止:

为了简化这一点,行只能由一个单行组成,a并且不缩进,但以后可以轻松更改,并且与无法完成解析无关。我也很确定chunk.absent?inrule :blank_lineany.absent?in之间存在冲突,rule :newline但我不知道如何解决这个问题并提供打破递归的标准。需要任何帮助!