问题标签 [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.
python - 节俭地为序列块打印有用的错误消息
我正在使用 parsimonious(python PEG 解析器库)来解析如下所示的文本:
它是一系列具有简单正文要求(必须是字母数字)的块组成整个文本。这是语法:
我遇到的问题是,如果在第一个块之后的任何块中存在解析错误,我会收到一条无用的错误消息。举个例子,考虑以下文本:
这给出了一个有用的错误消息:
但是,如果我有以下文字:
我收到此错误:
看起来它与序列的第一个实例(第一个块)匹配,但是当它在第二个块上失败时,它不会将整个事情视为失败,这就是我想要它做的。我希望它给我一个与块 0 类似的错误,这样我就可以确切地知道该块出了什么问题,而不仅仅是无法解析整个块。
任何帮助将不胜感激!
python - python parsimonious:解析带有多个注释标记的配置文件
我正在尝试解析一个配置文件,其中一个条目的值可能有一个注释标记。所以规则只有最后一个注释标记是值和注释之间的分隔符。
例如:
我可以用简约来做到这一点吗?如何编写区分;
符号后最后一部分的语法?
谢谢你。
python - 使用 Parsimonious Python 库解析多行文本
我正在尝试使用 python parsimonious 库解析多行文本。我已经玩了一段时间了,无法弄清楚如何有效地处理换行符。下面是一个例子。下面的行为是有道理的。我在简约问题中看到了Erik Rose的评论,但我无法弄清楚如何在没有错误的情况下实现它。感谢这里的任何提示...
适用于单行输出,print(grammar.parse(singleline_text))
给出:
但是多行给出了问题,我无法根据上面的链接解决,print(grammar.parse(multiline_text))
给出:
这是我尝试过的一件事,但没有奏效:
(从 211 行堆栈跟踪截断):
python - parsimonious - 规则“规则”完全匹配,但没有消耗所有文本
我正在为表达式制作一个简单的解析器,这是我的代码:
我收到此错误:
我也尝试过 Lark-parser,但也无法解决这个问题。帮助表示赞赏。
python - 用简约解析成分表
嗨,我试图用简约的方法解析配料表,但没有任何运气。以上是我迄今为止尝试编写的所有语法。我想用逗号分割成它的组成部分,忽略嵌套括号,如下面更复杂的测试字符串:
每个成分可能有一个由“(”或百分比或类似“B2”的词括起来的子成分列表,并由一个或多个词组成。
python - python解析:什么文件格式使用`=>`或者如何读取自定义输入文件到dict
从这里使用 zmdp 求解器时,我遇到了一种我以前从未见过的时髦文件格式,它=>
用于分配。我无法从包文档中找出它是什么格式(它说它是一种“策略”格式,但它必须基于更通用的东西)
我研究了很多关于什么是解析此类文件的简单方法(在 Python 中),并且还阅读了这篇博客文章,其中有多种用于词法分析和解析的选项(对于我的示例来说,看起来最有前途的工具似乎是吝啬和吝啬)。
然而,无论我能想到什么解决方案,我都觉得我在重新发明轮子,而词法分析和解析似乎对我正在尝试做的事情来说是一种矫枉过正。
我还发现了这个stackoverflow 问题,巧合的是,它似乎也与使用的格式有关=>
. 但是,在代码方面懒惰和简约,我不太喜欢正则表达式解决方案。我的直觉告诉我,必须有一个 3-4 行的解决方案才能将输入文件写入 python dict 或类似有用的格式。特别是,我怀疑这已经是我不知道的某种格式的标准语法(显然不是 csv、json、yaml 或 xml)
因此,问题是:以上是标准文件格式吗?如果是,它是什么?
如果没有,我如何在 Python3 中优雅而紧凑地解析这个文件,即不为每个关键字正则表达式?
python - Parsimonious ParseError
更深入地研究语法和 PEG,我想要一个具有以下语法的 DSL:
我在parsimonious
这里使用以下语法:
但是,对于上面的文本,这失败了
为什么?我没有指定term
为( term )
orterm
吗?
为什么它选择规则variable
代替(当然失败了)?
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.
python - parsimonious - 一个简单的递归模式
我希望能够解析简单的规则表达式,这些表达式可以使用连接词and
和or
in 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
.
parsing - 为什么简约不解析这个?
我似乎完全无法理解为什么无法解析。以下是我的简单语法(只是试图理解简约,因此语法可能没有意义)。
ASELECT 10
解析但由于某种原因,aSELECT A
无法解析。我的理解要么存在,object_name
要么alias
应该存在。我究竟做错了什么?提前致谢。