16得票1回答
琐碎的parsec示例导致类型错误

我正在尝试让这个微不足道的parsec代码编译通过import Text.Parsec simple = letter 但是我一直收到这个错误信息。No instance for (Stream s0 m0 Char) arising from a use of `letter' Poss...

17得票5回答
使用Text.Combinators.Parsec进行无大小写区分解析的最清晰方法是什么?

我正在使用Parsec编写我的第一个程序。 我想解析MySQL模式转储,并且希望用不区分大小写的方式来解析表示特定关键字的字符串。 这里是一些代码,展示了我正在使用的解析“CREATE”或“create”的方法。是否有更好的方法来做到这一点?最好不要使用buildExpressionParse...

7得票3回答
解析器无法正确跳过空格的困难

我是Parsec(和解析器)的新手,我写了一个解析器遇到了一些问题: list = char '(' *> many (spaces *> some letter) <* spaces <* char ')' 这个想法是解析以下格式的列表(我正在逐步转向s表达式)...

7得票2回答
uu-parsinglib相对于Parsec中的“try”的性能表现

问题 我熟悉 Parsec 和 uu-parsinglib,并且在这两个工具中都编写过解析器。最近我发现了一个关于 uu-parsinglib 的问题,可能会极大地影响其性能,但我看不到解决方法。 让我们考虑一下以下的 Parsec 解析器: pa = char 'a' pb = cha...

14得票2回答
一个好的OCaml解析器?

我正在寻找一个好的ocaml解析库,不是flex/bison的变体。理想情况下,我希望有一个像parsec那样的单子组合器库,但我找不到任何类似的东西。 我本可以使用haskell,但为haskell创建llvm绑定比我最初想象的更加繁琐。 谢谢, Duane

9得票3回答
Parsec - 错误 "组合器'many'被应用于接受空字符串的解析器"

我正在尝试使用Parsec编写解析器,以解析文学化的Haskell文件,例如以下内容: The classic 'Hello, world' program. \begin{code} main = putStrLn "Hello, world" \end{code} More te...

9得票1回答
Haskell parsec:在`optional`组合子内部使用`many`组合子

我希望使用Haskell的parsec库来实现这个语法规则: ((a | b | c)* (a | b))? 这是一个解析器规则,它接受一个可选的(即可能为空的)字符串。如果它所接受的字符串不为空,则可以通过零个或多个 a、b 或 c 解析器来消耗它,但最外层的 ? 可选解析器所接受的字...

10得票1回答
如何以贪心方式使用Parsec?

在我的工作中,我遇到了很多复杂的SQL语句,并且我想到写一个程序来解析SQL并将其清晰地打印出来。我完成了其中大部分,但是我遇到了一个问题,不知道该如何解决。 假设SQL查询是"select foo from bar where 1"。 我的想法是关键字总是后跟其数据,因此所有我要做的就是解...

12得票2回答
Haskell的Parsec库能否用于实现带备份的递归下降解析器?

我一直在考虑使用Haskell的Parsec解析库作为递归下降解析器来解析Java的子集,作为替代更传统的解析器生成器解决方案(如Happy)。Parsec似乎非常容易使用,而且解析速度对我来说绝对不是一个问题。不过我想知道,是否可能使用Parsec实现“备用”,即通过依次尝试每个产生式来找到...

13得票4回答
在 Parsec 中,是否有一种方法可以防止 lexeme 消耗换行符?

Text.Parsec.Token 中的所有解析器都会礼貌地使用 lexeme 来吃掉一个标记后面的空格。不幸的是,空格包括我想要用作表达式终止符的换行符。是否有办法让 lexeme 保留换行符?