From 2b1d5a4d513970308f47c735212cbc253ec40961 Mon Sep 17 00:00:00 2001 From: aarne Date: Tue, 6 Nov 2007 14:44:17 +0000 Subject: Devel/GF3: experimentally putting together all functionalities for the first time --- src/GF/Command/Importing.hs | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/GF/Command/Importing.hs (limited to 'src/GF/Command') diff --git a/src/GF/Command/Importing.hs b/src/GF/Command/Importing.hs new file mode 100644 index 000000000..dc8255ad2 --- /dev/null +++ b/src/GF/Command/Importing.hs @@ -0,0 +1,34 @@ +module GF.Command.Importing (importGrammar) where + +import GF.Devel.Compile +import GF.Devel.GrammarToGFCC +import GF.GFCC.OptimizeGFCC +import GF.GFCC.CheckGFCC +import GF.GFCC.DataGFCC +import GF.GFCC.ParGFCC +import GF.GFCC.API +import qualified GF.Command.AbsGFShell as C + +import GF.Devel.UseIO +import GF.Infra.Option + +import Data.List (nubBy) + +-- import a grammar in an environment where it extends an existing grammar +importGrammar :: MultiGrammar -> Options -> [FilePath] -> IO MultiGrammar +importGrammar mgr0 opts files = do + gfcc2 <- case fileSuffix (last files) of + s | elem s ["gf","gfo"] -> do + gr <- batchCompile opts files + let name = justModuleName (last files) + let (abs,gfcc0) = mkCanon2gfcc opts name gr + (gfcc1,b) <- checkGFCC gfcc0 + if b then return () else do + putStrLn "Corrupted GFCC" + return $ if oElem (iOpt "noopt") opts then gfcc1 else optGFCC gfcc1 + "gfcc" -> + mapM file2gfcc files >>= return . foldl1 unionGFCC + let gfcc3 = unionGFCC (gfcc mgr0) gfcc2 + return $ MultiGrammar gfcc3 + (nubBy (\ (x,_) (y,_) -> x == y) (gfcc2parsers gfcc3 ++ parsers mgr0)) + -- later coming parsers override -- cgit v1.2.3