diff options
| author | aarne <aarne@chalmers.se> | 2011-08-28 10:35:55 +0000 |
|---|---|---|
| committer | aarne <aarne@chalmers.se> | 2011-08-28 10:35:55 +0000 |
| commit | 769121788a01bc4a21cd69299a788876244e3d31 (patch) | |
| tree | fec0185e93e6d2350bdf22ab02ec752627603e18 /src/compiler/GF | |
| parent | 5339aa80744c3afd221256d763cf784386eed573 (diff) | |
import command now gives priority to new abstract syntax, and discards the old concretes if they are for the old abstract; the new priority is implemented in PGF.Data.unionPGF
Diffstat (limited to 'src/compiler/GF')
| -rw-r--r-- | src/compiler/GF/Command/Commands.hs | 6 | ||||
| -rw-r--r-- | src/compiler/GF/Command/Importing.hs | 9 |
2 files changed, 12 insertions, 3 deletions
diff --git a/src/compiler/GF/Command/Commands.hs b/src/compiler/GF/Command/Commands.hs index 543c05cb2..4197e0c31 100644 --- a/src/compiler/GF/Command/Commands.hs +++ b/src/compiler/GF/Command/Commands.hs @@ -436,7 +436,8 @@ allCommands env@(pgf, mos) = Map.fromList [ synopsis = "import a grammar from source code or compiled .pgf file", explanation = unlines [ "Reads a grammar from File and compiles it into a GF runtime grammar.", - "If a grammar with the same concrete name is already in the state", + "If its abstract is different from current state, old modules are discarded.", + "If its abstract is the same and a concrete with the same name is already in the state", "it is overwritten - but only if compilation succeeds.", "The grammar parser depends on the file name suffix:", " .cf context-free (labelled BNF) source", @@ -588,6 +589,7 @@ allCommands env@(pgf, mos) = Map.fromList [ ("cats", "show just the names of abstract syntax categories"), ("fullform", "print the fullform lexicon"), ("funs", "show just the names and types of abstract syntax functions"), + ("langs", "show just the names of top concrete syntax modules"), ("lexc", "print the lexicon in Xerox LEXC format"), ("missing","show just the names of functions that have no linearization"), ("opt", "optimize the generated pgf"), @@ -1169,6 +1171,8 @@ allCommands env@(pgf, mos) = Map.fromList [ | isOpt "cats" opts = return $ fromString $ unwords $ map showCId $ categories pgf | isOpt "funs" opts = return $ fromString $ unlines $ map showFun $ funsigs pgf | isOpt "fullform" opts = return $ fromString $ concatMap (morpho "" prFullFormLexicon) $ optLangs opts + | isOpt "langs" opts = return $ fromString $ unwords $ map showCId $ languages pgf + | isOpt "lexc" opts = return $ fromString $ concatMap (morpho "" prLexcLexicon) $ optLangs opts | isOpt "missing" opts = return $ fromString $ unlines $ [unwords (showCId la:":": map showCId cs) | la <- optLangs opts, let cs = missingLins pgf la] diff --git a/src/compiler/GF/Command/Importing.hs b/src/compiler/GF/Command/Importing.hs index 3d05868b1..cbbb7a30e 100644 --- a/src/compiler/GF/Command/Importing.hs +++ b/src/compiler/GF/Command/Importing.hs @@ -30,14 +30,19 @@ importGrammar pgf0 opts files = s | elem s [".gf",".gfo"] -> do res <- appIOE $ compileToPGF opts files case res of - Ok pgf2 -> do return $ unionPGF pgf0 pgf2 + Ok pgf2 -> ioUnionPGF pgf0 pgf2 Bad msg -> do putStrLn ('\n':'\n':msg) return pgf0 ".pgf" -> do pgf2 <- mapM readPGF files >>= return . foldl1 unionPGF - return $ unionPGF pgf0 pgf2 + ioUnionPGF pgf0 pgf2 ext -> die $ "Unknown filename extension: " ++ show ext +ioUnionPGF :: PGF -> PGF -> IO PGF +ioUnionPGF one two = case msgUnionPGF one two of + (pgf, Just msg) -> putStrLn msg >> return pgf + (pgf,_) -> return pgf + importSource :: SourceGrammar -> Options -> [FilePath] -> IO SourceGrammar importSource src0 opts files = do src <- appIOE $ batchCompile opts files |
