module Calculator.Parser.Cmd (parseCmd) where -------------------------------------------------------------------------------- import Calculator.Prim.Base (parseId) import Calculator.Prim.Cmd (Cmd (..)) import Calculator.Parser.Expr (parseExpr) -------------------------------------------------------------------------------- import Text.ParserCombinators.Parsec -------------------------------------------------------------------------------- -- cmd -> ':' cmd' parseCmd :: Parser Cmd parseCmd = char ':' >> parseCmd' -------------------------------------------------------------------------------- -- cmd' -> reset | assign parseCmd' :: Parser Cmd parseCmd' = parseReset <|> parseAssign <|> parseFunc -------------------------------------------------------------------------------- -- reset -> "reset" parseReset :: Parser Cmd parseReset = string "reset" >> return Reset -------------------------------------------------------------------------------- -- assign -> "var" id "=" expr parseAssign :: Parser Cmd parseAssign = do _ <- string "var " str <- parseId _ <- char '=' ex <- parseExpr return $ Assign str ex -------------------------------------------------------------------------------- -- func -> "func" id arg "=" expr parseFunc :: Parser Cmd parseFunc = do _ <- string "func " str <- parseId _ <- char '(' arg <- parseId _ <- char ')' _ <- char '=' ex <- parseExpr return $ Func str arg ex --------------------------------------------------------------------------------