diff options
Diffstat (limited to 'src/Language/SimpleShell')
-rw-r--r-- | src/Language/SimpleShell/AST/Name.hs | 3 | ||||
-rw-r--r-- | src/Language/SimpleShell/AST/SimpleType.hs | 6 | ||||
-rw-r--r-- | src/Language/SimpleShell/Parser.hs | 7 | ||||
-rw-r--r-- | src/Language/SimpleShell/Parser/Module.hs | 44 | ||||
-rw-r--r-- | src/Language/SimpleShell/Parser/Root.hs | 12 |
5 files changed, 69 insertions, 3 deletions
diff --git a/src/Language/SimpleShell/AST/Name.hs b/src/Language/SimpleShell/AST/Name.hs index 69162db..3ca08f4 100644 --- a/src/Language/SimpleShell/AST/Name.hs +++ b/src/Language/SimpleShell/AST/Name.hs @@ -9,6 +9,9 @@ where import Data.Text (Text) +-- TODO: Replace type aliases by proper types. + + type VarName = Text type FunName = Text diff --git a/src/Language/SimpleShell/AST/SimpleType.hs b/src/Language/SimpleShell/AST/SimpleType.hs index a919529..6c2f916 100644 --- a/src/Language/SimpleShell/AST/SimpleType.hs +++ b/src/Language/SimpleShell/AST/SimpleType.hs @@ -2,10 +2,14 @@ module Language.SimpleShell.AST.SimpleType ( SimpleType(..) , Typed , FunSig + , ProcedureSig ) where +-- TODO: Replace type aliases by proper types. + + data SimpleType = IntType | StrType @@ -15,3 +19,5 @@ data SimpleType type Typed a = (SimpleType, a) type FunSig = (SimpleType, [SimpleType]) + +type ProcedureSig = (SimpleType, [SimpleType]) diff --git a/src/Language/SimpleShell/Parser.hs b/src/Language/SimpleShell/Parser.hs index 32015f7..30554a3 100644 --- a/src/Language/SimpleShell/Parser.hs +++ b/src/Language/SimpleShell/Parser.hs @@ -10,10 +10,11 @@ module Language.SimpleShell.Parser where +import Language.SimpleShell.Parser.Root (RootParser) + import Control.Monad (void) import Data.Text (Text) -import Data.Void (Void) -import Text.Megaparsec (MonadParsec, Parsec) +import Text.Megaparsec (MonadParsec) import Text.Megaparsec.Char (space1) import qualified Text.Megaparsec.Char.Lexer as L ( lexeme @@ -24,7 +25,7 @@ import qualified Text.Megaparsec.Char.Lexer as L ) -type MainParser = Parsec Void Text +type MainParser = RootParser -- Must be kept in sync with 'commentFirstChars'. diff --git a/src/Language/SimpleShell/Parser/Module.hs b/src/Language/SimpleShell/Parser/Module.hs new file mode 100644 index 0000000..01a8975 --- /dev/null +++ b/src/Language/SimpleShell/Parser/Module.hs @@ -0,0 +1,44 @@ +module Language.SimpleShell.Parser.Module + ( moduleP0 + , modulePF + ) +where + + +import Language.SimpleShell.AST.Module (Module) +import Language.SimpleShell.AST.Name (FunName, ProcedureName) +import Language.SimpleShell.AST.SimpleType (FunSig, ProcedureSig) +import Language.SimpleShell.Parser.Root (RootParser) + +import Control.Monad.Reader (ReaderT, runReaderT) +import Control.Monad.State (StateT, execStateT) +import Data.Map (Map) +import qualified Data.Map as Map (empty) + + +type ModuleParser0 = StateT ModuleContext RootParser + +type ModuleParser = ReaderT ModuleContext RootParser + +moduleP0 :: RootParser ModuleContext +moduleP0 = execStateT moduleMP0 initModuleContext + +modulePF :: ModuleContext -> RootParser Module +modulePF = runReaderT moduleMP + + +data ModuleContext + = ModuleContext + (Map FunName FunSig) + (Map ProcedureName ProcedureSig) + +initModuleContext :: ModuleContext +initModuleContext = ModuleContext Map.empty Map.empty + + +moduleMP0 :: ModuleParser0 () +moduleMP0 = undefined + + +moduleMP :: ModuleParser Module +moduleMP = undefined diff --git a/src/Language/SimpleShell/Parser/Root.hs b/src/Language/SimpleShell/Parser/Root.hs new file mode 100644 index 0000000..9fa32ff --- /dev/null +++ b/src/Language/SimpleShell/Parser/Root.hs @@ -0,0 +1,12 @@ +module Language.SimpleShell.Parser.Root + ( RootParser + ) +where + + +import Data.Void (Void) +import Data.Text (Text) +import Text.Megaparsec (Parsec) + + +type RootParser = Parsec Void Text |