问题标签 [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 投票
2 回答
186 浏览

haskell - 带剩余物的导管水槽

我有一个接收器,想在其中使用 attoparsec 进行一些解析。碰巧我得到了一个Partial结果。所以我想我可能只是leftover将不足的内容放回上游,以便稍后再添加更多内容。但是没有像我希望的那样附加新的内容。我非常感谢有关如何解决此问题的任何建议。谢谢!

0 投票
1 回答
268 浏览

haskell - Data.Attoparsec.ByteString.Lazy.Char8 呢?

Attoparsec 具有专门用于 Strict/Lazy、ByteString/Text、Char8 (ascii)/Char 的模块。但它没有所有的组合。

我认为Data.Attoparsec.ByteString.Lazy.Char8未提供的内容对于浏览倾向于编码为 ascii 的大型报告特别方便。

你知道它为什么不存在吗?

0 投票
0 回答
99 浏览

parsing - 使基于 Attoparsec 的解析器更高效

我使用 Attoparsec 编写了一个简单的文本 STL(标准镶嵌库)解析器。STL 包含一组方面。每个面包含一个法线和三角形的顶点。典型的 STL 文件可能很大(~100 Mb 或更多)。

STL 文件格式为

解析器代码在这里。完整的实现可以在STLReader找到

我使用Meshlab提供的“c”解析器对该代码进行了基准测试。当我使用 69Mb 扫描进行测试时,meshlab 在大约 13 秒内完成了这项工作,而使用 attoparsec 则需要 22 秒。因此,尽管 attoparsec 使我能够比 Parsec 更快地解析(使用 parsec 大约需要 36 秒),但我还有很长的路要走。

我怎样才能进一步改进这个解析器?

0 投票
2 回答
258 浏览

haskell - 了解 attoparsec 实现(第 2 部分)

我目前正在努力研究和理解该attoparsec库的源代码,但有些细节我自己无法弄清楚。例如Parser类型的定义:

我还不完全理解的是 type-parameter 的用法r。如果我定义这样的类型签名会有什么不同runParser

State i -> Pos -> More -> Failure i (State i) a -> Success i (State i) a a -> IResult i a

?

您能帮我理解forall r.在这种情况下的确切含义以及为什么有必要在runParser的类型签名中使用它吗?

提前谢谢!

更新:进一步澄清我的问题:我目前不明白为什么有必要首先引入类型参数r。可以想象,该Parser类型也可以这样定义:

r其中根本不使用类型参数。我的问题是为什么这个定义是“错误的”以及它会带来什么问题......

0 投票
1 回答
969 浏览

haskell - Haskell 使用 Attoparsec 解析整数列表

当整数列表可以是任意长度时,我需要一些帮助来解析文件中以逗号分隔的整数列表。字符串可能看起来像“1,2,3,4,5,6,7,8,...”,而我需要制作的列表就像 [1,2,3,4,5,6,7, 8,...]。

文件格式如下:

我的解析器目前只读取一个整数,但它需要开始读取更多。我可以使用 takeTill 将所有数字读入一个 ByteString,但是我必须解析另一个字符串,该字符串存在同样的问题,即不知道到底有多少个数字:

我找到了这个,但它对我没有帮助,因为我的文件不是 json 文件。

0 投票
1 回答
147 浏览

haskell - 手动终止 Conduit Attoparsec 的输入

我正在处理一个 syslog 日志文件,每一行作为一个单独的 syslog 条目,并使用 Attoparsec 解析器解析该条目。所以我正在使用

生成系统日志条目流。我在用

将这些字节串转换为系统日志值。Syslog 值是从此解析器生成的(使用我自己的一些类型同义词):

问题是占用系统日志条目 ( msg <- ATT.takeByteString) 的所有其余部分的行。这个函数不能很好地处理流,因为如果使用可恢复的解析器(这是管道的 attoparsec 库使用的),它需要一个终止信号。

我试图产生空字节串来修复此行为,但它没有按预期工作(请参阅https://hackage.haskell.org/package/attoparsec-0.12.1.2/docs/Data-Attoparsec-ByteString.html上的增量输入)。它将整个 syslog 输入文件消耗为一个解析值。这是一个 80MB 的测试文件,因此在初始字段提取之后,它将所有后续 syslog 消息放入 syslog 值的 message 字段中。

这是我尝试发出“原子消息”行为的终结器管道。我不确定为什么它不起作用。

如何将 UDP 消息视为管道世界中的原子数据?

可以在此处找到此代码库的副本:https ://github.com/tureus/safe-forwarder 。

0 投票
0 回答
97 浏览

parsing - 如何解析一个字符,然后解析 Attoparsec 中匹配的内容?

我正在为日志文件编写解析器。日志文件中的其中一行列出了 HTTP 请求的参数:

我无法用 Attoparsec 解析它。我的基本想法是解析并丢弃Parameters: {,然后将文本保持在}. 然后我会将该文本解析为一个(key, value)元组列表。这是我到目前为止所得到的:

我该如何实施?我应该以Data.Attoparsec.Text.sepBy某种方式使用吗?

0 投票
0 回答
101 浏览

parsing - Attoparsec atEnd behavior

I am trying to write a bytestring parser with Attoparsec and I've been running into some puzzling behavior with the atEnd function. Just playing around, I tried to parse the empty bytestring with atEnd to see if it would return True, but instead it returns a partial parse. Is this expected? Can someone quickly explain the behavior of the atEnd function?

0 投票
1 回答
329 浏览

haskell - 使用 attoparsec 解析 n 个十六进制数字

好的,所以我需要解析 n 位十六进制,我遇到了无法停止标准 attoparsec hex parser 的问题hexadecimal

我的第一个想法是这样的:

nHex n = take n *> hexadecimal但这不起作用,因为它会删除 4 位数字,然后解析字符串 xD 的其余部分

下一个可行的想法是:

但该代码的问题在于 attoparsec 库它警告不要返回字符列表以考虑速度问题,这个十六进制解析器是我整个程序的基础

尝试提高速度的下一个想法是:

但这感觉就像使用 parseOnly 的可怕黑客攻击。有没有更惯用的快速方法?

0 投票
1 回答
200 浏览

haskell - Conduit 和 Attoparsec - 提取分隔文本

假设我有一个文档,其文本由 Jade 式括号分隔,例如{{foo}}. 我编写了一个似乎可以foo正确提取的 Attoparsec 解析器:

测试它表明它有效:

现在,使用 中的Data.Conduit.Attoparsec模块conduit-extra,我似乎遇到了奇怪的行为:

这是期望的行为吗?我应该在这里使用导管实用程序吗?对此的任何帮助都将是巨大的!