次のチュートリアルの詳細を使用してパーサーを作成しようとしています
コードの多くはチュートリアルから直接コピーされ、いくつかの名前が変更されています。
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'
エラーはさまざまなリターンタイプに関係していると思います。これは、投稿の冒頭にあるチュートリアルをすべての試みの基礎として使用しようとしたため、奇妙なことです。
前もって感謝します、
セアン