diff options
Diffstat (limited to 'src/GF/API/IOGrammar.hs')
| -rw-r--r-- | src/GF/API/IOGrammar.hs | 42 |
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 |
