问题标签 [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.
instaparse - Instaparse:有错误但未报告
我正在尝试使用 Instaparse 建立语法。我经常发现这段代码在第一个断言失败,发出“空列表”:
我总是解决问题,但这需要反复试验。有什么方法可以查明错误吗?
解决问题的一个示例是从input
上述代码中的文件中删除尾随空格。
编辑
根据 Stefan 的回答,我更改了代码:
上面的代码可以解决问题:总是得到一个准确的答案。对我来说,insta/parses
返回一个空列表后,insta/parse
需要调用以获取错误信息并不是那么明显。使用解析错误文档将产生比上面更好的代码。它显示了错误信息实际上是如何存在于元数据中的,以及如何检索它 - 这个问题的答案已经在文档中!
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
以上吗?
clojure - 如何消除 EBNF Instaparse 语法中的歧义
我如何防止结构规则中的“,”字面量被解析为 Instaparse 的以下 EBNF 语法中的运算符?
语法:
clojure - 在 Instaparse 中以字符串形式获取错误消息的最简单方法?
Instaparse可以将漂亮的错误消息打印到 REPL
但我找不到将消息作为字符串获取的内置函数。怎么做?
parsing - 用 Clojure Instaparse 匹配任何东西
我想解析一种简单的语言,它基本上在一行文本前面有几个特殊的字形或字符。如果它没有这些,那么文本行就被当作数据。
例如 :
第一行和第二行有特殊含义,因为 + 和 ! 在前面,该行的其余部分是该指令的数据。但第三行只是数据。
我如何在 Instaparse 中表达这一点?
基本上我想说任何其他规则都不匹配的字符串应该由 DATA 终端匹配。
clojure - postwalk 评估算术表达式
我正在尝试使用 Instaparse 制作一个简单的算术表达式评估器。解析器似乎工作正常,但我无法弄清楚如何评估返回的嵌套向量。目前我正在使用 postwalk,像这样
postwalk 确实遍历了向量,但我得到了一个嵌套列表,例如
clojure - 允许任意规则顺序的语法
我正在(尝试)设计一种特定领域的语言(我称之为“华氏”)来设计引用风格。
用华氏温度编写的程序:
- 必须正好有一个
citation
块 - 可能有零个或多个
macro
块。
这是一个简化但有效的示例:
该语法将把上面的代码识别为语法正确:
然而,“块”的顺序(例如macro
or citation
)应该无关紧要。
问题:我应该如何更改我的语法,以便它识别以下程序在语法上是正确的?
PS:我打算添加其他顺序也无关紧要的可选块。
clojure - 使用 instaparse 动态构建 clara 规则时遇到问题
我遵循了这个示例Insta Declarative DSL,其中我们使用 Clara 和 instaparse 来使用 DSL 并生成规则。
一切都按预期对我有用,但只有一个问题。我无法从以 lhs 表示的条件访问变量绑定并在 rhs 中使用它。例如,这里是来自上述示例的代码片段。
现在如果我需要从 lhs 访问 Customer name 属性并在 rhs 的插入操作中使用它,我将如何修改上述转换函数以实现相同的功能。
我需要编写一个转换函数,它应该吐出类似于下面的规则。
performance - 令人难以置信的糟糕解析时间
我需要分析 Elisp (Emacs Lisp) 代码,所以我使用Instaparse为它编写了一个解析器。我预计它会很慢,但是每秒执行 1k 行太慢了,即使在计算器(或我相当旧的 i7)上也是如此。它会那么糟糕还是我做错了什么?
这是明确的,我尽量保持向前/向后看,不幸的是,Elisp 对符号的构成非常自由,所以我不得不在前面/后面添加一些以区分数字和符号。此外,我试图通过将符号、数字和关键字解析为“ident”来推迟这一点,它只给了我 30% 的时间。从我的测试来看,Instaparse 似乎在递归规则方面遇到了很多困难,而 lisps 具有高度递归的性质,所以也许我没有把它搞砸 - 它就是那么慢......
解析器: