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

dart - 不支持的操作:无法解析引用

使用token来自https://github.com/petitparser/dart-petitparser/blob/ddd9921d702dd18cda4e2f84190777b7dc20b3e2/example/dart/src/grammar.dart的方法(使用默认trim解析器)

需要改变什么来摆脱错误?

不支持的操作:无法解析引用

0 投票
1 回答
193 浏览

java - 使用 PetitParser 解析非对称二元运算符时如何获得正确的关联性?

我正在尝试使用PetitParser制作一个基本的数学解析器,但我无法使用非对称二元运算符(如减法或除法)获得正确的顺序。

我有这个小例子,它只能解析(非负)整数和-二元运算符,并发出一个带有括号的相同解析表达式的字符串(这样我就可以看到关联性):

这将打印(1 - (2 - 3))- 尽管 is 的正确关联1 - 2 - 3((1 - 2) - 3)

现在,我明白我的语法是这样的:

((1 - 2) - 3)也是如此term '-' number。但是当我尝试切换它们时:

我遇到了无休止的递归:

那么......我怎样才能以应该解析的方式解析表达式?

更新

根据@rici 的建议,我已将其更改为使用ExpressionBuilder

通过使用left()orright()我可以选择二元运算符的结合性。

0 投票
1 回答
170 浏览

dart - 忽略转义的多行引号

我想使用 Dart PetitParser 解析 GraphQL 文档。为了能够支持 BlockString (多行字符串),我正在寻找一种方法来获得

这部分出来

完整语法https://facebook.github.io/graphql/draft/#sec-String-Value

0 投票
2 回答
123 浏览

smalltalk - 如何在 PetitParser 中定义 Pascal 变量

这是我试图在 PetitParser 中实现的(简化的)EBNF 部分:

我所做的是将所有这些产品(除了identifier)添加为我的子类的 ivarsPPCompositeParser并定义相应的方法如下:

最后,我创建了解析器的一个新实例并将 message 发送给它parse: 'a.b[0]'

问题:我得到一个堆栈溢出。

0 投票
3 回答
546 浏览

java - 简单的分隔符解析器

我正在尝试PetitParser来解析一个用逗号分隔的简单整数列表。例如:“1、2、3、4”

我尝试创建一个整数解析器,然后使用 delimitedBy 方法。

这将返回一个列表,其中包含已解析的整数以及分隔符。例如:[1, ,, 2, ,, 3, ,, 4]

有没有办法从结果中排除分隔符?

0 投票
2 回答
90 浏览

smalltalk - PetitParser:如何匹配令牌集

在 PetitParser2 中,如何匹配一组封闭的标记,例如月份名称?例如(在伪代码中) [ :word | MonthNames anySatisfy: [ :mn | mn beginsWith: word ] ] asParser.

PPPredicateSequenceParser似乎有可能,但您似乎必须提前知道字符串的大小。我想我可以这样做:

但我想知道是否有内置/直截了当的东西

0 投票
1 回答
74 浏览

dart - petitparser 解析器可以安全地重用吗?

在 Dart 中使用petitparser,是否可以重用解析器?

例如,假设我们要解析 IPv4 样式的地址,例如192.168.1.21.

最初,我写道:

我注意到我的序列解析器有 7 个孩子,正如预期的那样,但是数字解析器都是相同的(至少都具有相同的hashCode),而点解析器却是不同的。尽管如此,解析器似乎工作。

我尝试过:

在这种简单的情况下同样有效,但代价是()内存中的一些额外的 s 和少量的对象。

有什么理由更喜欢一种风格而不是另一种风格?有没有更好的方法来写这个?

我只是幸运,我的第一次尝试成功了吗?如果我将所有finals 更改为返回的函数Parser,似乎我采用了GrammarDefinition. 我是否必须/我应该ref(parser)自始至终使用语法?

我的整体解析器是针对非递归语法的,目前我没有使用GrammarDefinition. 到目前为止,当我认为我的语法中没有任何递归时,将我所做的修改为语法定义有什么好处?

0 投票
1 回答
45 浏览

java - PetitParser:有没有像 plus() 这样但有上限的解析器?

是否有像 plus() 这样具有上限的解析器来模拟像这样的表达式Item <- [a-zA-Z0-9]{1,5}

同样对于类似的东西Item <- [a-zA-Z0-9]{3,5}

0 投票
1 回答
37 浏览

dart - 为什么 flatten 会摆脱映射值?

我正在尝试解析一个句子,同时将数字转换为它们的数字表示。

作为一个简单的例子,我想要句子

三个苹果

解析并转换为

3个苹果

使用此代码简单代码,我实际上可以正确解析句子并将转换为3,但是当我尝试将结果展平时,3恢复为

我错过了什么吗?展平行为是否正确?

在此先感谢 L

0 投票
1 回答
170 浏览

flutter - Dart PetitParser 获取使用 ExpressionBuilder 创建的 AST 数据结构

我是 petitparser 的新手,但它看起来像是解析器的声波螺丝刀。

对于我的第一个项目,我正在构建代码来解析一个简单的表达式,该表达式构建我的 Node 对象的 AST 树,然后使用一些规则遍历该树以最小化不需要的括号。我不知道将什么传递给 .parse() 的输出(似乎是一个结果)来访问我定义的树,所以我可以在 AST 的顶部调用 .visit() 。有任何想法吗?