我有一些问题要理解为 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)
....
我会收到一条巨大的错误消息。因此,如果您能帮助我理解它,那将是非常好的。
提前致谢