Haskell に適したパーサー生成システムのエラー メッセージを理解するのにいくつか問題があります。
たとえば、このコード
{
module Test_parser where
import System.IO
import Test_lexer
}
%name parse
%tokentype { Token }
%error { parseError }
%token
true { TokenTrue posn }
false { TokenFalse posn }
number { TokenInteger posn $$ }
%%
LiteralExpr :
true {LiteralTrue ()}
| false {LiteralFalse ()}
| number {LiteralInteger () $1}
{
data Expression n =
LiteralTrue n
| LiteralFalse n
| LiteralInteger n Integer
deriving (Eq, Show)
parseError xs = error "Parse error"
main = do
inStr <- getContents
let parseTree = parse (alexScanTokens inStr)
putStrLn $ show(parseTree)
}
正常に動作します。
でもそんなことしたら
....
LiteralExpr :
true {LiteralTrue ()}
| false {LiteralFalse ()}
| Inte {$1}
Inte :
number {LiteralInteger () $1}
{
data Expression n =
LiteralTrue n
| LiteralFalse n
| Inte n
deriving (Eq, Show)
data Inte n =
LiteralInteger n Integer
deriving (Eq, Show)
....
巨大なエラー メッセージが表示されます。ですので、ご理解いただけると大変助かります。
前もって感謝します