在下面的类型声明中,约束条件 (Stream s Identity t) 是什么意思? parse :: (Stream s Identity t) => Parsec s () a -> SourceName -> s -> Either ParseError ...
在我的工作中,我遇到了很多复杂的SQL语句,并且我想到写一个程序来解析SQL并将其清晰地打印出来。我完成了其中大部分,但是我遇到了一个问题,不知道该如何解决。 假设SQL查询是"select foo from bar where 1"。 我的想法是关键字总是后跟其数据,因此所有我要做的就是解...
我正在阅读关于Haskell Parser Combinators的内容,发现有很多类似的话题: Parsec vs Yacc/Bison/Antlr:为什么以及何时使用Parsec? 哪种Haskell解析技术最易于使用,为什么? Parsec或happy(带有alex)或uu-pars...
我原本期望找到一个函数。 integer :: Stream s m Char => ParsecT s u m Integer 或者甚至可能 natural :: Stream s m Char => ParsecT s u m Integer 我在标准库中找不到一个...
我正在编写一种使用 Parsec 进行解析的编程语言。为了报告错误信息,我已经标记了语法树中每个元素的源位置,在 Parsec 的 Pos 模块 中使用 getPosition 函数。 然而,该函数仅提供了我解析的每个表达式开头的位置信息,我希望获得其开始和结束位置,以便可以在源代码中突出显...
我正在尝试解析一种非常简单的语言,它只包含十进制或二进制数字。例如,这里是一些有效的输入: #b1 #d1 #b0101 #d1234 我使用 Parsec 的选择运算符 <|> 遇到了问题。根据这个教程:48小时内写一个Scheme解析器: [选择运算符] 会尝试第一个...
我正在尝试使用Parsec编写解析器,以解析文学化的Haskell文件,例如以下内容: The classic 'Hello, world' program. \begin{code} main = putStrLn "Hello, world" \end{code} More te...
如何使用Parsec解析字符串中所有匹配的输入并丢弃其他部分? 例如:我有一个简单的数字解析器,如果我知道数字之间的分隔符,我就可以找到所有数字。 num :: Parser Int num = read <$> many digit parse (num `sepBy` s...
我希望使用Haskell的parsec库来实现这个语法规则: ((a | b | c)* (a | b))? 这是一个解析器规则,它接受一个可选的(即可能为空的)字符串。如果它所接受的字符串不为空,则可以通过零个或多个 a、b 或 c 解析器来消耗它,但最外层的 ? 可选解析器所接受的字...