summaryrefslogtreecommitdiff
path: root/src/GF/Compile/GetGrammar.hs
diff options
context:
space:
mode:
authorkrasimir <krasimir@chalmers.se>2009-03-16 14:10:30 +0000
committerkrasimir <krasimir@chalmers.se>2009-03-16 14:10:30 +0000
commita391c69fd3937cab699dbf18ec042c7eca93ac9a (patch)
tree4c1ff08c286ed6d5fdb7b875430adf816e21d6b9 /src/GF/Compile/GetGrammar.hs
parent5597cff5cb186616a0db14a2e579f7261f1a32a3 (diff)
use new parser which supports the syntax in GF.Grammar.Grammar directly
Diffstat (limited to 'src/GF/Compile/GetGrammar.hs')
-rw-r--r--src/GF/Compile/GetGrammar.hs38
1 files changed, 16 insertions, 22 deletions
diff --git a/src/GF/Compile/GetGrammar.hs b/src/GF/Compile/GetGrammar.hs
index c2d7a3f8b..c85f9588f 100644
--- a/src/GF/Compile/GetGrammar.hs
+++ b/src/GF/Compile/GetGrammar.hs
@@ -18,15 +18,10 @@ import GF.Data.Operations
import GF.Infra.UseIO
import GF.Infra.Modules
-import GF.Grammar.Grammar
-import qualified GF.Source.AbsGF as A
-import GF.Source.SourceToGrammar
----- import Macros
----- import Rename
import GF.Infra.Option
---- import Custom
-import GF.Source.ParGF
-import qualified GF.Source.LexGF as L
+import GF.Grammar.Lexer
+import GF.Grammar.Parser
+import GF.Grammar.Grammar
import GF.Compile.ReadFiles
@@ -37,22 +32,21 @@ import Control.Monad (foldM)
import System.Cmd (system)
getSourceModule :: Options -> FilePath -> IOE SourceModule
-getSourceModule opts file0 = do
- file <- foldM runPreprocessor file0 (flag optPreprocessors opts)
- string <- readFileIOE file
- let tokens = myLexer string
- mo1 <- ioeErr $ errIn file0 $ pModDef tokens
- mo2 <- ioeErr $ transModDef mo1
- return $ addOptionsToModule opts mo2
+getSourceModule opts file0 = ioe $
+ catch (do file <- foldM runPreprocessor file0 (flag optPreprocessors opts)
+ content <- BS.readFile file
+ case runP pModDef content of
+ Left (Pn l c,msg) -> return (Bad (file++":"++show l++":"++show c++": "++msg))
+ Right mo -> return (Ok (addOptionsToModule opts mo)))
+ (\e -> return (Bad (show e)))
addOptionsToModule :: Options -> SourceModule -> SourceModule
addOptionsToModule opts = mapSourceModule (\m -> m { flags = flags m `addOptions` opts })
-- FIXME: should use System.IO.openTempFile
-runPreprocessor :: FilePath -> String -> IOE FilePath
-runPreprocessor file0 p =
- do let tmp = "_gf_preproc.tmp"
- cmd = p +++ file0 ++ ">" ++ tmp
- ioeIO $ system cmd
- -- ioeIO $ putStrLn $ "preproc" +++ cmd
- return tmp
+runPreprocessor :: FilePath -> String -> IO FilePath
+runPreprocessor file0 p = do
+ let tmp = "_gf_preproc.tmp"
+ cmd = p +++ file0 ++ ">" ++ tmp
+ system cmd
+ return tmp