diff options
| author | bringert <bringert@cs.chalmers.se> | 2008-01-03 17:10:05 +0000 |
|---|---|---|
| committer | bringert <bringert@cs.chalmers.se> | 2008-01-03 17:10:05 +0000 |
| commit | af1a3a2473747942dcec647a42e5724fcb21d1b9 (patch) | |
| tree | e08020dce28ad35a5434328e6483ec695693fc20 /src/GF/Devel | |
| parent | 43ddb41d314e7d547fa8f8bb1cd23397dfa30f65 (diff) | |
Store FCFPInfo (all information needed for FCFG parsing) in GFCC files, and in the internal DataGFCC.GFCC structure. The parsing information format is still in flux.
Diffstat (limited to 'src/GF/Devel')
| -rw-r--r-- | src/GF/Devel/GFC.hs | 2 | ||||
| -rw-r--r-- | src/GF/Devel/GrammarToGFCC.hs | 13 |
2 files changed, 12 insertions, 3 deletions
diff --git a/src/GF/Devel/GFC.hs b/src/GF/Devel/GFC.hs index 85c9328f4..2cb9104c5 100644 --- a/src/GF/Devel/GFC.hs +++ b/src/GF/Devel/GFC.hs @@ -24,7 +24,7 @@ mainGFC xx = do let name = justModuleName (last fs) let (abs,gc0) = mkCanon2gfcc opts name gr gc1 <- checkGFCCio gc0 - let gc = if oElem (iOpt "noopt") opts then gc1 else optGFCC gc1 + let gc = addParsers $ if oElem (iOpt "noopt") opts then gc1 else optGFCC gc1 let target = targetName opts abs let gfccFile = target ++ ".gfcc" writeFile gfccFile (printGFCC gc) diff --git a/src/GF/Devel/GrammarToGFCC.hs b/src/GF/Devel/GrammarToGFCC.hs index b7eaebe31..5b2f4ce17 100644 --- a/src/GF/Devel/GrammarToGFCC.hs +++ b/src/GF/Devel/GrammarToGFCC.hs @@ -1,4 +1,4 @@ -module GF.Devel.GrammarToGFCC (prGrammar2gfcc,mkCanon2gfcc) where +module GF.Devel.GrammarToGFCC (prGrammar2gfcc,mkCanon2gfcc,addParsers) where import GF.Devel.OptimizeGF (unshareModule) @@ -15,6 +15,8 @@ import qualified GF.Grammar.Macros as GM import qualified GF.Infra.Modules as M import qualified GF.Infra.Option as O +import GF.Conversion.SimpleToFCFG (convertConcrete) +import GF.Parsing.FCFG.PInfo (buildFCFPInfo) import GF.Devel.PrGrammar import GF.Devel.PrintGFCC import GF.Devel.ModDeps @@ -41,6 +43,12 @@ mkCanon2gfcc opts cnc gr = abs = err error id $ M.abstractOfConcrete gr (identC cnc) pars = mkParamLincat gr +-- Adds parsers for all concretes +addParsers :: D.GFCC -> D.GFCC +addParsers gfcc = gfcc { D.concretes = Map.map conv (D.concretes gfcc) } + where + conv cnc = cnc { D.parser = Just (buildFCFPInfo (convertConcrete (D.abstract gfcc) cnc)) } + -- Generate GFCC from GFCM. -- this assumes a grammar translated by canon2canon @@ -72,7 +80,7 @@ canon2gfcc opts pars cgr@(M.MGrammar ((a,M.ModMod abm):cms)) = cncs = Map.fromList [mkConcr lang (i2i lang) mo | (lang,M.ModMod mo) <- cms] mkConcr lang0 lang mo = - (lang,D.Concr flags lins opers lincats lindefs printnames params) + (lang,D.Concr flags lins opers lincats lindefs printnames params fcfg) where js = tree2list (M.jments mo) flags = Map.fromList [(CId f,x) | Opt (f,[x]) <- M.flags mo] @@ -90,6 +98,7 @@ canon2gfcc opts pars cgr@(M.MGrammar ((a,M.ModMod abm):cms)) = (Map.fromAscList [(i2i f, mkTerm tr) | (f,CncCat _ _ (Yes tr)) <- js]) params = Map.fromAscList [(i2i c, pars lang0 c) | (c,CncCat (Yes ty) _ _) <- js] + fcfg = Nothing i2i :: Ident -> CId i2i = CId . prIdent |
