on master help sign in
implement simple REPR for Tutorial D interpreter
c6898c3AgentM
READMEnew file+4
@@ -0,0 +1,4 @@
1+# Project:M36
2+## Relational Algebra Engine
3+
4+Project:M36 implements a relational algebra engine as (mostly) specified by Chris Date.
TutorialDInterpreter.hs+13
@@ -13,6 +13,7 @@ import qualified Data.HashSet as HS
13import qualified Data.Map as M
13import qualified Data.Map as M
14import Control.Applicative ((<$), (<*), (*>), liftA, liftA2)
14import Control.Applicative ((<$), (<*), (*>), liftA, liftA2)
15import Control.Monad.State
15import Control.Monad.State
16+import System.Console.Readline
16
17
17lexer :: Token.TokenParser ()
18lexer :: Token.TokenParser ()
18lexer = Token.makeTokenParser tutD
19lexer = Token.makeTokenParser tutD
@@ -126,3 +127,15 @@ example9 = "relA := relation { SNO CHAR }"
126interpret :: RelVarContext -> String -> (Either RelationalError Relation, RelVarContext)
127interpret :: RelVarContext -> String -> (Either RelationalError Relation, RelVarContext)
127interpret context tutdstring = runState (eval (parseString tutdstring)) context
128interpret context tutdstring = runState (eval (parseString tutdstring)) context
128
129
130+reprLoop :: RelVarContext -> IO ()
131+reprLoop context = do
132+ maybeLine <- readline "TutorialD: "
133+ case maybeLine of
134+ Nothing -> return ()
135+ Just line -> do
136+ addHistory line
137+ case fst (interpret context line) of
138+ Right rel -> putStrLn $ show rel
139+ Left err -> putStrLn $ show err
140+ reprLoop context
141+
project-m36.cabal+3−3
@@ -6,9 +6,9 @@ Homepage: https://github.com/agentm/project-m36
6Category: Relational Algebra
6Category: Relational Algebra
7Cabal-Version: >= 1.2
7Cabal-Version: >= 1.2
8
8
9−Library
9+Executable tutd
10− Build-Depends: base,mtl,containers,unordered-containers,parsec,hashable
10+ Build-Depends: base,mtl,containers,unordered-containers,parsec,hashable,readline
11− Exposed-Modules: TutorialDInterpreter
11+ main-is: tutd.hs
12
12
13Test-Suite test-tutoriald
13Test-Suite test-tutoriald
14 type: exitcode-stdio-1.0
14 type: exitcode-stdio-1.0
tutd.hsnew file+4
@@ -0,0 +1,4 @@
1+import TutorialDInterpreter
2+import RelationExpr
3+
4+main = reprLoop dateExamples