aboutsummaryrefslogtreecommitdiff
path: root/src/Language/SimpleShell
diff options
context:
space:
mode:
Diffstat (limited to 'src/Language/SimpleShell')
-rw-r--r--src/Language/SimpleShell/AST/Name.hs3
-rw-r--r--src/Language/SimpleShell/AST/SimpleType.hs6
-rw-r--r--src/Language/SimpleShell/Parser.hs7
-rw-r--r--src/Language/SimpleShell/Parser/Module.hs44
-rw-r--r--src/Language/SimpleShell/Parser/Root.hs12
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