diff options
Diffstat (limited to 'src/Language')
-rw-r--r-- | src/Language/SimpleShell/Parser.hs | 8 | ||||
-rw-r--r-- | src/Language/SimpleShell/Parser/Expr.hs | 8 | ||||
-rw-r--r-- | src/Language/SimpleShell/Parser/Function.hs | 15 |
3 files changed, 13 insertions, 18 deletions
diff --git a/src/Language/SimpleShell/Parser.hs b/src/Language/SimpleShell/Parser.hs index 30554a3..5f536ed 100644 --- a/src/Language/SimpleShell/Parser.hs +++ b/src/Language/SimpleShell/Parser.hs @@ -2,16 +2,13 @@ {-# LANGUAGE FlexibleContexts #-} module Language.SimpleShell.Parser - ( MainParser - , lexeme + ( lexeme , symbol , commentFirstChars ) where -import Language.SimpleShell.Parser.Root (RootParser) - import Control.Monad (void) import Data.Text (Text) import Text.Megaparsec (MonadParsec) @@ -25,9 +22,6 @@ import qualified Text.Megaparsec.Char.Lexer as L ) -type MainParser = RootParser - - -- Must be kept in sync with 'commentFirstChars'. sc :: (MonadParsec e Text m) => m () sc = L.space diff --git a/src/Language/SimpleShell/Parser/Expr.hs b/src/Language/SimpleShell/Parser/Expr.hs index db8a493..ab27555 100644 --- a/src/Language/SimpleShell/Parser/Expr.hs +++ b/src/Language/SimpleShell/Parser/Expr.hs @@ -15,12 +15,12 @@ import Language.SimpleShell.AST.Expr (Expr(..), TypedExpr) import Language.SimpleShell.AST.Name (FunName, VarName) import Language.SimpleShell.AST.SimpleType (SimpleType(..), Typed, FunSig) import Language.SimpleShell.Parser - ( MainParser - , lexeme + ( lexeme , symbol , commentFirstChars ) import Language.SimpleShell.Parser.Name (nameP, keyword) +import Language.SimpleShell.Parser.Root (RootParser) import Language.SimpleShell.Parser.SimpleType (forceType) import Control.Monad.Combinators.FailExpr ( Associativity(..) @@ -43,7 +43,7 @@ import Text.Megaparsec.Char (char) import qualified Text.Megaparsec.Char.Lexer as L (charLiteral, decimal) -type ExprParser = ReaderT ExprContext MainParser +type ExprParser = ReaderT ExprContext RootParser type Parser = ExprParser @@ -53,7 +53,7 @@ data ExprContext = ExprContext } -runExprParser :: [Typed VarName] -> ExprParser a -> MainParser a +runExprParser :: [Typed VarName] -> ExprParser a -> RootParser a runExprParser decls p = if length (nub names) == length names -- TODO: inefficient then runReaderT p (ExprContext vars Map.empty) diff --git a/src/Language/SimpleShell/Parser/Function.hs b/src/Language/SimpleShell/Parser/Function.hs index 667a601..0753952 100644 --- a/src/Language/SimpleShell/Parser/Function.hs +++ b/src/Language/SimpleShell/Parser/Function.hs @@ -11,20 +11,21 @@ import Language.SimpleShell.AST.Expr (Expr) import Language.SimpleShell.AST.Function (Function(..)) import Language.SimpleShell.AST.Name (FunName, VarName) import Language.SimpleShell.AST.SimpleType (SimpleType, FunSig, Typed) -import Language.SimpleShell.Parser (MainParser, symbol) +import Language.SimpleShell.Parser (symbol) import Language.SimpleShell.Parser.Expr ( runExprParser , strongTermP , strongTermP_ ) import Language.SimpleShell.Parser.Name (nameP, keyword) +import Language.SimpleShell.Parser.Root (RootParser) import Language.SimpleShell.Parser.SimpleType (simpleTypeP, forceType) import Control.Applicative ((<|>)) import Text.Megaparsec (sepBy) -functionPrefixP :: MainParser (SimpleType, FunName, [Typed VarName]) +functionPrefixP :: RootParser (SimpleType, FunName, [Typed VarName]) functionPrefixP = do keyword "function" t' <- simpleTypeP @@ -33,7 +34,7 @@ functionPrefixP = do symbol "=" return (t', fname, params) -functionP :: MainParser Function +functionP :: RootParser Function functionP = do (t', fname, params) <- functionPrefixP let vars = map snd params @@ -41,7 +42,7 @@ functionP = do return $ Function fname vars body -- | First-pass function parser. -functionP0 :: MainParser (FunName, FunSig) +functionP0 :: RootParser (FunName, FunSig) functionP0 = do (t', fname, params) <- functionPrefixP let ts = map fst params @@ -49,11 +50,11 @@ functionP0 = do return (fname, (t', ts)) -paramP :: MainParser (Typed VarName) +paramP :: RootParser (Typed VarName) paramP = (,) <$> simpleTypeP <*> nameP -bodyP :: [Typed VarName] -> MainParser (Typed Expr) +bodyP :: [Typed VarName] -> RootParser (Typed Expr) bodyP params = runExprParser params strongTermP -bodyP_ :: MainParser () +bodyP_ :: RootParser () bodyP_ = runExprParser [] strongTermP_ |