问题标签 [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.
parsing - 将普通 attoparsec 解析器代码转换为基于管道/管道
我使用以下方法编写了以下解析代码attoparsec
:
这适用于小型文件,我执行它是这样的:
但是当文件的大小大于 70MB 时,它会消耗大量的内存。作为解决方案,我想我会使用attoparsec-conduit
. 在浏览了他们的API之后,我不确定如何让它们一起工作。我的解析器具有类型Parser Test
,但它sinkParser
实际上接受 type 的解析器Parser a b
。我对如何在常量内存中执行这个解析器感兴趣?(基于管道的解决方案也是可以接受的,但我不习惯 Pipes API。)
performance - 优化一个被多次调用的简单解析器
我为自定义文件编写了一个解析器,使用attoparsec
. 分析报告表明,大约 67% 的内存分配是在名为 的函数中完成的tab
,这也是消耗时间最多的。该tab
功能非常简单:
整个分析报告如下:
我该如何优化呢?
解析器的完整代码在这里。我正在解析的文件大约是 77MB。
haskell - finally 无标记解析和递归单子动作
我以最终无标签样式反序列化磁盘中的数据结构。IE
我正在解析的语言包含指令。
我使用attoparsec
的不是单子变压器,所以我不能简单地提供一个类型Loader = FilePath -> IO (Maybe Text)
。
我可以用以下SYM
实例编写一个解释器,它解决了一个包含问题。
不幸的是,包含在包含文件中的内容没有得到解决。当然我可以解决它们两次以解决下一层。但是,如果我想对每个可能的级别都这样做,那会导致无限类型。
现在我预加载所有包含(在 a 中HashMap
)并绑定它们,所以我可以将 a 传递FilePath -> Maybe Text
给解析器并在那里解析包含,但这显然不是最佳的。(并且 includeSYM
不再是其中的一部分。)
我的问题是,最终无标签样式如何处理该问题?
编辑:我在 lpaste 上发布了一个完整的例子:http: //lpaste.net/105182
haskell - attoparsec 非法方程约束
截至撰写本文时,我正在运行最新的 GHC (7.9.20140608) 和 cabal (1.20.0.0),但似乎attoparsec
失败了。
我是否缺少任何语言扩展?还是这个问题会更棘手一点?这是我的阴谋集团文件: http: //lpaste.net/105329
对此的任何帮助都将令人难以置信:) 黑客快乐!
parsing - 在 Attoparsec 中使用 sepBy 字符串
我试图用","
,", and"
和分隔一个字符串"and"
,然后返回两者之间的任何内容。我到目前为止的一个例子如下:
我希望输出为["This test", "that test", "this test particularly."]
. 我有一种模糊的感觉,我正在做的事情是错误的,但我不能完全弄清楚为什么。
haskell - 跳过管道中的第一行 - attoparsec
我的类型:
我的解析器:
现在为了跳过第一行,我做了这样的事情:
但是上面的parser
函数使每个备用链接都跳过(这很明显)。如何仅以与 Pipes 生态系统一起使用的方式跳过第一行(Producer
应该产生单个Test
值。)这是我不想要的一个明显的解决方案(以下代码仅在我修改 testParser 以读取换行符时才有效) 因为它返回整个[Test]
而不是单个值:
有什么想法可以解决这个问题吗?
haskell - 高效的“Parser a -> ByteString -> [a]”函数
为已创建的 Attoparsec 解析器的所有匹配项解析大型文本内容(300K+)的最有效方法是什么?
我写了这样一个性能缓慢的代码:
它适用于字符串,但我认为最好的方法是使用 ByteStrings。
在 "abbabba" 中解析 "abba" 应该只返回一个匹配项 ["abba"],即在匹配项之后继续执行。
haskell - Attoparsec:跳过当前行的其余部分
我正在使用attoparsec编写解析器。解析器正在解析基于行的格式,例如这个文件
假设解析器当前放置2
在第一行之前。如何跳过包括\n
字符在内的其余行。
注意:这个问题是以问答方式回答的,因此故意不显示研究工作。
parsing - 将 CSV 标头解析为解析器列表
我想解析 CSV 文件的第一行并得到解析器列表,结果惨遭失败。
经过一些简化后,我得到了我认为应该可以工作的代码,但它没有,我不明白为什么。
这里是:
我打电话test
,期待得到类似的东西
但相反我得到
我究竟做错了什么?
parsing - 使用 Attoparsec 解析简单的分子名称
我发现学习如何使用 Attoparsec 非常困难,因为该文档实际上只是一个 API 文档,并且基本上没有任何教程(FPComplete 的教程除外)。如果你知道我可以学习 Attoparsec 的其他地方,那就太好了。
我必须解析简单的分子名称,格式如下:NaCl
, CO2
, H2O
, HCN
, H2O2
. 元素
名称是
一个大写字母,可选地后跟一个小写字母(我不考虑符号长度超过 2 个字符的那些元素)。
一个元素后面可以跟一个数字(这将是公式中的下标)。
新版本(感谢 Mark 和 Tarmil 的建议),编译但不解析:
任何建议表示赞赏。
编辑:我设法让它运行。基本上,Partial
返回了一个延续,并且为了完成解析,需要为解析器提供一个空的字节串。所以正确的parseString
是:
empty
在哪里Data.Text.empty
。但是,由于我不需要增量解析,所以有一个有用的函数parseOnly
,它不等待更多输入并返回一个Either
.
考虑到这一点,我重写了这样的代码(现在可以使用):