diff options
| author | aarne <unknown> | 2005-09-14 15:26:21 +0000 |
|---|---|---|
| committer | aarne <unknown> | 2005-09-14 15:26:21 +0000 |
| commit | e3395efbf18757f16e32035f4259e47aced6da27 (patch) | |
| tree | 2063c7a4c2625da63b14604385879c85aeb095ff /src/GF/Canon | |
| parent | b109bcaafad0cdcadd38831799346257aae76c17 (diff) | |
unpar
Diffstat (limited to 'src/GF/Canon')
| -rw-r--r-- | src/GF/Canon/Unparametrize.hs | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/src/GF/Canon/Unparametrize.hs b/src/GF/Canon/Unparametrize.hs new file mode 100644 index 000000000..0ca6a2d9c --- /dev/null +++ b/src/GF/Canon/Unparametrize.hs @@ -0,0 +1,63 @@ +---------------------------------------------------------------------- +-- | +-- Module : Unparametrize +-- Maintainer : AR +-- Stability : (stable) +-- Portability : (portable) +-- +-- > CVS $Date: 2005/09/14 16:26:21 $ +-- > CVS $Author: aarne $ +-- > CVS $Revision: 1.1 $ +-- +-- Taking away parameters from a canonical grammar. All param +-- types are replaced by {}, and only one branch is left in +-- all tables. AR 14\/9\/2005. +----------------------------------------------------------------------------- + +module GF.Canon.Unparametrize (unparametrizeCanon) where + +import GF.Canon.AbsGFC +import GF.Infra.Ident +import GF.Canon.GFC +import qualified GF.Canon.CMacros as C +import GF.Data.Operations +import qualified GF.Infra.Modules as M + +unparametrizeCanon :: CanonGrammar -> CanonGrammar +unparametrizeCanon (M.MGrammar modules) = + M.MGrammar $ map unparModule modules where + + unparModule (i,m) = case m of + M.ModMod (M.Module mt@(M.MTConcrete _) st fs me ops js) -> + let me' = [(unparIdent j,incl) | (j,incl) <- me] in + (unparIdent i, M.ModMod (M.Module mt st fs me' ops (mapTree unparInfo js))) + _ -> (i,m) + + unparInfo (c,info) = case info of + CncCat ty t m -> (c, CncCat (unparCType ty) (unparTerm t) m) + CncFun k xs t m -> (c, CncFun k xs (unparTerm t) m) + AnyInd b i -> (c, AnyInd b (unparIdent i)) + _ -> (c,info) + + unparCType ty = case ty of + RecType ls -> RecType [Lbg lab (unparCType t) | Lbg lab t <- ls] + Table _ v -> unparCType v --- Table unitType (unparCType v) + Cn _ -> unitType + _ -> ty + + unparTerm t = case t of + Par _ _ -> unitTerm + T _ cs -> unparTerm (head [t | Cas _ t <- cs]) + V _ ts -> unparTerm (head ts) + S t _ -> unparTerm t +{- + T _ cs -> V unitType [unparTerm (head [t | Cas _ t <- cs])] + V _ ts -> V unitType [unparTerm (head ts)] + S t _ -> S (unparTerm t) unitTerm +-} + _ -> C.composSafeOp unparTerm t + + unitType = RecType [] + unitTerm = R [] + + unparIdent (IC s) = IC $ "UP_" ++ s |
