问题标签 [instaparse]

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

instaparse - Instaparse:有错误但未报告

我正在尝试使用 Instaparse 建立语法。我经常发现这段代码在第一个断言失败,发出“空列表”:

我总是解决问题,但这需要反复试验。有什么方法可以查明错误吗?

解决问题的一个示例是从input上述代码中的文件中删除尾随空格。

编辑

根据 Stefan 的回答,我更改了代码:

上面的代码可以解决问题:总是得到一个准确的答案。对我来说,insta/parses返回一个空列表后,insta/parse需要调用以获取错误信息并不是那么明显。使用解析错误文档将产生比上面更好的代码。它显示了错误信息实际上是如何存在于元数据中的,以及如何检索它 - 这个问题的答案已经在文档中!

0 投票
1 回答
34 浏览

instaparse - Instaparse:是否支持否定?

运营商应该支持否定,-但我不能让它工作:

每次我尝试我都会收到错误:RuntimeException - occurs on the right-hand side of your grammar, but not on the left instaparse.cfg/check-grammar (cfg.clj:252). 我把它放在哪里似乎并不重要-

那么如何克服这个错误呢?或者还有其他方法可以做到custom-type以上吗?

0 投票
1 回答
137 浏览

clojure - 如何消除 EBNF Instaparse 语法中的歧义

我如何防止结构规则中的“,”字面量被解析为 Instaparse 的以下 EBNF 语法中的运算符?

语法:

0 投票
2 回答
134 浏览

clojure - 在 Instaparse 中以字符串形式获取错误消息的最简单方法?

Instaparse可以将漂亮的错误消息打印到 REPL

但我找不到将消息作为字符串获取的内置函数。怎么做?

0 投票
1 回答
157 浏览

parsing - 用 Clojure Instaparse 匹配任何东西

我想解析一种简单的语言,它基本上在一行文本前面有几个特殊的字形或字符。如果它没有这些,那么文本行就被当作数据。

例如 :

第一行和第二行有特殊含义,因为 + 和 ! 在前面,该行的其余部分是该指令的数据。但第三行只是数据。

我如何在 Instaparse 中表达这一点?

基本上我想说任何其他规则都不匹配的字符串应该由 DATA 终端匹配。

0 投票
3 回答
324 浏览

clojure - postwalk 评估算术表达式

我正在尝试使用 Instaparse 制作一个简单的算术表达式评估器。解析器似乎工作正常,但我无法弄清楚如何评估返回的嵌套向量。目前我正在使用 postwalk,像这样

postwalk 确实遍历了向量,但我得到了一个嵌套列表,例如

0 投票
1 回答
49 浏览

clojure - 允许任意规则顺序的语法

我正在(尝试)设计一种特定领域的语言(我称之为“华氏”)来设计引用风格。

用华氏温度编写的程序:

  • 必须正好有一个citation
  • 可能有零个或多个macro块。

这是一个简化但有效的示例:

该语法将把上面的代码识别为语法正确:

然而,“块”的顺序(例如macroor citation)应该无关紧要。

问题:我应该如何更改我的语法,以便它识别以下程序在语法上是正确的?

PS:我打算添加其他顺序也无关紧要的可选块。

0 投票
0 回答
83 浏览

clojure - 使用 instaparse 动态构建 clara 规则时遇到问题

我遵循了这个示例Insta Declarative DSL,其中我们使用 Clara 和 instaparse 来使用 DSL 并生成规则。

一切都按预期对我有用,但只有一个问题。我无法从以 lhs 表示的条件访问变量绑定并在 rhs 中使用它。例如,这里是来自上述示例的代码片段。

现在如果我需要从 lhs 访问 Customer name 属性并在 rhs 的插入操作中使用它,我将如何修改上述转换函数以实现相同的功能。

我需要编写一个转换函数,它应该吐出类似于下面的规则。

0 投票
2 回答
228 浏览

performance - 令人难以置信的糟糕解析时间

我需要分析 Elisp (Emacs Lisp) 代码,所以我使用Instaparse为它编写了一个解析器。我预计它会很慢,但是每秒执行 1k 行太慢了,即使在计算器(或我相当旧的 i7)上也是如此。它会那么糟糕还是我做错了什么?

这是明确的,我尽量保持向前/向后看,不幸的是,Elisp 对符号的构成非常自由,所以我不得不在前面/后面添加一些以区分数字和符号。此外,我试图通过将符号、数字和关键字解析为“ident”来推迟这一点,它只给了我 30% 的时间。从我的测试来看,Instaparse 似乎在递归规则方面遇到了很多困难,而 lisps 具有高度递归的性质,所以也许我没有把它搞砸 - 它就是那么慢......

解析器: