mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-23 19:42:50 -06:00
added -fcgf grammar printer
This commit is contained in:
@@ -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)]
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user