calculator-0.1.3.0: src/Calculator/Parser/Cmd.hs
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
--------------------------------------------------------------------------------
-- reset -> "reset"
parseReset :: Parser Cmd
parseReset = string "reset" >> return Reset
--------------------------------------------------------------------------------
-- assign -> "let" var "=" expr
parseAssign :: Parser Cmd
parseAssign = do
_ <- string "var "
str <- parseId
_ <- char '='
ex <- parseExpr
return $ Assign str ex
--------------------------------------------------------------------------------