mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-27 13:32:51 -06:00
nondependent versions of Pred grammars, implemented by a functor over the dependent version so that no new concrete syntax code is needed. This is at the moment the grammar of choice for translation: NDTransEng is several times faster than TransEng and even faster than the old TranslateEng. The next step is to make sure that all coverage is preserved; some new coverage is already there.
This commit is contained in:
186
lib/src/experimental/NDPredFunctor.gf
Normal file
186
lib/src/experimental/NDPredFunctor.gf
Normal file
@@ -0,0 +1,186 @@
|
||||
incomplete concrete NDPredFunctor of NDPred =
|
||||
Cat [Ant,NP,Utt,IP,IAdv,Conj] **
|
||||
open
|
||||
PredInterface,
|
||||
Pred,
|
||||
ParamX,
|
||||
Prelude
|
||||
in {
|
||||
|
||||
------------------------------------
|
||||
-- lincats
|
||||
-------------------------------------
|
||||
|
||||
lincat
|
||||
Tense = Pred.Tense ;
|
||||
Pol = Pred.Pol ;
|
||||
|
||||
PrV_none, PrV_np, PrV_v, PrV_s, PrV_q, PrV_a, PrV_n,
|
||||
PrV_np_np, PrV_np_v, PrV_np_s, PrV_np_q, PrV_np_a, PrV_np_n = Pred.PrV ;
|
||||
|
||||
PrVP_none, PrVP_np, PrVP_v, PrVP_s, PrVP_q, PrVP_a, PrVP_n,
|
||||
PrVP_np_np, PrVP_np_v, PrVP_np_s, PrVP_np_q, PrVP_np_a, PrVP_np_n = Pred.PrVP ;
|
||||
|
||||
PrCl_none, PrCl_np = Pred.PrCl ;
|
||||
|
||||
PrQCl_none, PrQCl_np = Pred.PrQCl ;
|
||||
|
||||
VPC_none, VPC_np = Pred.VPC ;
|
||||
|
||||
ClC_none, ClC_np = Pred.ClC ;
|
||||
|
||||
PrAdv_none, PrAdv_np = Pred.PrAdv ;
|
||||
|
||||
PrS = Pred.PrS ;
|
||||
|
||||
PrAP_none, PrAP_np = Pred.PrAP ;
|
||||
|
||||
PrCN_none, PrCN_np = Pred.PrCN ;
|
||||
|
||||
-- reference linearizations for chunking
|
||||
---- should be by functor as well
|
||||
|
||||
linref
|
||||
PrVP_none, PrVP_np, PrVP_v, PrVP_s, PrVP_q, PrVP_a, PrVP_n,
|
||||
PrVP_np_np, PrVP_np_v, PrVP_np_s, PrVP_np_q, PrVP_np_a, PrVP_np_n
|
||||
= \vp ->
|
||||
let
|
||||
agr = defaultAgr ;
|
||||
vagr = agr2vagr agr ;
|
||||
verb = vp.v ! vagr ;
|
||||
in
|
||||
verb.p1 ++ verb.p2 ++ vp.adV ++ verb.p3 ++ vp.part ++
|
||||
vp.adj ! agr ++ vp.obj1.p1 ! agr ++ vp.obj2.p1 ! agr ++ vp.adv ++ vp.ext ;
|
||||
|
||||
PrCl_none, PrCl_np = \cl -> declCl cl ;
|
||||
PrQCl_none, PrQCl_np = \qcl -> questCl qcl ;
|
||||
PrAdv_none, PrAdv_np = \adv -> adv.c1 ++ adv.s ;
|
||||
PrAP_none, PrAP_np = \ap -> ap.s ! defaultAgr ++ ap.obj1 ! defaultAgr ;
|
||||
PrCN_none, PrCN_np = \cn -> cn.s ! Sg ++ cn.obj1 ! defaultAgr ;
|
||||
|
||||
----------------------------
|
||||
--- linearization rules ----
|
||||
----------------------------
|
||||
|
||||
lin
|
||||
|
||||
-- standard general
|
||||
|
||||
TPres = Pred.TPres ;
|
||||
TPast = Pred.TPast ;
|
||||
TFut = Pred.TFut ;
|
||||
TCond = Pred.TCond ;
|
||||
ASimul = Pred.ASimul ;
|
||||
AAnter = Pred.AAnter ;
|
||||
PPos = Pred.PPos ;
|
||||
PNeg = Pred.PNeg ;
|
||||
|
||||
UseV_none, UseV_np, UseV_v, UseV_s, UseV_q, UseV_a, UseV_n, UseV_np_np, UseV_np_v, UseV_np_s, UseV_np_q, UseV_np_a, UseV_np_n
|
||||
= Pred.UseV Pred.aNone ;
|
||||
PassUseV_none, PassUseV_np, PassUseV_v, PassUseV_s, PassUseV_q, PassUseV_a, PassUseV_n
|
||||
= Pred.PassUseV Pred.aNone ;
|
||||
AgentPassUseV_none, AgentPassUseV_np, AgentPassUseV_v, AgentPassUseV_s, AgentPassUseV_q, AgentPassUseV_a, AgentPassUseV_n
|
||||
= Pred.AgentPassUseV Pred.aNone ;
|
||||
|
||||
UseAP_none, UseAP_np
|
||||
= Pred.UseAP Pred.aNone ;
|
||||
UseCN_none, UseCN_np
|
||||
= Pred.UseCN Pred.aNone ;
|
||||
UseAdv_none, UseAdv_np
|
||||
= Pred.UseAdv Pred.aNone ;
|
||||
UseNP_none
|
||||
= Pred.UseNP ;
|
||||
|
||||
ComplV2_none
|
||||
= Pred.ComplV2 Pred.aNone ;
|
||||
ComplVV_none, ComplVV_np
|
||||
= Pred.ComplVV Pred.aNone ;
|
||||
ComplVS_none, ComplVS_np
|
||||
= Pred.ComplVS Pred.aNone ;
|
||||
ComplVA_none
|
||||
= Pred.ComplVA Pred.aNone ;
|
||||
ComplVQ_none
|
||||
= Pred.ComplVQ Pred.aNone ;
|
||||
ComplVN_none
|
||||
= Pred.ComplVN Pred.aNone ;
|
||||
|
||||
SlashV3_none
|
||||
= Pred.SlashV3 Pred.aNone ;
|
||||
SlashV2V_none, SlashV2V_np
|
||||
= Pred.SlashV2V Pred.aNone ;
|
||||
SlashV2S_none
|
||||
= Pred.SlashV2S Pred.aNone ;
|
||||
SlashV2Q_none
|
||||
= Pred.SlashV2Q Pred.aNone ;
|
||||
SlashV2A_none
|
||||
= Pred.SlashV2A Pred.aNone ;
|
||||
SlashV2N_none
|
||||
= Pred.SlashV2N Pred.aNone ;
|
||||
|
||||
ReflVP_none, ReflVP_np, ReflVP_v, ReflVP_s, ReflVP_q, ReflVP_a, ReflVP_n
|
||||
= Pred.ReflVP Pred.aNone ;
|
||||
ReflVP2_np
|
||||
= Pred.ReflVP2 Pred.aNone ;
|
||||
|
||||
|
||||
PredVP_none, PredVP_np
|
||||
= Pred.PredVP Pred.aNone ;
|
||||
|
||||
SlashClNP_none
|
||||
= Pred.SlashClNP Pred.aNone ;
|
||||
|
||||
QuestCl_none, QuestCl_np
|
||||
= Pred.QuestCl Pred.aNone ;
|
||||
|
||||
QuestIAdv_none
|
||||
= Pred.QuestIAdv Pred.aNone ;
|
||||
|
||||
QuestVP_none
|
||||
= Pred.QuestVP Pred.aNone ;
|
||||
|
||||
QuestSlash_none
|
||||
= Pred.QuestSlash Pred.aNone ;
|
||||
|
||||
UseCl_none
|
||||
= Pred.UseCl ;
|
||||
UseQCl_none
|
||||
= Pred.UseQCl ;
|
||||
|
||||
UseAdvCl_none
|
||||
= Pred.UseAdvCl ;
|
||||
|
||||
UttS
|
||||
= Pred.UttS ;
|
||||
|
||||
AdvCl_none, AdvCl_np
|
||||
= Pred.AdvCl Pred.aNone ;
|
||||
AdvQCl_none, AdvQCl_np
|
||||
= Pred.AdvQCl Pred.aNone ;
|
||||
|
||||
PresPartAP_none, PresPartAP_np
|
||||
= Pred.PresPartAP Pred.aNone ;
|
||||
|
||||
PastPartAP_none
|
||||
= Pred.PastPartAP Pred.aNone ;
|
||||
|
||||
AgentPastPartAP_none
|
||||
= Pred.AgentPastPartAP Pred.aNone ;
|
||||
|
||||
StartVPC_none, StartVPC_np
|
||||
= Pred.StartVPC Pred.aNone ;
|
||||
ContVPC_none, ContVPC_np
|
||||
= Pred.ContVPC Pred.aNone ;
|
||||
UseVPC_none, UseVPC_np
|
||||
= Pred.UseVPC Pred.aNone ;
|
||||
|
||||
StartClC_none, StartClC_np
|
||||
= Pred.StartClC Pred.aNone ;
|
||||
ContClC_none, ContClC_np
|
||||
= Pred.ContClC Pred.aNone ;
|
||||
UseClC_none, UseClC_np
|
||||
= Pred.UseClC Pred.aNone ;
|
||||
|
||||
ComplAdv_none
|
||||
= Pred.ComplAdv Pred.aNone ;
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user