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

ruby - 如何在 parslet 中定义固定宽度的约束

我正在研究parslet以编写大量数据导入代码。总的来说,图书馆看起来不错,但我正在为一件事而苦苦挣扎。我们的很多输入文件都是固定宽度的,并且不同格式的宽度不同,即使实际字段没有。例如,我们可能会得到一个文件有 9 个字符的货币,而另一个文件有 11 个字符(或其他)。有谁知道如何在 parslet atom 上定义固定宽度约束?

理想情况下,我希望能够定义一个能够理解货币的原子(带有可选的美元符号、千位分隔符等......)然后我将能够在运行中基于旧原子创建一个新原子这是完全等价的,只是它解析了 N 个字符。

parslet 中是否存在这样的组合器?如果没有,自己写一个可能/困难吗?

0 投票
2 回答
165 浏览

ruby-on-rails - 在存储到 MVC 之前解析

我开始解析数据并从用户提供的字符串中获取一些结构(主要是提取数字和城市名称)。

我在 ruby​​ 解释器中运行了一些代码,现在我想在 Web 应用程序中使用相同的代码。

我正在为我的解析应该在代码中的哪个位置或它的结构而苦苦挣扎。

我最初的直觉是它属于模型,因为它是数据逻辑。例如,条目是否有整数,是否有两个整数,是否有城市名称等。

但是,我的模型需要同时继承 ActiveRecord 和 Parslet(用于解析),而 Ruby 显然不允许多重继承。

我目前的模型看起来像这样

那里真的不多,但我认为我被卡住了,因为我的结构错误并且不知道如何连接这两部分。

我正在尝试存储原始字符串以及解析数据的组件。

0 投票
2 回答
1247 浏览

ruby - Parslet:排除条款

我目前正在使用 Ruby 编写一个 Ruby 解析器,更准确地说是 Parslet,因为我认为它比 Treetop 或 Citrus 更容易使用。我使用官方规范创建我的规则,但是有些语句我不能写,因为它们“排除”了一些语法,我不知道该怎么做......好吧,这是一个让你理解的例子。 ..

这是一个基本规则:

我怎么能用 Parslet 翻译呢?也许缺席?/现在?东西 ?

非常感谢,希望有大神给点意见。。。。

祝你今天过得愉快!

编辑:我试过你说的,所以这是我使用 parslet 翻译成 Ruby 语言:

但是,它似乎不起作用(括号中的序列)。我做了一些测试,得出的结论是我的括号中写的内容是错误的。

这是一个非常简单的示例,让我们考虑以下规则:

我用这段代码这些规则:

但我明白了:

无法匹配第 2 行字符 1 处的序列 (SOURCE_CHARACTER{0, } LINE_TERMINATOR)。-- Failed to match sequence (SOURCE_CHARACTER{0, } LINE_TERMINATOR) at line 2 char 1.无法匹配第 2 行字符 1 处的序列 (''''?)。`- 第 2 行字符 1 处的输入过早结束。无

如果这个序列不起作用,我的“完整”规则将永远不会起作用......如果有人有想法,那就太好了。

谢谢 !

0 投票
2 回答
360 浏览

ruby - Parslet Alternatives 不解析整个字符串

我有以下规格

对于以下 Parslet 解析器

前两个测试通过就好了,我可以通过put将它们输出到命令行来看到原子的类型是正确的。但是,当我尝试使用表达式和纯文本解析文档时,它无法解析纯文本,并出现以下错误

我想我在定义 :document 规则方面遗漏了一些东西。我想要的是会消耗任意数量的序列表达式和纯文本的东西,虽然我拥有的规则将消耗每个原子个体,但在同一个字符串中使用它们会导致失败。

0 投票
1 回答
532 浏览

ruby - 使用ruby中的parslet解析结构为具有固定宽度列的树的文本

我被困住了。几天来一直试图解析这个文本(看底部)。但是有些事情想不通。首先,文本被格式化为具有固定宽度列的树结构,但确切的列宽取决于最宽的字段。

我正在使用 ruby​​,首先我尝试了 Treetop gem 并取得了一些进展,但后来决定尝试 Parslet,所以我现在正在使用它,它似乎应该更容易使用,但很难找到它的详细文档。

目前我单独解析每一行并使用解析的条目创建数组,但这不正确,因为我松散了结构。我需要递归解析它并处理深度。

我真的很感激任何提示、想法和建议。


这是我当前的代码,它可以工作,但是所有数据都被展平了。我目前的想法是递归解析当前行的起始位置是否大于以前的行起始位置(即宽度),因此这意味着我们应该进入更深层次。实际上我设法做到了,但后来我无法正常出门,所以我删除了该代码。


文本看起来像这样(https://gist.github.com/davispuh/4726538


谢谢 :)

0 投票
3 回答
276 浏览

ruby - Parslet:SystemStackError:堆栈级别太深

我正在研究一种新的编程语言rip,但我无法深入到一些无限循环的底部。有没有办法在每个规则被调用时打印出来,这样我就可以看到正在递归的规则?我试过在脑海中浏览代码,但我没有看到它。任何帮助将非常感激。

0 投票
2 回答
1018 浏览

ruby - 在 Ruby 中使用 Parslet 的缩进敏感解析器?

我正在尝试使用 Ruby 中的Parslet库来解析一个简单的缩进敏感语法。

以下是我尝试解析的语法示例:

生成的树如下所示:

我现在拥有的解析器可以解析嵌套级别 0 和 1 节点,但无法解析:

很明显,我需要一个动态计数器,它需要 3 个缩进节点来匹配嵌套级别 3 上的标识符。

如何以这种方式使用 Parslet 实现缩进敏感的语法解析器?可能吗?

0 投票
2 回答
226 浏览

ruby - Parslet 子树不触发

简历(我把下面的长篇故事缩小到简单的问题)

==========================FULL STORY(在标题之后不太相关)

我正在使用 Parslet 制作 SGF 文件解析器。

现在我正处于制作变形金刚的阶段。

从解析器我已经得到了这样的结构:

我用来转换的规则集:

有了这样的规则,我得到以下结构:

一切都很完美。我唯一的问题是 :properties 哈希数组。

最后我想拥有

你看?合并 :properties 中的所有数组哈希,因为在之前的转换之后,它们现在具有唯一键。还将结构展平一点。

嘿!我可以手动完成。我的意思是运行一个单独的方法,比如

但是为什么我不能用整洁的转换规则来做到这一点,把所有的转换逻辑放在一个地方?

关键是rule( properties: subtree(:props) )根本不会被解雇。即使我只是从块中返回 nil,它也不会改变任何东西。所以,看来,这subtree并没有抓住事情,或者我没有。

0 投票
2 回答
1474 浏览

ruby - Ruby parslet:解析多行

我正在寻找一种匹配多行 Parslet 的方法。代码如下所示:

但是,lines将始终以无限循环结束,这是因为match('$')将无休止地重复以匹配字符串的结尾。

是否可以匹配多个可以为空的行?

应该匹配成功。我错过了什么吗?我也尝试过(match('$').absent? >> any.maybe).repeat(1) >> match('$'),但这与空行不匹配。

问候,
丹尼尔。

0 投票
2 回答
463 浏览

ruby - 如何使用 Parslet 在 Ruby 中处理 C 风格的注释?

以Parslet自己的创建者的代码示例(可在此链接中获得)作为起点,我需要对其进行扩展,以便从以类 C 语法编写的文件中检索所有未注释的文本。

提供的示例能够成功解析 C 风格的注释,将这些区域视为常规行空间。但是,这个简单的示例只需要文件的非注释区域中的“a”字符,例如输入示例:

用于检测非注释文本的规则很简单:

因此,我需要概括前面的规则以从更通用的文件中获取所有其他(未注释的)文本,例如:

我是 Parsing Expression Grammars 的新手,我之前的试验都没有成功。