diff options
| author | bringert <bringert@cs.chalmers.se> | 2005-11-25 16:36:19 +0000 |
|---|---|---|
| committer | bringert <bringert@cs.chalmers.se> | 2005-11-25 16:36:19 +0000 |
| commit | dbe8e61acc616b8f5ac07e8df89eb98a7997c29d (patch) | |
| tree | 6e379f18986fc60f5606e023def46abdf770dca5 /src/Transfer/InterpreterAPI.hs | |
| parent | fe2731e5f8e301b5a0169bf8b667bb6c13bae80b (diff) | |
Move transfer into the GF repo.
Diffstat (limited to 'src/Transfer/InterpreterAPI.hs')
| -rw-r--r-- | src/Transfer/InterpreterAPI.hs | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/Transfer/InterpreterAPI.hs b/src/Transfer/InterpreterAPI.hs new file mode 100644 index 000000000..d78265534 --- /dev/null +++ b/src/Transfer/InterpreterAPI.hs @@ -0,0 +1,31 @@ +module Transfer.InterpreterAPI (Env, load, loadFile, evaluateString) where + +import Transfer.Core.Abs +import Transfer.Core.Lex +import Transfer.Core.Par +import Transfer.Core.Print +import Transfer.Interpreter +import Transfer.ErrM + +-- | Read a transfer module in core format from a string. +load :: Monad m => + String -- ^ Input source name, for error messages. + -> String -- ^ Module contents. + -> m Env +load n s = case pModule (myLexer s) of + Bad e -> fail $ "Parse error in " ++ n ++ ": " ++ e + Ok m -> return $ addModuleEnv builtin m + +-- | Read a transfer module in core format from a file. +loadFile :: FilePath -> IO Env +loadFile f = readFile f >>= load f + +-- | Read a transfer expression from a string and evaluate it. +-- Returns the result as a string. +evaluateString :: Monad m => Env -> String -> m String +evaluateString env s = + case pExp (myLexer s) of + Bad e -> fail $ "Parse error: " ++ e + Ok e -> do + let v = eval env e + return $ printValue v |
