summaryrefslogtreecommitdiff
path: root/src/GF/API/IOGrammar.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/GF/API/IOGrammar.hs')
-rw-r--r--src/GF/API/IOGrammar.hs42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/GF/API/IOGrammar.hs b/src/GF/API/IOGrammar.hs
new file mode 100644
index 000000000..a00ef18a6
--- /dev/null
+++ b/src/GF/API/IOGrammar.hs
@@ -0,0 +1,42 @@
+module IOGrammar where
+
+import Option
+import Abstract
+import qualified GFC
+import PGrammar
+import TypeCheck
+import Compile
+import ShellState
+
+import Operations
+import UseIO
+import Arch
+
+import Monad (liftM)
+
+-- for reading grammars and terms from strings and files
+
+--- a heuristic way of renaming constants is used
+string2absTerm :: String -> String -> Term
+string2absTerm m = renameTermIn m . pTrm
+
+renameTermIn :: String -> Term -> Term
+renameTermIn m = refreshMetas [] . rename [] where
+ rename vs t = case t of
+ Abs x b -> Abs x (rename (x:vs) b)
+ Vr c -> if elem c vs then t else Q (zIdent m) c
+ App f a -> App (rename vs f) (rename vs a)
+ _ -> t
+
+string2annotTree :: GFC.CanonGrammar -> Ident -> String -> Err Tree
+string2annotTree gr m = annotate gr . string2absTerm (prt m) ---- prt
+
+----string2paramList :: ConcreteST -> String -> [Term]
+---string2paramList st = map (renameTrm (lookupConcrete st) . patt2term) . pPattList
+
+shellStateFromFiles :: Options -> ShellState -> FilePath -> IOE ShellState
+shellStateFromFiles opts st file = do
+ let osb = addOptions (options [beVerbose, emitCode]) opts ---
+ grts <- compileModule osb st file
+ ioeErr $ updateShellState opts st grts
+ --- liftM (changeModTimes rts) $ grammar2shellState opts gr