问题标签 [petitparser]

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

petitparser - 使用 petitparser 解析分隔字符串

我最初希望(手动)为我的语法编写一个简单的分词/解析器,但我的一个要求意味着分词有点繁琐。

我需要能够支持分隔字符串的概念,其中分隔符可以是任何字符。例如。字符串最有可能使用双引号(例如"hello")来分隔,但它也可以很容易地使用/hello/or or or or ,hello,or orologicallyxhellox

因此,我开始研究可能有哪些替代方法可以进行组合标记/解析......这是我偶然发现小解析器的时候。

只是好奇这种类型的分隔字符串是否可以使用 Petit Parser 进行解析?谢谢。

0 投票
1 回答
166 浏览

dart - 使用 Dart petitparser 构建表达式解析器,卡在节点访问者上

我有更多的表达式解析器在工作(Dart PetitParser 可以使用 ExpressionBuilder 创建的 AST 数据结构)。它似乎正在为数​​字和表达式前面的浮点数、括号、幂、乘法、除法、加法、减法、一元负数生成准确的 AST。(节点要么是文字字符串,要么是一个优先于 List 有效负载的对象,该有效负载被遍历和连接。)

我现在被困在访问节点上。我可以完全访问顶部节点(感谢 Lukas),但我一直在决定是否添加括号。例如,在 20+30*40 中,我们不需要 30*40 左右的括号,并且解析树正确地具有更接近根的节点,因此我将在遍历期间首先点击它。但是,在查看 30*40 节点时,我似乎没有足够的数据来确定它是否需要括号,然后再转到 20+.. 一个非常相似的情况是 (20+30)*40,它得到使用更接近根的 20+30 正确解析,所以再一次,当访问 20+30 节点时,我需要在继续 *40 之前添加括号。

这必须是一个已解决的问题,但我从未上过编译器学校,所以我对 AST 的了解刚好够危险。我错过了什么“哈哈”?

0 投票
1 回答
27 浏览

flutter - 我的 PetitParser 映射函数中缺少空格

我试图解析带有函数调用的普通文本。

它很接近,但我对普通文本部分有一些问题。当我想映射这些点时,点就在那里,但缺少空白。

当我解析“Hello World”时。每个是第一个 ["Hello", null] 然后是 ["World", "."] 我希望它是第一个 ["Hello", " "] 然后是 ["World", "."]。

感谢您的帮助,对不起我的英语不好:)

0 投票
1 回答
72 浏览

flutter - petitparser 未解析 ref0

petitparser是一个用dart编写的解析器生成器,例如在Flutter中使用。

根据这个页面petitparser允许用来ref0引用当前的解析类。

使用语法定义部分中,您阅读了以下语句:

要引用在同一定义中定义的产生式,请使用[ref0] 并将函数引用作为参数。

根据文档,您必须将此依赖项定义为petitpackage

并包括:

不幸的是,ref0ref1没有解决。为什么?

如果包和源不同步ref0:是否存在用等效有效代码替换的简单方法?

此外,我没有在API-documentationref0中找到/ 。ref1

0 投票
1 回答
115 浏览

flutter - 使用 Flutter 的 PetiteParser 创建 FHIRPath

我想使用 petitparser 寻求一些指导(我正在更新这个问题)。我试图在 dart 中重新创建一个名为FHIRPath的基于 json 的语法。我是这样的语法新手,所以我花了一点时间来理解我想要它做什么(或者我认为我想要它做什么)。我已经设法让它解析 json 路径和一般功能,它看起来像这样:

如果我运行这个函数:

这是结果:

到现在为止还挺好。但是现在如果我改变我的语法类,并添加一个相等的解析器:

我收到以下错误:

正如@lukas-renggli 指出的那样,它似乎进入了一个无限循环。所以至少我认为这就是正在发生的事情。但我认为我不明白它是如何匹配导致无限循环的。

0 投票
1 回答
42 浏览

dart - 如何获取两个相同元素之间的内容

我想解析此类数据的根元素如下

如果我解析成功,将返回一个列表,其结构类似于以下

我也参考了这个库dart-xml

这是我的核心解析逻辑

但是不知道怎么解析内容,因为内容中包含任意字符,比如和根元素同名。</p>

还要感谢这个库dart-petitparser和作者,谢谢。

0 投票
1 回答
54 浏览

flutter - PetitParser 和括号

抱歉,我遇到了另一个关于使用 PetitParser 的问题。我已经弄清楚了我的递归问题,但现在我遇到了括号问题。如果我需要能够解析以下两个表达式:

  1. '(use = "官方").empty()'
  2. '(( 5 + 5 ) * 5) + 5'

我尝试过执行以下操作:

但这不适用于第一个表达式。如果我试试这个:

它不适用于第二个表达式。关于如何解析两者的任何建议?

0 投票
1 回答
43 浏览

java - Java petitparser 可选的表达式结尾

我需要一个仅从文本文件中获取重要标记部分的解析器。这是示例输入:

我写了这个解析器:

使用这个小实用程序 Pojo 来获取重要数据:

像这样运行:

它给了我一个例外: org.petitparser.context.ParseError: end of input expected 但没有明显的原因,因为最后一行是else一种内容,我们希望它具有星级条件,它是以下内容的一部分exprref("else").starLazy(ref("expr_start")).optional()

我如何更改解析器,所以它会期望 et 的结尾在输入的末尾exprelse或没有可能的换行符?使else贪婪使它消耗第二个expr_body。使其any().optional()导致无限循环挂起。有什么解决办法吗?

0 投票
1 回答
38 浏览

dart - 使用空格作为列表分隔符

我可以使用 dart-petitparser 成功解析逗号分隔的列表,但是当遇到空格分隔的列表时,相同的代码会失败:

它失败并显示以下内容:

我究竟做错了什么?我已经挖掘了一堆示例语法,并没有在任何地方找到以空格分隔的列表。