问题标签 [attoparsec]

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

haskell - 未找到 Attoparsec `many` 方法

我尝试为 Bryan O'Sullivan 的基于 Attoparsec 的 HTTP 解析器(http://www.serpentine.com/blog/2010/03/03/whats-in-a-parser-attoparsec-rewired-2/)运行测试,我得到了这个错误:

很惊讶,我运行 ghci 得到了这个:

谁能告诉我发生了什么事?

0 投票
1 回答
10807 浏览

haskell - haskell 中的 attoparsec 或 parsec

我必须解析一些文件并将它们转换为一些预定义的数据类型。

Haskell 似乎为此提供了两个软件包:

  1. 阿托秒差距
  2. 秒差距

它们两者有什么区别,哪一个更适合根据某些规则解析文本文件?

0 投票
1 回答
1362 浏览

exception - 带有aeson / attoparsec的管道,一旦源没有更多数据,如何干净地退出

我正在使用aeson/attoparsecconduit/ conduit-httpconnected byconduit-attoparsec来解析来自文件 / 网络服务器的 JSON 数据。我的问题是我的管道总是抛出这个异常......

...一旦套接字关闭或我们点击 EOF。通过管道等解析和传递生成的数据结构工作得很好,但它总是以sinkParser抛出这个异常结束。我这样调用它...

...在我的管道内部,将 ByteStrings 解析为我的消息结构。

一旦没有更多数据(没有更多顶级表达式),我怎样才能让它干净地退出管道?是否有任何体面的方法来检测/区分此异常而无需查看错误字符串?

谢谢!

编辑:示例:

示例输入(input.json):

输出:

和 out.txt:

0 投票
1 回答
131 浏览

parsing - 如果解析器失败,请尝试从下一个特殊符号出现处进行解析

假设有一些解析器:

它可用于"valid"从多行文本中获取字符串:

如果有一行valid解析器失败,则根本不会解析进一步的文本:

怎么Rigth["valid", "valid"]取而代之?我认为这try可能会有所帮助,但不确定如何从下一行继续解析。

0 投票
1 回答
514 浏览

parsing - Haskell:如何使用 attoparsec 从 ByteString 读取嵌套列表

我有一个带有嵌套列表的文本文件(大约 300 MB 大),类似于这个:

这是我将文件读入haskellInteger列表的程序:

这适用于小文本文件,但我想用它ByteString来快速读取文件。我发现readByteString 没有函数,你应该在 attoparsec 中编写自己的解析器,因为它支持解析 ByteStrings。

我如何使用它attoparsec来解析嵌套列表?

0 投票
1 回答
749 浏览

parsing - 使用 attoparsec 解析括号内的逗号分隔字符串

对不起愚蠢的问题。

我有某种 SQL 模式,看起来像这样(例如):

从这个模式中,我只需要一些信息。我不关心主键、索引、“非空”。只是表名、字段名和类型。

我写了以下丑陋的代码,但不起作用:http ://code.sdfgh153.ru/gimme-models/src/1e5a17f2f8dbc225b0d26da405f5a1303f896ddb/src/GimmeModels/Schema/SQLSchema/Parser.hs?at=default

正如我认为这段代码应该填写这种类型:

但无法弄清楚,如何正确解析创建表表达式中的字段部分。我应该如何检测字段声明的结束?

0 投票
0 回答
165 浏览

haskell - 使用 attoparsec Haskell 库在字符串中查找第一次解析成功的最佳方法

我想这样做:

它工作正常,但在 attoparsec 的世界中是否有更简单(更美观)的方式?

0 投票
0 回答
141 浏览

haskell - 使用 Attoparsec Text Lazy 编译错误

我是haskell的新手,下面的代码

产生以下错误消息:

Data.Text.Internal.Text 类型从何而来?导入 Data.Text 而不是 Data.Text.Lazy 似乎可以解决问题。

0 投票
1 回答
612 浏览

regex - 是否可以在 Attoparsec 中有效地预测多个字符?

我正在尝试用一个函数来扩充 Haskell 的 Attoparsec 解析器库

使用其中一种正则表达式实现。

(动机:好的正则表达式库可以提供与输入长度成线性关系的性能,而 attoparsec 需要回溯。我的一部分输入特别适合使用正则表达式进行解析,甚至回溯 Text.Regex.PCRE 库也让我受益该部分的 attoparsec 代码加速了 4 倍。)

Attoparsec曾经有一个getInput :: Parser ByteString函数来获取(不消耗)剩余输入;这对我的目的来说可能是非常完美的,因为我的输入是非增量的、严格的并且相当小——我一次运行解析器以获取一行日志文件。有了它,我似乎可以做类似的事情

不幸的是,最近版本的 attoparsec 缺少此功能。有什么方法可以达到同样的效果吗?为什么这个功能被删除了?

现在有一个takeByteString :: Parser ByteString函数,它接受并消耗其余的输入。如果有一个函数可以尝试解析并在不实际消耗任何内容的情况下获取结果,则可以将其与它结合使用,但我似乎也找不到(或弄清楚如何实现)这样的函数。

有没有办法用当前版本的 attoparsec 来实现这一点?

0 投票
1 回答
332 浏览

haskell - 如何以不区分大小写的方式制作最新的 Attoparsec 匹配字符串?

attoparsec 0.72 有这个功能,但它似乎在以后的版本中消失了:

“在对文字字符串和匹配文本应用转换后,匹配文字字符串。对于不区分大小写的字符串比较很有用。”

http://hackage.haskell.org/package/attoparsec-0.7.2/docs/Data-Attoparsec.html