diff options
| author | Mirek Kratochvil <exa.exa@gmail.com> | 2022-10-24 23:43:35 +0200 |
|---|---|---|
| committer | Mirek Kratochvil <exa.exa@gmail.com> | 2022-10-24 23:43:35 +0200 |
| commit | 14b77cd058ad3780d73df8bb41be946599150d18 (patch) | |
| tree | 5c177b9ba3b6ca766999d4f6d11bbe8d0fde05ea /app/Main.hs | |
| parent | f0d6558df971ed199f79cdeb5149a7c19cd16777 (diff) | |
| download | prlg-14b77cd058ad3780d73df8bb41be946599150d18.tar.gz prlg-14b77cd058ad3780d73df8bb41be946599150d18.tar.bz2 | |
this.
Diffstat (limited to 'app/Main.hs')
| -rw-r--r-- | app/Main.hs | 59 |
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 |
