summaryrefslogtreecommitdiff
path: root/app/Main.hs
diff options
context:
space:
mode:
authorMirek Kratochvil <exa.exa@gmail.com>2022-10-24 23:43:35 +0200
committerMirek Kratochvil <exa.exa@gmail.com>2022-10-24 23:43:35 +0200
commit14b77cd058ad3780d73df8bb41be946599150d18 (patch)
tree5c177b9ba3b6ca766999d4f6d11bbe8d0fde05ea /app/Main.hs
parentf0d6558df971ed199f79cdeb5149a7c19cd16777 (diff)
downloadprlg-14b77cd058ad3780d73df8bb41be946599150d18.tar.gz
prlg-14b77cd058ad3780d73df8bb41be946599150d18.tar.bz2
this.
Diffstat (limited to 'app/Main.hs')
-rw-r--r--app/Main.hs59
1 files changed, 32 insertions, 27 deletions
diff --git a/app/Main.hs b/app/Main.hs
index 5b9ed07..88b1782 100644
--- a/app/Main.hs
+++ b/app/Main.hs
@@ -1,7 +1,12 @@
module Main where
+import qualified Compiler as C
+import Control.Monad.IO.Class
import qualified Data.Map as M
-import Interpreter
+import qualified Interpreter as I
+import qualified Parser as P
+import System.Console.Haskeline
+import qualified Text.Megaparsec as MP
import Text.Pretty.Simple
ppr :: Show a => a -> IO ()
@@ -14,30 +19,30 @@ ppr =
, outputOptionsPageWidth = 80
}
-main :: IO ()
-main = do
- let (res, interp) =
- prove [Goal, U (Struct $ Id 1 2), U (Atom 1), U (Atom 2), LastCall] $
- M.fromList
- [ ( Id 1 2
- , [ [U (Atom 333), U (Atom 444), NoGoal]
- , [ U (Atom 1)
- , U (Atom 2)
- , Goal
- , U (Struct $ Id 2 0)
- , Call
- , Goal
- , U (Struct $ Id 1 2)
- , U (Atom 333)
- , U (Atom 444)
- , LastCall
- ]
- ])
- , (Id 2 0, [[NoGoal]])
- ]
- ppr interp
- ppr res
+interpret :: String -> InputT IO ()
+interpret = liftIO . lex
+ where
+ lex input =
+ case MP.parse P.lexPrlg "-" input of
+ Left bundle -> putStr (MP.errorBundlePretty bundle)
+ Right toks -> parse toks
+ parse toks =
+ case MP.parse P.parsePrlg "-" toks of
+ Left bundle -> putStr (MP.errorBundlePretty bundle)
+ Right ast -> prologize ast
+ prologize ast = ppr $ map (P.ast2prlg P.defaultOps) ast
-{-
-ppr $ let { Right l = parse lexPrlg "stdin" "c(cc(X)) :- a, b. " ; Right p = parse parsePrlg "stdin" l; clause:_ = map (ast2prlg defaultOps) p; ((StrTable _ strfwd strback),codei) = strtablizePrlg emptystrtable clause } in compileRule (Id (strfwd M.! ":-") 2) (Id (strfwd M.! ",") 2) codei
- -}
+main :: IO ()
+main =
+ runInputT defaultSettings $ do
+ outputStrLn "PRLG."
+ loop
+ where
+ loop :: InputT IO ()
+ loop = do
+ minput <- getInputLine "|= "
+ case minput of
+ Nothing -> return ()
+ Just input -> do
+ interpret input
+ loop