问题标签 [parsec]

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 投票
3 回答
2718 浏览

haskell - Parsec - 错误“组合器'许多'应用于接受空字符串的解析器”

我正在尝试使用 Parsec 编写一个解析器,它将解析读写的 Haskell 文件,例如:

我写了以下内容,有点受 RWH 中示例的启发:

我希望这会产生以下结果:

(允许空格等)。

这编译得很好,但是在运行时,我得到了错误:

任何人都可以对此有所了解,并可能提供解决方案吗?

0 投票
1 回答
292 浏览

parsing - Parsec-Parser 工作正常,但它可以做得更好吗?

我尝试这样做:

解析表单中的文本:

一些文本 #{0,0,0} 一些文本 #{0,0,0}#{0,0,0} 更多文本 #{0,0,0}

进入一些数据结构的列表:

[Inside "Some Text",Outside (0,0,0),Inside "some Text",Outside (0,0,0),Outside (0,0,0),Inside "more Text",Outside (0, 0,0)]

所以这些 #{a,b,c} 位应该变成与文本的其余部分不同的东西。

我有这个代码:

这按预期工作。您可以通过键入在 ghci 中进行测试

parseTest alot "Some Text #{0,0,0} some Text #{0,0,0}#{0,0,0} more Text #{0,0,0}"

但我觉得不好看。

1)lookAhead对于我的问题真的有必要使用吗?

2)这是return (Inside "")一个丑陋的黑客吗?

3)通常是否有更简洁/更智能的方式来归档相同内容?

0 投票
5 回答
12055 浏览

haskell - 与单子解析相比,应用解析有什么好处?

似乎有一个共识,您应该将 Parsec 用作应用程序而不是 monad。与单子解析相比,应用解析有什么好处?

  • 风格
  • 表现
  • 抽象

monadic 解析出来了吗?

0 投票
1 回答
348 浏览

haskell - 应用的一元等价<*

在阅读了Anthony与样式相关的解析器问题的回复后,我试图说服自己编写单子解析器仍然可以相当紧凑。

所以而不是

我们可以简单地拥有:

这与 Anthony 提供的应用版本非常相似:

...除了在<<!概念上类似于<*定义为liftA2 const含义“序列但丢弃左侧提供的值和使用值”的运算符。

当然 << 对于 来说 是个坏名字,如果我们遵循与and相同的逻辑liftM2 const,它会暗示这<<等价于。flip >>>>==<<

我没有在一个名称下找到“liftM2 const”。这是因为它没有那么有用吗?

0 投票
1 回答
539 浏览

haskell - Attoparsec 中的条件解析和强制转换

我正在解析一个长度编码的二进制流,并且正在尝试编译此代码。combinatorrent 代码(https://github.com/jlouis/combinatorrent/blob/master/src/Protocol/Wire.hs)对让我继续前进非常有帮助,但现在我被卡住了。如何在 return 语句中使用 frame_length?

另外:我如何使用 pass (AP.take 8) 进入 Word64?

0 投票
3 回答
8874 浏览

haskell - 使用 parsec 的完整解析器示例?

我正在尝试为一种简单的函数式语言制作解析器,有点像 Caml,但我似乎被最简单的东西困住了。

所以我想知道是否有一些更完整的parsec解析器示例,超越“这就是你解析 2 + 3 的方式”。尤其是术语等方面的函数调用。

而且我读过“给你写一个方案”,但方案的语法很简单,对学习没有帮助。

我遇到的最大问题是如何正确使用try,因为我真的不明白为什么 parsec 似乎从来没有使用这个解析器解析为函数调用:<|>choicea(6)

编辑添加了一些完成代码,尽管这实际上不是我问的:

AST.hs

Lexer.hs

Parser.hs

0 投票
1 回答
423 浏览

haskell - 使用 parsec 从文本文件中提取数据

作为学习练习,我使用 parsec 在测试文件中查找值。对于这种特殊情况,我通常会使用正则表达式,但想看看 parsec 是否也有意义。不幸的是,我遇到了一些问题。

数据文件由类似于以下内容的重复部分组成。'SHEF' 是六个值之一,并且会随着页面的变化而变化,我想在构造数据类型时使用它。

我正在构建每个资产类别中金额的数据类型:

我的代码编译成功,如下图所示。它解析文件并正确检索每个资产类别中的值,但我永远无法在 fundValue 解析器中正确设置状态。我已经用输入字符串测试了fundValue 解析器,它确实成功地解析了它,但是由于某种原因,line 函数没有按照我想象的方式工作。我希望它在文件中查找以“A 部分”开头的行,找到代码并将其存储在状态中以供标签解析器成功解析一行时使用。

是使用fail造成的问题吗?

提前致谢。

0 投票
1 回答
487 浏览

delphi - 如何在 Parsec 中定义多种类型的注释块

我正在尝试学习如何使用Parsec来编写 Delphi 解析器,但我在定义 LanguageDef 时遇到了困难。

在 Delphi 中,有两种类型的注释块,(* comments *){ comments }. 但是LanguageDef的commentStart和commentEnd的类型是String,而不是[String],所以只能放其中一个。

因此,我尝试制作自己的 whiteSpace 解析器,但我不确定我是否真的可以将它传递给makeTokenParser.

任何帮助,将不胜感激。

谢谢


John 和 Chris 帮助我理解并解决了这个问题,但解决方案涉及替换提供的大量解析器makeTokenParser,因此它并不是完全可取的。

如果我能找到更好的解决方案,我会再次发布。

0 投票
1 回答
320 浏览

haskell - Haskell Parsec 功能

我一直在使用这个页面 http://book.realworldhaskell.org/read/using-parsec.html 我正在尝试让一个 CSV 文件解析器工作,但我注意到

总是返回一个

有没有办法进行解析,它只返回我稍后可以在我的代码中使用的数组数组?

例如代码:

谢谢

0 投票
1 回答
1017 浏览

haskell - Parsec 匹配单个 unicode 字符

我正在尝试创建一个解析器(使用 parsec),它解析由换行符、逗号、分号和 unicode 破折号(ndash 和 mdash)分隔的标记:

但是 ndash-mdash (\8212, \8213) 部分永远不会“成功”,我得到的解析结果无效。

如何使用 char 解析器指定 unicode 破折号?

PS我也试过(chr 8212),(chr 8213)。它没有帮助。

补充:最好使用 Data.Text。从 ByteStrings 疯狂切换到 Data.Text 为我节省了大量时间和“源空间”:)