问题标签 [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.
haskell - 使用 parsec 解析递归数据
如何实现List Int
解析器来解析Cons 0 (Cons 1 (Cons 2 (Cons 5 Nil)))
from list
?
ps:不解析 a[Int]
并将其转换为的纯解析器List Int
是可取的。
haskell - 使用 attoparsec 解析固定长度的文本
我需要用 attoparsec 解析固定长度的字段,但我现在正在努力使用编译器。我还是个新手,下面的代码是我最接近的解决方案:
这一切都很好,但它只是返回没有空间的城市。
我尝试使用 applicative 为 City 文本字符串取 20 个字符
乃至do syntax
但两种方法都无法编译并出现此错误:
是什么导致 ghc 在有 类型Text -> Text
时询问?take
Int -> Text -> Text
如何在 applicative 和 do-syntax 中解决它?
parsing - Haskell:遍历字符串/文本文件
我正在尝试读取脚本文件,然后处理并将其输出到 html 文件。在我的脚本文件中,只要有@title(this is a title) ,我就会在我的 html 输出中添加标签[header] 这是一个标题 [/header] 。所以我的做法是先读取脚本文件,将内容写入字符串,处理字符串,再将字符串写入html文件。
为了识别@title,我需要逐个字符地读取字符串中的字符。当我阅读“@”时,我需要检测下一个字符以查看它们是否是标题 e。
问题:如何在 Haskell 中遍历一个字符串(这是一个字符列表)?
haskell - 为什么 attoparsec 使用的内存是我的输入文件的 100 倍?
我有一个 2.5 MB 的文件,其中包含由空格分隔的浮点数(下面的代码可以为您生成它),并希望将其解析为带有attoparsec
.
它出奇的慢,花了将近一秒钟,并分配了大量内存:
我的解析器非常简单:本质上是double <* skipSpace
.
这是代码:
你能解释一下发生了什么吗?
parsing - attoparsec 对双精度数的错误解析
我正在使用 attoparsec 的内置解析器“double”和“number”来解析浮点值,并且从不同的解析器中得到不同的结果。
>解析号码“8.918605790440055e-2”
完成“” 8.918605790440054e-2
> 解析双“8.918605790440055e-2”
完成“” 8.918605790440055e-2
使用“数字”解析器似乎会丢失一些精度,而“双”解析器则不会。由于可以将 8.918605790440055e-2 表示为双精度,因为“双”解析器设法做到了,为什么“数字”解析器返回不同的结果?这是一个错误吗?
我正在使用 attoparsec 0.10.4.0。
parsing - 管道 attoparsec 中的“子解析器”
我正在尝试使用 Haskell 中的管道 attoparsec 解析二进制数据。涉及管道(代理)的原因是将读取与解析交错以避免大文件的高内存使用。许多二进制格式基于块(或块),它们的大小通常由文件中的字段描述。我不确定这样一个块的解析器被称为什么,但这就是我在标题中所说的“子解析器”的意思。我遇到的问题是以简洁的方式实现它们,而不会占用大量内存。我想出了两个在某些方面都失败的替代方案。
备选方案 1 是将块读入单独的字节串并为其启动单独的解析器。虽然简洁,但大块将导致高内存使用。
备选方案 2 是在相同的上下文中继续解析并跟踪消耗的字节数。这种跟踪很容易出错,并且似乎感染了构成最终 blockParser 的所有解析器。对于格式错误的输入文件,在可以比较跟踪的大小之前,它还可能通过比大小字段指示的更远的解析来浪费时间。
parsing - Haskell 中的句柄增量解析
我正在尝试将 Haskell 与具有 read-eval-print 循环的命令行程序连接。我想将一些文本放入输入句柄中,然后从输出句柄中读取,直到找到提示(然后重复)。读取应该阻塞,直到找到提示,但不再阻塞。与其编写我自己的小型状态机,每次读取一个字符直到它构造一个提示,不如使用 Parsec 或 Attoparsec。(一个问题是提示会随着时间而变化,所以我不能只检查恒定的字符串。)
从输出句柄中读取适当数量的数据并将其提供给解析器的最佳方法是什么?我很困惑,因为大多数句柄读取原语都要求我事先决定要读取多少数据。但应该由解析器决定何时停止。
haskell - Attoparsec /= stringCI 的版本
我正在解析 robots.txt 文件,并且我已经编写了解析器以成功解析“格式正确”的 robots.txt 文件。我已经能够调整解析器以跳过以符号开头的行(例如 # 或 / 用于注释),但仅使用inClass "#/"
.
我无法解决的一个问题是如果一行不包含我想要匹配的字符串,则跳过它。
我首先尝试使用匹配:
satisfy (notInClass "DdUu") *> skipWhile (not . isEndOfLine)
并且认为这样做会否定我对特定注释行解析器的需求,因为哈希或斜杠不属于字符类。问题是这行不通。
我也意识到它无论如何都不会起作用,因为它不会解决诸如“不允许”与“不允许”之类的匹配问题。
这是解析代码(没有注释跳过代码,这仅适用于格式良好的 robots.txt):
haskell - Attoparsec 编译错误
我正在尝试学习使用 attoparsec。我正在尝试解析以下格式的文本文件:
我的代码在这里:
运行时,出现以下编译器错误(ghc 7.4)
我不确定这是否与我的安装中损坏的软件包有关,或者我是否不了解这些类型。提前致谢!
parsing - Haskell 解析器组合器
我阅读了很多有关 Haskell Parser Combinators 的内容,发现了很多主题,例如:
- Parsec vs Yacc/Bison/Antlr:为什么以及何时使用 Parsec?
- 哪种 Haskell 解析技术使用起来最愉快,为什么?
- Parsec 或 happy (with alex) 或 uu-parsinglib
- 选择 Haskell 解析器
- 与使用解析器组合器相比,使用快乐之类的解析器生成器有什么优势?
但所有这些主题都Parser Combinators
与Parser Generators
.
我想问你哪一个Parser Combinator
最适合以下条件:
- 我想对用户的错误(包括错误恢复)和消息有很好的控制
- 我希望能够为解析器提供一小部分文本(不是一次整个文件)
- 我希望能够很好地重新设计语法(我目前正在开发语法,所以“很好的工作”很重要”
- 最终的解析器应该很快(性能很重要,但不如第 1-3 点那么多)。
我发现,最流行的解析器组合器是: