问题标签 [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.
haskell - 身份解析器
作为练习¹,我编写了一个仅使用char
解析器和Trifecta的字符串解析器:
解析器可以很好地完成它的工作:
identityParser
然而,我对我申请的具体内容并不满意foldr
。必须为pure
.
我的第一个直觉是使用mempty
但Parser
不是幺半群。它是一个应用程序,但empty
构成一个不成功的解析器²。
相反,我正在寻找的是一个解析器,它在与其他解析器结合时作为中性元素工作。它应该什么都不做,即不推进光标并让下一个解析器使用该字符。
Trifecta 或其他库中是否有上述身份解析器?还是解析器不打算在 a 中使用fold
?
¹ 该练习来自Haskell Programming from first principle一书的解析器组合器章节。
² 正如cole 所指出的,Parser
是一个Alternative
,因此是一个幺半群。该empty
函数源于Alternative
, 而不是Parser
的应用实例。
parsing - 跳过所有内容,直到成功解析
我想从这样的文本中解析所有的日子:
使用 Trifecta,我定义了一个函数来解析一天:
以这种方式解析一天是有效的。我遇到的麻烦是忽略文本中不是一天的任何内容。
以下无法工作,因为它假定文本块的数量不是一天:
我认为有一种用 Trifecta 表达这一点的简单方法,但我似乎找不到它。
这是整个模块,包括要解析的示例文本:
parsing - 如何使用解析器组合器进行回溯搜索?
我有一个解析器列表,例如[string "a",string "ab"]
“重叠”。我既不能改变解析器本身也不能改变它们的顺序。
使用这些解析器,我想解析一个令牌序列,每个令牌都与其中一个解析器完全匹配,例如"aaaab", "ab", "abab"
但不是"abb"
如果没有解析器,我只会实现部门优先搜索,但我想用解析器解决这个问题。
我得到了这么远:
这失败了,因为它会解析"a"
两次,而不是回溯,因为choice
不这样做。此外,string "a"
两次都成功了,因此可能无法再检索消耗的输入。如何实现一个可以回溯并生成解析结果列表的解析器,例如Success ["a","ab"]
?
如果我要求输入将标记分开,我仍然无法使其工作:
这有效:
但这不会:
parsing - 解析时如何跳过指定的符号
我正在尝试编写一个可以解析下面所有三个电话号码的trifecta解析器。当我尝试parsePhone
通过调用使用parseString parsePhone mempty phoneNum2
时,解析器在第一个破折号处失败并说它是预期'('
的。
当我在 phoneNum1 上调用解析器时,它失败了')'
,说它是预期'('
的。
为什么我的 skipSymbol 解析器失败了?我认为由于我使用了<|>
,解析器不会检测到'('
并继续前进。我尝试的技术skipSymbol
一定会失败吗?
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)中失败。
haskell - 理解 trifecta 解析器 <|> 并尝试
在阅读 Haskell 的书时,我遇到了trifecta
我试图绕开我的头,但仍然无法理解 <|>
我有以下问题。
简单来说 (<|>) = Monadic 选择?
p = a <|> b -- 使用解析器a如果没有则使用b?
如果是,那么为什么下面的解析器失败了?
在完美世界中,如果 a 是parseFraction将失败,那么<|>
应该使用小数,但事实并非如此。但是当我使用尝试它的工作原理。
- 我错过了什么?
- 为什么我们需要在 <|> 应该在第一次失败时运行第二个解析器时使用try ?
parseRationalOrDecimal = try (Left <$> parseFraction) <|> (Right<$> decimal)