diff --git a/lib/src/experimental/transfer/Both.hs b/lib/src/experimental/transfer/Both.hs index 25369156a..465a1b38e 100644 --- a/lib/src/experimental/transfer/Both.hs +++ b/lib/src/experimental/transfer/Both.hs @@ -292,6 +292,7 @@ type GFloat = Tree GFloat_ data GFloat_ data Tree :: * -> * where +---- GEMeta :: Int -> [forall a . Tree a] -> Tree a GAdAP :: GAdA -> GAP -> Tree GAP_ GAdjOrd :: GOrd -> Tree GAP_ GAdvAP :: GAP -> GAdv -> Tree GAP_ @@ -2718,6 +2719,9 @@ instance Gf GVV where instance Compos Tree where compos r a f t = case t of + +---- GEMeta m x1 -> r (GEMeta m) `a` foldr (a . a (r (:)) . f) (r []) x1 + GAdAP x1 x2 -> r GAdAP `a` f x1 `a` f x2 GAdjOrd x1 -> r GAdjOrd `a` f x1 GAdvAP x1 x2 -> r GAdvAP `a` f x1 `a` f x2 diff --git a/lib/src/experimental/transfer/Old2New.hs b/lib/src/experimental/transfer/Old2New.hs index e1ba1b125..919830e4e 100644 --- a/lib/src/experimental/transfer/Old2New.hs +++ b/lib/src/experimental/transfer/Old2New.hs @@ -1,24 +1,54 @@ +{-# OPTIONS_GHC -fglasgow-exts #-} + module Old2New where +import PGF hiding (Tree) +import qualified PGF +import PGF.Data import Both -onUtt :: Tree a -> Tree a ----GUtt_ -> Tree GUtt_ -onUtt t = case t of - GUttAP ap -> GUttAP (onAP ap) - GUttAdv adv -> GUttAdv (onAdv adv) - GUttCN cn -> GUttCN (onCN cn) - GUttNP np -> GUttNP (onNP np) +transfer :: PGF.Tree -> PGF.Tree +transfer = gf . onPhr . fg + +{- +transfer t = case unAppForm t of + (EMeta m, es) -> foldl EApp (EMeta m) (map transfer es) + _ -> gf $ on $ fg t +-} + +onPhr :: Tree GPhr_ -> Tree GPhr_ +onPhr = on + +on :: forall a . Tree a -> Tree a +on t = case t of + +---- GEMeta m ts -> GEMeta m (map on ts) + + +-- Utt GUttImpPl pol (GImpVP vp) -> GPrImpPl (onVP GTPres GASimul pol vp) GUttImpPol pol (GImpVP vp) -> GPrImpSg (onVP GTPres GASimul pol vp) ---- GUttImpSg pol (GImpVP vp) -> GPrImpSg (onVP GTPres GASimul pol vp) GUttQS qs -> GUttPrS (GUseQCl_none (onQS2QCl qs)) GUttS s -> GUttPrS (onS s) ----- GUttVP s -> GUttPrVPI (GInfVP_none (onVP GTPres ant pol vp)) ----+ + GUttVP s -> error "GUttPrVPI (GInfVP_none (onVP GTPres ant pol vp))" +-- RS + GUseRCl (GTTAnt t a) p (GRelVP rp vp) -> GRelVP_none rp (onVP t a p vp) + GUseRCl (GTTAnt t a) p (GRelSlash rp cls) -> GRelSlash_none rp (onClSlash t a p cls) +-- NP + GRelNP np rs -> GRelNP (on np) (on rs) + +-- Adv + GComparAdvAdjS cadv a s -> error "GComparAdvAdjS cadv a (onS s)" + GSubjS subj s -> error "GSubjS subj s" + +-- AP + + _ -> composOp on t - _ -> composOp onUtt t onS :: Tree GS_ -> Tree GPrS_ onS s = case s of @@ -27,12 +57,28 @@ onS s = case s of GExtAdvS adv s -> error "ExtAdvS" GRelS s rs -> error "RelS" GSSubjS s subj s2 -> error "SSubjS" - GConjS conj lists -> error "ConjS" - GPredVPS np vps -> error "PredVPS" + GConjS conj (GListS lists) -> GUseCl_none (GUseClC_none (mkClC conj [onS2Cl s | s <- lists])) + GPredVPS np vps -> GUseCl_none (GPredVP_none (on np) (onVPS2VP vps)) + +mkClC conj cls = foldr GContClC_none (GStartClC_none conj cl1 cl2) cls2 + where + (cls2,[cl1,cl2]) = splitAt (length cls - 2) cls + + + +onVPS2VP :: Tree GVPS_ -> Tree GPrVP_none_ +onVPS2VP vps = case vps of + GMkVPS (GTTAnt t a) p vp -> onVP t a p vp + GConjVPS conj (GListVPS vs) -> GUseVPC_none (mkVPC conj [onVPS2VP v | v <- vs]) + +mkVPC conj cls = foldr GContVPC_none (GStartVPC_none conj cl1 cl2) cls2 + where + (cls2,[cl1,cl2]) = splitAt (length cls - 2) cls + onCl :: GTense -> GAnt -> GPol -> Tree GCl_ -> Tree GPrCl_none_ onCl t a p cl = case cl of - GPredVP np vp -> let (advs,vp0) = getAdvs vp in appAdvCl advs (GPredVP_none np (onVP t a p vp0)) --- + GPredVP np vp -> let (advs,vp0) = getAdvs vp in appAdvCl advs (GPredVP_none (on np) (onVP t a p vp0)) --- ---- ExistNP : NP -> Cl ; ---- PredSCVP : SC -> VP -> Cl ; ---- PredVPosv : NP -> VP -> Cl ; @@ -65,10 +111,10 @@ onVP t a p vp = case vp of GComplVV vv ant pol vp -> GComplVV_none (GUseV_v a t p (GLiftVV vv)) (GInfVP_none (onVP GTPres ant pol vp)) -- !! GComplSlash vps np -> GComplV2_none (onVPSlash t a p vps) np GUseComp comp -> case comp of - GCompAP ap -> GUseAP_none a t p (GLiftAP (onAP ap)) - GCompAdv adv -> GUseAdv_none a t p (GLiftAdv (onAdv adv)) - GCompCN cn -> GUseCN_none a t p (GLiftCN (onCN cn)) - GCompNP np -> GUseNP_none a t p (onNP np) + GCompAP ap -> GUseAP_none a t p (GLiftAP (on ap)) + GCompAdv adv -> GUseAdv_none a t p (GLiftAdv (on adv)) + GCompCN cn -> GUseCN_none a t p (GLiftCN (on cn)) + GCompNP np -> GUseNP_none a t p (on np) GCompS s -> GUseS_none a t p (onS2Cl s) GCompQS qs -> GUseQ_none a t p (onQS2QCl qs) GCompVP ant pol vp -> GUseVP_none a t p (GInfVP_none (onVP GTPres ant pol vp)) -- !! @@ -105,140 +151,3 @@ onQS2QCl :: Tree GQS_ -> Tree GPrQCl_none_ onQS2QCl s = case s of GUseQCl (GTTAnt t a) p qcl -> onQCl t a p qcl -onRS :: Tree GRS_ -> Tree GRS_ -onRS rs = case rs of - GUseRCl (GTTAnt t a) p (GRelVP rp vp) -> GRelVP_none rp (onVP t a p vp) - GUseRCl (GTTAnt t a) p (GRelSlash rp cls) -> GRelSlash_none rp (onClSlash t a p cls) - - - - -onNP :: Tree GNP_ -> Tree GNP_ -onNP np = case np of - GRelNP np rs -> GRelNP (onNP np) (onRS rs) - _ -> np ----composOp onNP np - -onCN :: Tree GCN_ -> Tree GCN_ -onCN cn = case cn of - GRelCN cn rs -> GRelCN (onCN cn) (onRS rs) - _ -> cn ----composOp onCN cn - -onAdv :: Tree GAdv_ -> Tree GAdv_ -onAdv adv = case adv of - GAdAdv ada adv -> GAdAdv ada (onAdv adv) - GComparAdvAdj cadv a np -> GComparAdvAdj cadv a (onNP np) ----- GComparAdvAdjS cadv a s -> GComparAdvAdjS cadv a (onS s) - GPrepNP prep np -> GPrepNP prep (onNP np) - GSubjS subj s -> error "GSubjS" - GConjAdv conj (GListAdv advs) -> GConjAdv conj (GListAdv (map onAdv advs)) - _ -> adv - -onAP :: Tree GAP_ -> Tree GAP_ -onAP ap = case ap of - GAdAP ada ap -> GAdAP ada (onAP ap) - GAdvAP ap adv -> GAdvAP (onAP ap) (onAdv adv) - GComparA a np -> GComparA a (onNP np) - _ -> ap ----composOp onNP np - -old2new :: Tree a -> Tree a -old2new t = case t of - GAdVVP gAdV gVP -> t - GAdVVPSlash gAdV gVPSlash -> t - GAdvS gAdv gS -> t - GAdvSlash gClSlash gAdv -> t - GAdvVP gVP gAdv -> t - GAdvVPSlash gVPSlash gAdv -> t --- GBaseVPI gVPI gVPI_ -> t --- GBaseVPS gVPS gVPS_ -> t - GCompAP gAP -> t - GCompAdv gAdv -> t - GCompCN gCN -> t - GCompNP gNP -> t - GCompQS gQS -> t - GCompS gS -> t - GCompVP gAnt gPol gVP -> t - GComplBareVS gVS gS -> t - GComplSlash gVPSlash gNP -> t - GComplSlashPartLast gVPSlash gNP -> t - GComplVA gVA gAP -> t - GComplVPIVV gVV gVPI -> t - GComplVQ gVQ gQS -> t - GComplVS gVS gS -> t - GComplVV gVV gAnt gPol gVP -> t - GCompoundCN gNum gN gCN -> t - GConjVPI gConj gListVPI -> t - GConjVPS gConj gListVPS -> t --- GConsVPI gVPI gListVPI -> t --- GConsVPS gVPS gListVPS -> t - GDashCN gN gN_ -> t - GEmbedQS gQS -> t - GEmbedS gS -> t - GEmbedVP gVP -> t - GEmptyRelSlash gClSlash -> t - GExtAdvS gAdv gS -> t - GExtAdvVP gVP gAdv -> t - GGenNP gNP -> t - GGenRP gNum gCN -> t - GGerundAP gV -> t - GGerundN gV -> t - GImpVP gVP -> t - GMkVPI gVP -> t - GMkVPS gTemp gPol gVP -> t - GOrdCompar gA -> t - GPassAgentVPSlash gVPSlash gNP -> t - GPassVPSlash gVPSlash -> t - GPastPartAP gV2 -> t - GPastPartRS gAnt gPol gVPSlash -> t - GPositAdVAdj gA -> t - GPredSCVP gSC gVP -> t - GPredVP gNP gVP -> t - GPredVPS gNP gVPS -> t - GPredVPosv gNP gVP -> t - GPredVPovs gNP gVP -> t - GPresPartRS gAnt gPol gVP -> t - GQuestCl gCl -> t - GQuestIAdv gIAdv gCl -> t - GQuestIComp gIComp gNP -> t - GQuestSlash gIP gClSlash -> t - GQuestVP gIP gVP -> t - GReflVP gVPSlash -> t - GRelCl gCl -> t - GRelS gS gRS -> t - GRelSlash gRP gClSlash -> t - GRelVP gRP gVP -> t - GSSubjS gS gSubj gS_ -> t - GSlash2V3 gV3 gNP -> t - GSlash3V3 gV3 gNP -> t - GSlashBareV2S gV2S gS -> t - GSlashPrep gCl gPrep -> t - GSlashSlashV2V gV2V gAnt gPol gVPSlash -> t - GSlashV2A gV2A gAP -> t - GSlashV2Q gV2Q gQS -> t - GSlashV2S gV2S gS -> t - GSlashV2V gV2V gAnt gPol gVP -> t - GSlashV2VNP gV2V gNP gVPSlash -> t - GSlashV2a gV2 -> t - GSlashVP gNP gVPSlash -> t - GSlashVPIV2V gV2V gPol gVPI -> t - GSlashVS gNP gVS gSSlash -> t - GSlashVV gVV gVPSlash -> t - GTTAnt gTense gAnt -> t - GUseCl gTemp gPol gCl -> t - GUseComp gComp -> t - GUseQCl gTemp gPol gQCl -> t - GUseQuantPN gQuant gPN -> t - GUseRCl gTemp gPol gRCl -> t - GUseSlash gTemp gPol gClSlash -> t - GUseV gV -> t - GVPSlashPrep gVP gPrep -> t - GVPSlashVS gVS gVP -> t - Gherself_NP -> t - Ghimself_NP -> t - Gitself_NP -> t - Gmyself_NP -> t - Gourselves_NP -> t - Gthat_RP -> t - Gthemselves_NP -> t - Gwho_RP -> t - GyourselfPl_NP -> t - GyourselfSg_NP -> t