问题标签 [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 回答
2509 浏览

clojure - 我们如何使用 instaparse 为 clojure 代码定义语法?

我是解析的新手,希望分析一些 clojure 代码。我希望有人可以提供一个如何使用 instaparse 解析 clojure 代码的示例。我只需要处理数字、符号、关键字、sexp、向量和空格。

我希望解析的一些示例:

0 投票
1 回答
585 浏览

parsing - 如何测试不符合 Instaparse 语法(Clojure)的文本?

我在 Instaparse (Clojure) 中编写了一个使用上下文无关语法解析字符串的项目。现在我想测试几个输入字符串的解析结果。某些输入字符串可能不适合语法。到目前为止,我只测试了“不符合预期的解析字符串”。但我认为使用(is (thrown? ...)). 是否抛出异常?在我看来,Parse error...生成了一些输出(包含),但没有抛出异常。

我的 project.clj 是:

我的核心来源是:

我的测试来源是:

我应该如何测试错误(这里:当句子不以 a 结尾.但以 a结尾时!)?

0 投票
1 回答
104 浏览

clojure - 解决简单 Instaparse 语法中的歧义

[也张贴在Instaparse 邮件列表上,但也张贴在这里,因为我猜这是一个相当普遍的问题]

考虑语法

(这是Instaparse的 BNF 版本...)

B 可以单独出现,也可以在 S 之后出现;如果是后者,则应将其视为 er, S 表达式的一部分(不是双关语)。

例子:

我只希望匹配第二个结果 - 以便在可能的情况下将 B 包含在 S 中,并删除其他选项。需要对我的解析器做什么才能进行此更改?

此要点中显示的更多示例表达式。

0 投票
1 回答
456 浏览

clojure - 如何从instaparse遍历解析树

我正在试验 Clojure 和 Instaparse。我创建了一种小型玩具语言,但我陷入了如何正确处理生成的树的困境。这就是我得到的:

现在,作为一个例子,我想提取所有的 PropertyTypes。我有两种主要方式,我想为这两种方式提供解决方案。

  1. 通过指定路径;就像是[:ClassDescription :Properties :Property :PropertyType]
  2. 通过提取所有 :PropertyType元素,无论深度如何。

对于 A.,我的第一个想法是通过将它的某些部分转换为映射,insta/transform然后使用.get-inget-in

我也可以使用nth, 并将自己钻入结构中,但这看起来很麻烦,并且如果我添加另一层很容易损坏。

我的另一个想法是递归解决方案,我以相同的方式处理每个元素并循环遍历它并检查所有匹配项。

对于 B. 到目前为止,我唯一的解决方案是一个递归函数,它只是钻取所有内容并尝试匹配第一个元素。

我相信这些“手写”功能可以通过 , , , 等的巧妙组合来避免insta/transformmap可以filterreduce

0 投票
1 回答
130 浏览

clojure - 如何在 Clojure Instaparse 中解析 > 字符?

我正在尝试解析>Clojure Instaparse 中的字符。我已经尝试过|>|\>但解析器似乎无法识别其中任何一个。有谁知道正确的语法?

0 投票
2 回答
163 浏览

parsing - Clojure 中的 Instaparse 歧义

我在 insta 中遇到了模棱两可的解析问题。这是语法:

问题在于这样的标题## TODO Done- 我可以理解为什么存在歧义,我只是不确定解决它的最佳方法。例如

产生:

最后一个是我正在寻找的结果。如何最好地消除歧义并将结果缩小到该列表中的最后一个?

0 投票
1 回答
237 浏览

clojure - 你如何让 instaparse 跳过空格?

你如何让 instaparse 跳过标记之间的空格?

(我当然可以将空格本身定义为一个标记,并将其插入到每条规则右侧的所有元素之间,但我正在处理一个有超过 300 条规则的语法,并希望有一种方法说一次而不是说三百次。)

0 投票
2 回答
363 浏览

clojure - 有什么方法可以加快 instaparse 的速度吗?

我正在尝试在大小小于 700k 的 dimacs 文件上使用 instaparse,语法如下

像这样打电话

大约需要一百秒。这比我希望的要慢三个数量级。有什么方法可以加快速度,有什么方法可以调整语法或我缺少的一些选项吗?

0 投票
1 回答
106 浏览

clojure - Instaparse一系列数字或字母作为一片叶子?

所以我一直在搞乱 instaparse 并且它很棒,但是我一直试图避免使用正则表达式作为拐杖,它导致了一些更冗长。为了保持这种可读性,我们只说#'[A-z]'实际上是'A'|'B'|etc格式。

有没有什么办法不使用或(#'[A-z]+'如果我制定了一个数字顶级规则)来避免将它们作为后解析处理的一部分连接起来?#'[0-9]+[:word "foo123"][:number "123"]

0 投票
2 回答
310 浏览

instaparse - Instaparse:如何识别换行符

我想解析包含换行符的文件的文本。该文件可以在 Windows 或 Unix 中,但现在它是一个包含以下内容的 Windows 文件:

上面的文件内容已被读入,slurp并将包含一个换行符。这是我尝试使用的语法:

这个语法也是从一个文件中引入的,我相信这会让事情变得更容易一些:

“唯一需要的转义字符是字符串和正则表达式的普通转义字符(此外,instaparse 还支持单引号字符串中的 \')。”

换行符似乎没有被解析:

我需要设置什么<inside-comment>,以便错误出现在第二行的第一个星上,这将表明语法已识别换行符?