Hi Adam,
parse "x=-1", it fails. Does anyone know how to fix this?
This issue is in using the 'reservedOp' combinator which rejects '=' when followed by '-'. reservedOp name = lexeme $ try $ do{ string name ; notFollowedBy (opLetter languageDef) <?> ("end of " ++ show name) } If you change: reservedOp "=" to: char '=' then your test passes. -Greg On Tue, Feb 16, 2010 at 2:10 PM, Adam Crume <adamcrume@hotmail.com> wrote:
I have a parser with a prefix "-" and an infix "=". When I try to parse "x=-1", it fails. Does anyone know how to fix this? I stripped my code down as much as possible. It parses "x=1" and "-1", but fails for "x=-1".
import Text.Parsec import qualified Text.Parsec.Expr as PE import qualified Text.Parsec.Language as L import qualified Text.Parsec.Token as T
lexer = T.makeTokenParser L.emptyDef {T.reservedOpNames = ["=", "-"]}
reservedOp = T.reservedOp lexer
integer = T.integer lexer >> return ""
symbol = T.identifier lexer
expression = PE.buildExpressionParser table (integer <|> symbol) where table = [ [ PE.Prefix (reservedOp "-" >> return (\x-> "")) ], [ PE.Infix (reservedOp "=" >> return (\x-> \y->"")) PE.AssocRight ] ]
input = do e <- expression eof return e
testParse s = case (parse input "(unknown)" s) of Left f -> putStrLn $ s ++ "\n" ++ show f Right f -> putStrLn s
main = do testParse "x=1" testParse "-1" testParse "x=-1" ________________________________ Hotmail: Free, trusted and rich email service. Get it now. _______________________________________________ Haskell mailing list Haskell@haskell.org http://www.haskell.org/mailman/listinfo/haskell