我一直在尝试使用以下教程中的详细信息创建解析器
大部分代码是直接从教程中复制的,只更改了几个名称。
import qualified Text.ParserCombinators.Parsec.Token as P
reserved = P.reserved lexer
integer = P.integer lexer
whiteSpace = P.whiteSpace lexer
identifier = P.identifier lexer
data Express = Seq [Express]
| ID String
| Num Integer
| BoolConst Bool
deriving (Show)
whileParser :: Parser Express
whileParser = whiteSpace >> expr7
expr7 = seqOfStmt
<|> expr8
seqOfStmt =
do list <- (sepBy1 expr8 whiteSpace)
return $ if length list == 1 then head list else Seq list
expr8 :: Parser Express
expr8 = name
<|> number
<|> bTerm
name :: Parser Express
name = fmap ID identifier
number :: Parser Express
number = fmap Num integer
bTerm :: Parser Express
bTerm = (reserved "True" >> return (BoolConst True ))
<|> (reserved "False" >> return (BoolConst False))
我知道这段代码可能很可笑,但我真的很想了解更多关于我哪里出错的信息。我也认为这应该提供足够的信息,但如果不让我知道。
Error:
parse error on input `return'
我相信该错误与不同的返回类型有关,这很奇怪,因为我尝试使用文章开头的教程作为我所尝试的所有内容的基础。
提前致谢,
肖恩