问题标签 [parboiled]

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

java - Pegdown 自定义 ParserPlugin 绑定失败

在尝试将自定义 ParserPlugin 实现到我正在编写的库(Maven 项目,JDK 8)时,我遇到了 pegdown v1.4.2 的问题:

自定义插件:

挂钩用法:

测试:

测试例外:

  1. 我可以以某种方式绑定我的 CustomHeadersParserPlugin 以避免幽灵般的反射吗?
  2. 如果没有,请告诉我如何在 pom.xml 中设置 maven-bundle-plugin 以使其与 pegdown v 1.4.2 一起使用。

我在这里发现了讨论问题,但我太新手了,无法单独处理 Maven 插件和反射。

0 投票
1 回答
109 浏览

scala - 使用 Parboiled 解析具有相同分隔符的不同输入类型

我想使用 Parboiled 来解析应该将类似源转换为不同类型的字符串。

具体来说,我试图将由相同分隔符分隔的单词的输入解析为(List[String], String)最后一个单词是元组的第二个元素的等价物。

例如,"a.bb.ccc.dd.e"应该解析为(["a", "bb", "ccc", "dd"], "e").

我的代码的简化版本如下:

这打印None得很清楚,我做错了什么。Parboiled 能够解析这个吗?

0 投票
2 回答
1264 浏览

scala - parboiled2 和 Spray 导致跨版本后缀冲突

我正在尝试将 parboiled2 作为依赖项添加到我的项目中,并按照计算器示例进行操作,但它与喷雾冲突。

我当前的build.sbt文件包括:

当我添加

我明白了

一些谷歌搜索也是如此,并且像往常一样,人们建议使用excludeSBT 的指令(我认为这在逻辑上没有意义,因为它不可避免地会导致像ClassNotFoundExceptionand之类的问题NoSuchMethodError)。尽管如此,我还是尝试了:

assembly当我尝试跑步时,我得到了惊喜

我还收到更多错误:

如果我注释掉 Spray 依赖项(和代码),我可以使用 Calculator 示例成功组装一个 jar。

对于我使用 parboiled2 来说,这是一个主要的表演障碍。exclude除了指令之外还有其他方法可以使这些东西起作用吗?有没有人有一个可以使用 Spray 和 parboiled2 的构建文件?如果有人设法用 onejar 或 ProGuard 绕过依赖地狱,如果他们能解释一下如何,我会很高兴的。

更新:

我的构建文件:

插件文件:

斯卡拉 2.11

似乎“简单地”移动 2.11 可以解决这个问题,但如果有一些其他库还没有准备好 2.11,这并不总是那么容易。尽管如此,我还是尝试了它,第二次我添加了 parboiled2 作为依赖项,它再次破坏了我的构建,叹息,这是新问题:Parboiled2 导致“加载类文件'Prepender.class'时检测到缺少或无效的依赖项”

0 投票
2 回答
928 浏览

scala - 使用 parboiled2 解析多行而不是字符串

我想使用parboiled2来解析多个 CSV 行而不是单个 CSV 字符串。结果将是这样的:

其中 CSVRecordParser 是我的 CSV 记录半熟化解析器。我遇到的问题是,对于我所尝试的,我不能这样做,因为煮熟的解析器需要在构造函数中输入,而不是在 run 方法中。因此,我可以为每一行创建一个新的解析器,这是不好的,或者找到一种方法将输入传递给解析器,用于我拥有的每个输入。我试图通过将输入设置为变量并将解析器包装在另一个对象中来破解解析器

然后CSVRecordParser.parse(input, separator)在我想解析一行时调用。除了这很可怕之外,它不起作用,而且我经常遇到与解析器以前的用法有关的奇怪错误。我知道这不是我应该使用 parboiled2 编写解析器的方式,我想知道实现我想用这个库做的最好方法是什么。

0 投票
1 回答
5142 浏览

scala - Parboiled2 导致“加载类文件‘Prepender.class’时检测到缺失或无效依赖项”

所以我最近几周一直在尝试使用 parboiled2,它可能是我一生中遇到的最难添加到构建中的依赖项。我当前的错误是 compile sbt assembly) 错误:

似乎根本不可能让 Spray 和 Parboiled2 一起玩得很好。

我已经尝试sbt clean并删除了我的target目录。我的构建文件基本上是这样的:

sbtVersion的是0.13.6,我的sbt-assembly版本是0.12.0

在升级到 2.11 并升级我的 specs2 依赖项之前,我得到了:parboiled2和 Spray 导致跨版本后缀冲突

0 投票
1 回答
438 浏览

scala - 是否有匹配 parboiled2 中的 unicode 可打印字符的规则?

作为更大解析器的一部分,我正在编写一个规则来使用 parboiled2 匹配如下字符串:

意大利菜

我想使用如下简单的东西:

org.parboiled2.ParseError但是由于字符串末尾的 unicode 字符,解析器失败了。

是否有一个我不知道的简单选项来匹配可打印的 unicode 字符?

0 投票
1 回答
1578 浏览

java - NoSuchMethodError:org.objectweb.asm.tree.ClassNode。(I)V 使用 Parboiled 时

我有以下程序,它执行解析器。这是在 grappa(半熟的叉子)中开发的

测试语法

但是,当我尝试执行上述程序时出现以下错误。

我有以下Maven 依赖项

  1. grappa-1.0.4.jar
  2. asm-debug-all-5.0.3.jar
  3. 番石榴-18.0.jar
  4. jitescript-0.4.0.jar

这是我的pom.xml

注意:我使用的是Eclipse Juno Service Release 2


一些失败的尝试


我注意到以下图标asm-debug-all-5.0.3.jar,我不确定这个图标在 eclipse juno 中的含义。

在此处输入图像描述

  1. 此外,在依赖项的pom.xmljitesscript-0.4.0.jar中,我注意到org.objectweb.asm包的重定位。但是,其中也包含ClassNode(int) jitescript更新的类是在2014 年 4 月 16 日,asm-debug-all-5.0.3在2014年 5 月 24 日

  2. 我试图删除 jitescript.jar 并更新了 maven 项目,还清理并构建了它,但仍然没有用。

  3. 我还通过手动包含上面列出的所有依赖项在 KEPLER 中测试了这一点,而没有使用 maven。但是,我仍然遇到同样的错误。这意味着问题不在于 Maven,而在于其他问题。

0 投票
1 回答
395 浏览

scala - 以 parboiled2 中的字符结尾的字符串,当字符串可以包含该字符时

我在编写 parboiled2 解析器时遇到了一个棘手的问题,即我需要匹配行的一部分,该行是一个字符串,其结尾由一个:字符标记。这很容易,除了字符串可以包含字符:

目前我有这个将字符串视为一组以冒号结尾的字符串并将它们连接起来,但这会消耗:我不想要的尾随,因为尾随:不是字符串本身的一部分。

我觉得我应该&(":")在这里的某个地方使用,但我在匹配插页式:字符的同时努力工作。

成功匹配示例(作为较长字符串的一部分):

  • localhost:->localhost
  • 1:::->1::
  • :::->::

不匹配:

  • :

任何建议都会受到欢迎,即使它是“你不能这样做”,所以我可以停止绞尽脑汁。


上下文是解析bindHAProxy 配置文件中的设置。给定以下(简化的)案例类的一些有效字符串示例是:

  • bind :80->Bind(Endpoint(None, Some(80)), Seq())
  • bind localhost:80->Bind(Endpoint(Some("localhost"), Some(80)), Seq())
  • bind localhost->Bind(Endpoint(Some("localhost"), None), Seq())
  • bind :80 param1->Bind(Endpoint(None, Some(80)), Seq("param1")))

换句话说,如果有一个字符串,它需要在 final 之前终止,:因为这表明存在端口。endpoint规则如下所示:

最终,端点的可匹配字符串由空格或行尾终止,因此一种选择是只捕获空格,然后单独解析字符串,但我希望在主解析器中完成。

0 投票
2 回答
430 浏览

scala - 如何使 parboiled2 匹配整个输入?

我编写了以下 hello-world parboiled2 解析器:

这主要按预期工作,例如它成功地将“1 + 2”解析为 3。

如果我给它输入无效的输入,例如“1 + (2”,我希望解析失败。但它实际上成功了,结果为 1。

看起来 parboiled2 只是解析输入的一部分,而忽略了它无法解析的其余部分。这是预期的行为吗?有没有办法强制解析器解析整个输入并在它不能这样做时失败?

0 投票
1 回答
417 浏览

java - 在 parboiled 中使用变量

我正在尝试使用parboiled Java library创建一个简单的 XML 解析器。

以下代码尝试使用变量来验证结束标记是否包含与开始标记相同的标识符。

org.parboiled.errors.GrammarException: 'null' cannot be automatically converted to a parser Rule但是,当我创建 ParseRunner 时,上述操作失败并显示错误消息。

看来我对如何在半熟中使用变量有一个基本的误解。谁能帮我解决这个问题?