问题标签 [trifecta]

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 投票
2 回答
213 浏览

haskell - 身份解析器

作为练习¹,我编写了一个仅使用char解析器和Trifecta的字符串解析器:

解析器可以很好地完成它的工作:

identityParser然而,我对我申请的具体内容并不满意foldr。必须为pure.

我的第一个直觉是使用memptyParser不是幺半群。它一个应用程序,但empty构成一个不成功的解析器²。

相反,我正在寻找的是一个解析器,它在与其他解析器结合时作为中性元素工作。它应该什么都不做,即不推进光标并让下一个解析器使用该字符。

Trifecta 或其他库中是否有上述身份解析器?还是解析器不打算在 a 中使用fold


¹ 该练习来自Haskell Programming from first principle一书的解析器组合器章节。

² 正如cole 所指出的Parser是一个Alternative,因此是一个幺半群。该empty函数源于Alternative, 而不是Parser的应用实例。

0 投票
1 回答
467 浏览

parsing - 跳过所有内容,直到成功解析

我想从这样的文本中解析所有的日子:

使用 Trifecta,我定义了一个函数来解析一天:

以这种方式解析一天是有效的。我遇到的麻烦是忽略文本中不是一天的任何内容。

以下无法工作,因为它假定文本块的数量不是一天:

我认为有一种用 Trifecta 表达这一点的简单方法,但我似乎找不到它。


这是整个模块,包括要解析的示例文本:

0 投票
1 回答
132 浏览

parsing - 如何使用解析器组合器进行回溯搜索?

我有一个解析器列表,例如[string "a",string "ab"]“重叠”。我既不能改变解析器本身也不能改变它们的顺序。

使用这些解析器,我想解析一个令牌序列,每个令牌都与其中一个解析器完全匹配,例如"aaaab", "ab", "abab"但不是"abb"

如果没有解析器,我只会实现部门优先搜索,但我想用解析器解决这个问题。

我得到了这么远:

这失败了,因为它会解析"a"两次,而不是回溯,因为choice不这样做。此外,string "a"两次都成功了,因此可能无法再检索消耗的输入。如何实现一个可以回溯并生成解析结果列表的解析器,例如Success ["a","ab"]

如果我要求输入将标记分开,我仍然无法使其工作:

这有效:

但这不会:

0 投票
1 回答
76 浏览

parsing - 解析时如何跳过指定的符号

我正在尝试编写一个可以解析下面所有三个电话号码的trifecta解析器。当我尝试parsePhone通过调用使用parseString parsePhone mempty phoneNum2时,解析器在第一个破折号处失败并说它是预期'('的。

当我在 phoneNum1 上调用解析器时,它失败了')',说它是预期'('的。

为什么我的 skipSymbol 解析器失败了?我认为由于我使用了<|>,解析器不会检测到'('并继续前进。我尝试的技术skipSymbol一定会失败吗?

0 投票
1 回答
57 浏览

ssl-certificate - Trifecta DataPrep 的 SSL 证书已过期

我只是按照基本文档来调用 DataPrep API: https ://cloud.google.com/dataprep/docs/html/API-Workflow---Run-Job_145281449

我已准备好访问令牌,但似乎 DataPrep API 的证书已过期

您可以查看:https ://whatsmychaincert.com/?api.clouddataprep.com

目前它说:

api.clouddataprep.com 有一个包含过期证书的可信链。此链适用于现代 Web 浏览器(它们将使用指向不同受信任根的链),但可能会在较旧的客户端(尤其是 OpenSSL 1.0.x)中失败。

0 投票
1 回答
88 浏览

haskell - 理解 trifecta 解析器 <|> 并尝试

在阅读 Haskell 的书时,我遇到了trifecta

我试图绕开我的头,但仍然无法理解 <|>

我有以下问题。

简单来说 (<|>) = Monadic 选择?

p = a <|> b -- 使用解析器a如果没有则使用b

如果是,那么为什么下面的解析器失败了?

在完美世界中,如果 a 是parseFraction将失败,那么<|>应该使用小数,但事实并非如此。但是当我使用尝试它的工作原理。

  1. 我错过了什么?
  2. 为什么我们需要在 <|> 应该在第一次失败时运行第二个解析器时使用try ?

parseRationalOrDecimal = try (Left <$> parseFraction) <|> (Right<$> decimal)