问题标签 [parsimonious]

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

python - 节俭地为序列块打印有用的错误消息

我正在使用 parsimonious(python PEG 解析器库)来解析如下所示的文本:

它是一系列具有简单正文要求(必须是字母数字)的块组成整个文本。这是语法:

我遇到的问题是,如果在第一个块之后的任何块中存在解析错误,我会收到一条无用的错误消息。举个例子,考虑以下文本:

这给出了一个有用的错误消息:

但是,如果我有以下文字:

我收到此错误:

看起来它与序列的第一个实例(第一个块)匹配,但是当它在第二个块上失败时,它不会将整个事情视为失败,这就是我想要它做的。我希望它给我一个与块 0 类似的错误,这样我就可以确切地知道该块出了什么问题,而不仅仅是无法解析整个块。

任何帮助将不胜感激!

0 投票
2 回答
381 浏览

python - python parsimonious:解析带有多个注释标记的配置文件

我正在尝试解析一个配置文件,其中一个条目的值可能有一个注释标记。所以规则只有最后一个注释标记是值和注释之间的分隔符。

例如:

我可以简约来做到这一点吗?如何编写区分;符号后最后一部分的语法?

谢谢你。

0 投票
1 回答
1929 浏览

python - 使用 Parsimonious Python 库解析多行文本

我正在尝试使用 python parsimonious 库解析多行文本。我已经玩了一段时间了,无法弄清楚如何有效地处理换行符。下面是一个例子。下面的行为是有道理的。我在简约问题中看到了Erik Rose的评论,但我无法弄清楚如何在没有错误的情况下实现它。感谢这里的任何提示...

适用于单行输出,print(grammar.parse(singleline_text))给出:

但是多行给出了问题,我无法根据上面的链接解决,print(grammar.parse(multiline_text))给出:

这是我尝试过的一件事,但没有奏效:

(从 211 行堆栈跟踪截断):

0 投票
2 回答
914 浏览

python - parsimonious - 规则“规则”完全匹配,但没有消耗所有文本

我正在为表达式制作一个简单的解析器,这是我的代码:

我收到此错误:

我也尝试过 Lark-parser,但也无法解决这个问题。帮助表示赞赏。

0 投票
0 回答
156 浏览

python - 用简约解析成分表

嗨,我试图用简约的方法解析配料表,但没有任何运气。以上是我迄今为止尝试编写的所有语法。我想用逗号分割成它的组成部分,忽略嵌套括号,如下面更复杂的测试字符串:

每个成分可能有一个由“(”或百分比或类似“B2”的词括起来的子成分列表,并由一个或多个词组成。

0 投票
1 回答
55 浏览

python - python解析:什么文件格式使用`=>`或者如何读取自定义输入文件到dict

这里使用 zmdp 求解器时,我遇到了一种我以前从未见过的时髦文件格式,它=>用于分配。我无法从包文档中找出它是什么格式(它说它是一种“策略”格式,但它必须基于更通用的东西)

我研究了很多关于什么是解析此类文件的简单方法(在 Python 中),并且还阅读了这篇博客文章,其中有多种用于词法分析和解析的选项(对于我的示例来说,看起来最有前途的工具似乎是吝啬吝啬)。
然而,无论我能想到什么解决方案,我都觉得我在重新发明轮子,而词法分析和解析似乎对我正在尝试做的事情来说是一种矫枉过正。
我还发现了这个stackoverflow 问题,巧合的是,它似乎也与使用的格式有关=>. 但是,在代码方面懒惰和简约,我不太喜欢正则表达式解决方案。我的直觉告诉我,必须有一个 3-4 行的解决方案才能将输入文件写入 python dict 或类似有用的格式。特别是,我怀疑这已经是我不知道的某种格式的标准语法(显然不是 csv、json、yaml 或 xml)

因此,问题是:以上是标准文件格式吗?如果是,它是什么?
如果没有,我如何在 Python3 中优雅而紧凑地解析这个文件,即不为每个关键字正则表达式?

0 投票
1 回答
157 浏览

python - Parsimonious ParseError

更深入地研究语法和 PEG,我想要一个具有以下语法的 DSL:

我在parsimonious这里使用以下语法:

但是,对于上面的文本,这失败了

为什么?我没有指定term( term )orterm吗?
为什么它选择规则variable代替(当然失败了)?

0 投票
2 回答
592 浏览

python - NodeVisitor class for PEG parser in Python

Imagine the following types of strings:

Now, I'd like to get the expressions in parentheses, so I wrote a PEG parser with the following grammar:

which parses just fine with

Now the question arises: how to write a NodeVisitor class for this tree to get only the factors? My problem here is the second branch which can be deeply nested.


I tried with

but to no avail, really (factors bubble up in duplicates).
Note: This question is based on another one on StackOverflow.

0 投票
1 回答
204 浏览

python - parsimonious - 一个简单的递归模式

我希望能够解析简单的规则表达式,这些表达式可以使用连接词andorin parsimonious连接在一起。

我尝试了一个非常基本的语法,它解析一个简单的表达式,但是一旦我开始引入连词就失败了。

测试一个简单的案例:

成功解析(至少它似乎构建了一个节点树 - 我还没有深入了解它对内容的分割程度 - 但乍一看似乎很好)

但是对于更复杂的情况:

它返回IncompleteParseError: Rule 'rule' matched in its entirety, but it didn't consume all the text. The non-matching portion of the text begins with 'and field2 not equal' (line 1, column 20).

我制定的语法试图允许任意连词,但我一定遗漏了一些东西。

我尝试调整语法以明确区分顶级类和低级类:

现在,在运行两部分短语时:

而不是IncompleteParseError,我得到一个RecursionError: maximum recursion depth exceeded in comparison.

0 投票
1 回答
159 浏览

parsing - 为什么简约不解析这个?

我似乎完全无法理解为什么无法解析。以下是我的简单语法(只是试图理解简约,因此语法可能没有意义)。

ASELECT 10解析但由于某种原因,aSELECT A无法解析。我的理解要么存在,object_name要么alias应该存在。我究竟做错了什么?提前致谢。