diff options
-rw-r--r-- | src/Language/SimpleShell/Parser/Expr.hs | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/src/Language/SimpleShell/Parser/Expr.hs b/src/Language/SimpleShell/Parser/Expr.hs index d4d0b81..d0bd01a 100644 --- a/src/Language/SimpleShell/Parser/Expr.hs +++ b/src/Language/SimpleShell/Parser/Expr.hs @@ -7,7 +7,7 @@ module Language.SimpleShell.Parser.Expr where -import Language.SimpleShell.Parser (Parser, lookupVar, lookupFun) +import Language.SimpleShell.Parser (Parser, lexeme, lookupVar, lookupFun) import Language.SimpleShell.AST.Expr (Expr(..), TypedExpr, VarName, FunName) import Language.SimpleShell.AST.SimpleType (SimpleType(..)) import Control.Monad.Combinators.FailExpr @@ -37,7 +37,7 @@ termP = literalP <|> varP <|> unaryOpP - <|> char '(' *> exprP <* char ')' + <|> lexeme (char '(') *> exprP <* lexeme (char ')') -- | Parse expression with fixed type. @@ -51,9 +51,9 @@ exprP' errMsg t = do literalP :: Parser TypedExpr literalP - = (IntType,) . IntLiteral <$> L.decimal - <|> (StrType,) . StrLiteral <$> strLitP - <|> (BoolType,) . BoolLiteral <$> boolLitP + = (IntType,) . IntLiteral <$> lexeme L.decimal + <|> (StrType,) . StrLiteral <$> lexeme strLitP + <|> (BoolType,) . BoolLiteral <$> lexeme boolLitP where strLitP = char '"' *> manyTill L.charLiteral (char '"') boolLitP @@ -61,7 +61,7 @@ literalP <|> False <$ string "false" varP :: Parser TypedExpr -varP = do +varP = lexeme $ do _ <- char '$' x <- varNameP t <- lookupVar x @@ -69,7 +69,7 @@ varP = do funP :: Parser TypedExpr funP = do - fname <- funNameP + fname <- lexeme funNameP (t', ts) <- lookupFun fname args <- mapM (exprP' "Type mismatch with function signature.") ts return (t', FunCall fname args) @@ -122,7 +122,7 @@ binaryOperatorTable = addP :: Parser (TypedExpr -> TypedExpr -> Maybe TypedExpr) addP = do - _ <- char '+' + _ <- lexeme $ char '+' return $ \(t1, x1) (t2, x2) -> if t1 == t2 then @@ -136,7 +136,7 @@ binaryOperatorTable = :: Associativity -> Text -> BinaryFun -> BinarySig -> Operator Parser TypedExpr binary assoc symbol op sig = Binary assoc $ do - _ <- string symbol + _ <- lexeme $ string symbol return $ \(t1, e1) (t2, e2) -> fmap (, op e1 e2) $ sig t1 t2 @@ -164,7 +164,7 @@ unaryOperators, builtinUnaryFuns :: [UnaryParser] unary :: Text -> UnaryFun -> UnarySig -> UnaryParser unary symbol op sig = do - _ <- string symbol + _ <- lexeme $ string symbol return $ \(t, e) -> fmap (, op e) $ sig t unaryOpP, builtinUnaryFunP :: Parser TypedExpr |