added -fcgf grammar printer

This commit is contained in:
peb
2006-06-02 10:44:41 +00:00
parent 58bcb9e22e
commit 3ddb066a55
3 changed files with 18 additions and 7 deletions

View File

@@ -61,6 +61,7 @@ data ShellState = ShSt {
cfs :: [(Ident,CF)] , -- ^ context-free grammars (small, no parameters, very over-generating) cfs :: [(Ident,CF)] , -- ^ context-free grammars (small, no parameters, very over-generating)
abstracts :: [(Ident,[Ident])], -- ^ abstracts and their associated concretes abstracts :: [(Ident,[Ident])], -- ^ abstracts and their associated concretes
mcfgs :: [(Ident, Cnv.MGrammar)], -- ^ MCFG, converted according to Ljunglöf (2004, ch 3) mcfgs :: [(Ident, Cnv.MGrammar)], -- ^ MCFG, converted according to Ljunglöf (2004, ch 3)
fcfgs :: [(Ident, Cnv.FGrammar)], -- ^ FCFG, optimized MCFG by Krasimir Angelov
cfgs :: [(Ident, Cnv.CGrammar)], -- ^ CFG, converted from mcfg cfgs :: [(Ident, Cnv.CGrammar)], -- ^ CFG, converted from mcfg
-- (large, with parameters, no-so overgenerating) -- (large, with parameters, no-so overgenerating)
pInfos :: [(Ident, Prs.PInfo)], -- ^ parsing information (compiled mcfg&cfg grammars) pInfos :: [(Ident, Prs.PInfo)], -- ^ parsing information (compiled mcfg&cfg grammars)
@@ -106,6 +107,7 @@ emptyShellState = ShSt {
cfs = [], cfs = [],
abstracts = [], abstracts = [],
mcfgs = [], mcfgs = [],
fcfgs = [],
cfgs = [], cfgs = [],
pInfos = [], pInfos = [],
morphos = [], morphos = [],
@@ -136,6 +138,7 @@ data StateGrammar = StGr {
grammar :: CanonGrammar, grammar :: CanonGrammar,
cf :: CF, cf :: CF,
mcfg :: Cnv.MGrammar, mcfg :: Cnv.MGrammar,
fcfg :: Cnv.FGrammar,
cfg :: Cnv.CGrammar, cfg :: Cnv.CGrammar,
pInfo :: Prs.PInfo, pInfo :: Prs.PInfo,
morpho :: Morpho, morpho :: Morpho,
@@ -150,6 +153,7 @@ emptyStateGrammar = StGr {
grammar = M.emptyMGrammar, grammar = M.emptyMGrammar,
cf = emptyCF, cf = emptyCF,
mcfg = [], mcfg = [],
fcfg = [],
cfg = [], cfg = [],
pInfo = Prs.buildPInfo [] [] [], pInfo = Prs.buildPInfo [] [] [],
morpho = emptyMorpho, morpho = emptyMorpho,
@@ -162,6 +166,7 @@ emptyStateGrammar = StGr {
stateGrammarST :: StateGrammar -> CanonGrammar stateGrammarST :: StateGrammar -> CanonGrammar
stateCF :: StateGrammar -> CF stateCF :: StateGrammar -> CF
stateMCFG :: StateGrammar -> Cnv.MGrammar stateMCFG :: StateGrammar -> Cnv.MGrammar
stateFCFG :: StateGrammar -> Cnv.FGrammar
stateCFG :: StateGrammar -> Cnv.CGrammar stateCFG :: StateGrammar -> Cnv.CGrammar
statePInfo :: StateGrammar -> Prs.PInfo statePInfo :: StateGrammar -> Prs.PInfo
stateMorpho :: StateGrammar -> Morpho stateMorpho :: StateGrammar -> Morpho
@@ -173,6 +178,7 @@ stateGrammarLang :: StateGrammar -> (CanonGrammar, Ident)
stateGrammarST = grammar stateGrammarST = grammar
stateCF = cf stateCF = cf
stateMCFG = mcfg stateMCFG = mcfg
stateFCFG = fcfg
stateCFG = cfg stateCFG = cfg
statePInfo = pInfo statePInfo = pInfo
stateMorpho = morpho stateMorpho = morpho
@@ -258,6 +264,7 @@ updateShellState opts ign mcnc sh ((_,sgr,gr),rts) = do
cfs = cf's, cfs = cf's,
abstracts = abstrs, abstracts = abstrs,
mcfgs = zip concrs mcfgs, mcfgs = zip concrs mcfgs,
fcfgs = zip concrs fcfgs,
cfgs = zip concrs cfgs, cfgs = zip concrs cfgs,
pInfos = zip concrs pInfos, pInfos = zip concrs pInfos,
morphos = morphs, morphos = morphs,
@@ -309,6 +316,7 @@ purgeShellState sh = ShSt {
cfs = cfs sh, cfs = cfs sh,
abstracts = maybe [] (\a -> [(a,map (snd . fst) concrs)]) abstr, abstracts = maybe [] (\a -> [(a,map (snd . fst) concrs)]) abstr,
mcfgs = mcfgs sh, mcfgs = mcfgs sh,
fcfgs = fcfgs sh,
cfgs = cfgs sh, cfgs = cfgs sh,
pInfos = pInfos sh, pInfos = pInfos sh,
morphos = morphos sh, morphos = morphos sh,
@@ -329,16 +337,16 @@ purgeShellState sh = ShSt {
acncs = maybe [] singleton abstr ++ map (snd . fst) (actualConcretes sh) acncs = maybe [] singleton abstr ++ map (snd . fst) (actualConcretes sh)
changeMain :: Maybe Ident -> ShellState -> Err ShellState changeMain :: Maybe Ident -> ShellState -> Err ShellState
changeMain Nothing (ShSt _ _ cs ms ss cfs old_pis mcfgs cfgs pinfos mos tbs pbs os rs acs s trs) = changeMain Nothing (ShSt _ _ cs ms ss cfs old_pis mcfgs fcfgs cfgs pinfos mos tbs pbs os rs acs s trs) =
return (ShSt Nothing Nothing [] ms ss cfs old_pis mcfgs cfgs pinfos mos tbs pbs os rs acs s trs) return (ShSt Nothing Nothing [] ms ss cfs old_pis mcfgs fcfgs cfgs pinfos mos tbs pbs os rs acs s trs)
changeMain changeMain
(Just c) st@(ShSt _ _ cs ms ss cfs old_pis mcfgs cfgs pinfos mos tbs pbs os rs acs s trs) = (Just c) st@(ShSt _ _ cs ms ss cfs old_pis mcfgs fcfgs cfgs pinfos mos tbs pbs os rs acs s trs) =
case lookup c (M.modules ms) of case lookup c (M.modules ms) of
Just _ -> do Just _ -> do
a <- M.abstractOfConcrete ms c a <- M.abstractOfConcrete ms c
let cas = M.allConcretes ms a let cas = M.allConcretes ms a
let cs' = [((c,c),True) | c <- cas] let cs' = [((c,c),True) | c <- cas]
return (ShSt (Just a) (Just c) cs' ms ss cfs old_pis mcfgs cfgs return (ShSt (Just a) (Just c) cs' ms ss cfs old_pis mcfgs fcfgs cfgs
pinfos mos tbs pbs os rs acs s trs) pinfos mos tbs pbs os rs acs s trs)
_ -> P.prtBad "The state has no concrete syntax named" c _ -> P.prtBad "The state has no concrete syntax named" c
@@ -365,6 +373,7 @@ stateGrammarOfLangOpt purg st0 l = StGr {
grammar = allCan, grammar = allCan,
cf = maybe emptyCF id (lookup l (cfs st)), cf = maybe emptyCF id (lookup l (cfs st)),
mcfg = maybe [] id $ lookup l $ mcfgs st, mcfg = maybe [] id $ lookup l $ mcfgs st,
fcfg = maybe [] id $ lookup l $ fcfgs st,
cfg = maybe [] id $ lookup l $ cfgs st, cfg = maybe [] id $ lookup l $ cfgs st,
pInfo = maybe (Prs.buildPInfo [] [] []) id $ lookup l $ pInfos st, pInfo = maybe (Prs.buildPInfo [] [] []) id $ lookup l $ pInfos st,
morpho = maybe emptyMorpho id (lookup l (morphos st)), morpho = maybe emptyMorpho id (lookup l (morphos st)),
@@ -407,6 +416,7 @@ stateAbstractGrammar st = StGr {
grammar = canModules st, ---- only abstarct ones grammar = canModules st, ---- only abstarct ones
cf = emptyCF, cf = emptyCF,
mcfg = [], mcfg = [],
fcfg = [],
cfg = [], cfg = [],
pInfo = Prs.buildPInfo [] [] [], pInfo = Prs.buildPInfo [] [] [],
morpho = emptyMorpho, morpho = emptyMorpho,
@@ -524,8 +534,8 @@ changeOptions f sh = sh {gloptions = f (gloptions sh)}
changeModTimes :: [(FilePath,ModTime)] -> ShellStateOper changeModTimes :: [(FilePath,ModTime)] -> ShellStateOper
--- __________ this is OBSOLETE --- __________ this is OBSOLETE
changeModTimes mfs changeModTimes mfs
(ShSt a c cs can src cfs old_pinfos mcfgs cfgs pinfos ms tbs pbs os ff ts ss trs) = (ShSt a c cs can src cfs old_pinfos mcfgs fcfgs cfgs pinfos ms tbs pbs os ff ts ss trs) =
ShSt a c cs can src cfs old_pinfos mcfgs cfgs pinfos ms tbs pbs os ff' ts ss trs ShSt a c cs can src cfs old_pinfos mcfgs fcfgs cfgs pinfos ms tbs pbs os ff' ts ss trs
where where
ff' = mfs ++ [mf | mf@(f,_) <- ff, notElem f (map fst mfs)] ff' = mfs ++ [mf | mf@(f,_) <- ff, notElem f (map fst mfs)]

View File

@@ -13,7 +13,7 @@
module GF.Conversion.GFC module GF.Conversion.GFC
(module GF.Conversion.GFC, (module GF.Conversion.GFC,
SGrammar, EGrammar, MGrammar, CGrammar) where SGrammar, EGrammar, MGrammar, FGrammar, CGrammar) where
import GF.Infra.Option import GF.Infra.Option
import GF.Canon.GFC (CanonGrammar) import GF.Canon.GFC (CanonGrammar)

View File

@@ -308,6 +308,7 @@ customGrammarPrinter =
-- grammar conversions: -- grammar conversions:
,(strCI "mcfg", \_ -> Prt.prt . stateMCFG) ,(strCI "mcfg", \_ -> Prt.prt . stateMCFG)
,(strCI "fcfg", \_ -> Prt.prt . stateFCFG)
,(strCI "cfg", \_ -> Prt.prt . stateCFG) ,(strCI "cfg", \_ -> Prt.prt . stateCFG)
,(strCI "pinfo", \_ -> Prt.prt . statePInfo) ,(strCI "pinfo", \_ -> Prt.prt . statePInfo)
,(strCI "abstract", \_ -> Prt.prtAfter "\n" . Cnv.gfc2abstract . stateGrammarLang) ,(strCI "abstract", \_ -> Prt.prtAfter "\n" . Cnv.gfc2abstract . stateGrammarLang)