问题标签 [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 - 解析表达式语法中的转义字符串
我正在尝试使用 python 库parsimonious为小型语言实用程序编写语法,但我正在努力编写一个涵盖字符串的部分,尤其是带有转义引号和其他特殊字符的字符串。
我有以下内容:
escapedString
好像还没有定义,但应该接受任何人们合理地期望编程语言中的字符串接受的东西。我想不出从哪里开始。有没有人有什么建议?
python - parsimonious parser - error trying to parse assignment grammar
I'm using the Python Parsimonious Parser to try to build an interpreter for a simple language I'm designing. I watched this tutorial video which was very helpful, and now I'm slowly modifying the code to match my own rules. I'm stuck on an assignment rule originally defined as:
I modified the rule slightly with the following grammar:
I'd like the parser to evaluate SET a, 7
for example, the same as a = 7
and bind the value 7
to the name a
. However, when I attempt to parse it, I get this error from the Parsimonious library:
I'm fairly new to parsing/lexing and am not entirely sure if I defined the rule correctly. Was hoping someone with more parsing/lexing experience can help me properly define the rule and explain where I went wrong. Also perhaps explain the Parsimonious error to me?
python - 解析二进制数字序列
如何在 python 中解析二进制数字序列。以下是我正在尝试做的一个例子。
我有一个二进制数字序列,例如
而且,我需要解析它并提取数据。
假设上面的序列包含start、id、data 和 end 字段
start 是 2 位字段,id 是 8 位字段,数据字段可以在 1 到 8192 位之间变化,end 是 4 位字段。
解析后我期望输出如下:
我在我的一个应用程序中使用它。我可以使用正则表达式解析序列,但问题是正则表达式必须由用户编写。因此,作为替代方案,我使用 BNF 语法,因为语法更具可读性。
我尝试使用 python 的简约和pyparsing解析器来解决这个问题。但我无法找到可变长度字段的解决方案。
我写的可用于python的语法parsimonious
如下:
由于数据字段是可变长度的,并且解析器是贪婪的,所以上述序列无法与上述语法匹配。解析器将结束字段位带入数据字段。
我只是将我的问题简化为上面的示例。
让我描述一下完整的问题。有 3 种数据包(我们称它们为 Token、Handshake 和 Data 数据包)。令牌和握手包是固定长度的,数据包是可变长度的。(上面的例子是数据包的例子)
输入由连续的比特流组成。每个数据包开始由“开始”模式标记,数据包结束由“结束”模式标记。这两者都是固定的位模式。
令牌包语法示例:
握手包语法示例:
顶级规则示例:
如果只有一种类型的数据包,那么切片将起作用。但是当我们开始解析时,我们不知道最终会匹配到哪个数据包。这就是为什么我想到使用语法的原因,因为这个问题与语言解析非常相似。
我们可以让切片方法在我们有 3 种不同的数据包类型要解析的情况下工作吗?
解决这个问题的最佳方法是什么?
提前致谢,
python - 在python中解析位数组
我在我的一个项目中使用位数组来存储位(从具有“0”和“1”的文件中读取,以及所需的时间信息。文件也可以没有必要的字段,如注释等)。现在我想解析这些位。我在阅读文件时过滤掉了文件中所有不必要的东西。所以我需要一个可以解析位(位数组)的解析器。
目前,我正在使用简约解析器来解析字符串(即“0”和“1”),但似乎这个解析器只是将字符串作为输入。这是所有解析器的情况吗?或者我可以编写可以匹配python位数组/位字符串或列表或任何其他非字符串数据结构的语法规则吗?
因此,如果我想解析位(位数组),最好的方法是什么?
例子:
我在文件中有一个字符串“011000111100011010”。由于字符串中的“0”是一个字符,因此它在内存中占用 8 位。由于它浪费内存(因为我只需要一点来存储 0)我打算将这些位存储在位数组中。
说,我想匹配一个帧(长度为 18 位),它们可以表示如下
那么如何编写一个可以匹配这些位的简单语法规则。
这就是我使用简约的方法。(这里我认为“0”作为一个字符)
这只是一个例子,实际上场景要复杂得多。甚至文件大小也太大(~1GB)。所以我正在寻找一个可以存储位(不是字符)的数据结构和一个可以在 python 中解析位(不是字符)的解析器
python - 简约的 OrderedDict
我parsimonious
用来解析一些csv
. 我的问题是生成的输出没有按预期的顺序输出。例如,如果输入字符串是
那么我希望得到:
我得到的是:
对于我尝试的每个输入,这都是一个一致的问题:第一个标记是条目 OrderedDict 中的最后一项,但我不知道为什么。
这是我的代码:
python - 为什么 Parsimonious 用 IncompleteParseError 拒绝我的输入?
我一直在尝试为我一直在设计的一种语言制定基本框架,并且我正在尝试使用Parsimonious为我进行解析。截至目前,我已经声明了以下语法:
当我尝试输出一个简单输入字符串的结果 AST 时,例如"{ do-something some-argument }"
:
Parsimonious 决定彻底拒绝它,然后给了我这个有点神秘的错误:
起初我认为这可能是与我的空格规则有关的问题_
,但是在尝试在某些地方删除空格规则失败后,我仍然遇到了同样的错误。
我尝试过在线搜索,但我发现似乎与远程相关的只是这个问题,它对我没有任何帮助。
我的语法有问题吗?我没有以正确的方式解析输入吗?如果有人对此有可能的解决方案,将不胜感激。
python - 在自定义语法中修改变量的最有效方法?
我正在使用一个适当的驾驶模拟器,它在Scilab的定制版本中生成“场景”文件。我提供了一个 11,000 行长的“主”文件,我需要从中替换某些值以生成n 个版本的场景。
单亲的语法的一个最小示例是TASK
这样的:
我需要用标准输入替换此脚本中的某些值。例如,有一个名称列表将替换LABEL
父级别下的值TASK
;并且必须用6 到 16 之间的随机数替换VALUE
第一个父母。VARIABLE
我的第一个解决方案是基于 Python REGEX,如下所示(但对于我寻求更改的每个值):
有人建议我可以用 Parsimonious 之类的东西编写自定义语法,然后用 Mustache 重新生成输出。
如您所见,这也不是解决问题的有效方法。大家觉得有什么更好的解决方案?
python - 将模型文件读入 PySD 时理解解析错误
当我尝试使用 Python 的 PySD 包读取 Vensim 模型文件 (.mdl) 时收到以下错误消息。
我的代码是:
我收到的错误是:
我已经搜索了这个特定的错误,但我找不到很多关于“下标列表”匹配规则失败的信息。
我很欣赏任何见解。谢谢你。
python - pysd 库 ParseError
我正在使用一个名为pysd
将vensim
文件转换为 Python 的库,但是当我尝试这样做时(库函数),我得到一个解析错误,但不明白它的含义。
这是我的日志。
python - 如何解析以相同字符开头的简约替代品
我正在使用parsimonious进行一些解析,但我无法弄清楚如何正确解析在无序中共享第一个字符的替代方案:
例如:
文本:
语法:
文本的第一行将正确解析,但第二行不会。看起来它匹配“>”然后因为看到“=”而被卡住。它从不匹配 ">=" 作为一个整体。我如何做到这一点而不必仔细指定这些?我尝试使用“&”进行前瞻匹配,但这似乎不起作用。