forked from GitHub/gf-core
testing Predication with Swe
This commit is contained in:
@@ -12,11 +12,13 @@ cat
|
|||||||
Cl Arg ;
|
Cl Arg ;
|
||||||
NP ;
|
NP ;
|
||||||
Adv ;
|
Adv ;
|
||||||
|
AdV ;
|
||||||
S ;
|
S ;
|
||||||
QS ;
|
QS ;
|
||||||
Utt ;
|
Utt ;
|
||||||
AP Arg ;
|
AP Arg ;
|
||||||
IP ;
|
IP ;
|
||||||
|
Prep ;
|
||||||
|
|
||||||
fun
|
fun
|
||||||
aNone, aS, aV : Arg ;
|
aNone, aS, aV : Arg ;
|
||||||
@@ -26,18 +28,21 @@ fun
|
|||||||
|
|
||||||
UseV : Temp -> Pol -> (a : Arg) -> V a -> VP a ;
|
UseV : Temp -> Pol -> (a : Arg) -> V a -> VP a ;
|
||||||
|
|
||||||
SlashVNP : (a : Arg) -> VP (aNP a) -> NP -> VP a ; -- consuming first NP
|
SlashVNP : (a : Arg) -> VP (aNP a) -> NP -> VP a ; -- consuming first NP
|
||||||
SlashVNP2 : (a : Arg) -> VP (aNP (aNP a)) -> NP -> VP (aNP a) ; -- consuming second NP
|
SlashVNP2 : (a : Arg) -> VP (aNP (aNP a)) -> NP -> VP (aNP a) ; -- consuming second NP
|
||||||
ComplVS : (a : Arg) -> VP aS -> Cl a -> VP a ;
|
ComplVS : (a : Arg) -> VP aS -> Cl a -> VP a ;
|
||||||
ComplVV : (a : Arg) -> VP aV -> VP a -> VP a ;
|
ComplVV : (a : Arg) -> VP aV -> VP a -> VP a ;
|
||||||
SlashV2S : (a : Arg) -> VP (aNP aS) -> Cl a -> VP (aNP a) ; -- a:Arg gives slash propagation, SlashVS
|
SlashV2S : (a : Arg) -> VP (aNP aS) -> Cl a -> VP (aNP a) ; -- a:Arg gives slash propagation, SlashVS
|
||||||
SlashV2V : (a : Arg) -> VP (aNP aV) -> VP a -> VP (aNP a) ;
|
SlashV2V : (a : Arg) -> VP (aNP aV) -> VP a -> VP (aNP a) ;
|
||||||
|
|
||||||
UseAP : Temp -> Pol -> (a : Arg) -> AP a -> VP a ;
|
UseAP : Temp -> Pol -> (a : Arg) -> AP a -> VP a ;
|
||||||
|
|
||||||
PredVP : (a : Arg) -> NP -> VP a -> Cl a ;
|
PredVP : (a : Arg) -> NP -> VP a -> Cl a ;
|
||||||
|
|
||||||
|
PrepCl : Prep -> (a : Arg) -> Cl a -> Cl (aNP a) ;
|
||||||
|
|
||||||
AdvVP : Adv -> (a : Arg) -> VP a -> VP a ;
|
AdvVP : Adv -> (a : Arg) -> VP a -> VP a ;
|
||||||
|
AdVVP : AdV -> (a : Arg) -> VP a -> VP a ;
|
||||||
|
|
||||||
ReflVP : (a : Arg) -> VP (aNP a) -> VP a ; -- refl on first position (direct object)
|
ReflVP : (a : Arg) -> VP (aNP a) -> VP a ; -- refl on first position (direct object)
|
||||||
ReflVP2 : (a : Arg) -> VP (aNP (aNP a)) -> VP (aNP a) ; -- refl on second position (indirect object)
|
ReflVP2 : (a : Arg) -> VP (aNP (aNP a)) -> VP (aNP a) ; -- refl on second position (indirect object)
|
||||||
@@ -68,7 +73,11 @@ fun
|
|||||||
we_NP : NP ;
|
we_NP : NP ;
|
||||||
|
|
||||||
today_Adv : Adv ;
|
today_Adv : Adv ;
|
||||||
|
always_AdV : AdV ;
|
||||||
who_IP : IP ;
|
who_IP : IP ;
|
||||||
|
|
||||||
|
PrepNP : Prep -> NP -> Adv ;
|
||||||
|
|
||||||
|
with_Prep : Prep ;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -8,19 +8,46 @@ param
|
|||||||
|
|
||||||
lincat
|
lincat
|
||||||
Arg = {s : Str} ;
|
Arg = {s : Str} ;
|
||||||
V = {v : Tense => Agr => Str ; c1 : Str ; c2 : Str} ;
|
|
||||||
VP = {v : Agr => Str * Str ; inf : Str ; c1 : Str ; c2 : Str ; adj,obj1,obj2 : Agr => Str ; adv : Str ; ext : Str} ;
|
V = {
|
||||||
Cl = {v : Str * Str ; inf : Str ; adj,obj1,obj2 : Str ; adv : Str ; ext : Str ; subj : Str} ;
|
v : Tense => Agr => Str ;
|
||||||
|
c1 : Str ;
|
||||||
|
c2 : Str
|
||||||
|
} ;
|
||||||
|
|
||||||
|
VP = {
|
||||||
|
v : Agr => Str * Str ;
|
||||||
|
inf : Str ;
|
||||||
|
c1 : Str ;
|
||||||
|
c2 : Str ;
|
||||||
|
adj,obj1,obj2 : Agr => Str ;
|
||||||
|
adv : Str ;
|
||||||
|
adV : Str ;
|
||||||
|
ext : Str
|
||||||
|
} ;
|
||||||
|
|
||||||
|
Cl = {
|
||||||
|
v : Str * Str ;
|
||||||
|
inf : Str ;
|
||||||
|
adj,obj1,obj2 : Str ;
|
||||||
|
adv : Str ;
|
||||||
|
adV : Str ;
|
||||||
|
ext : Str ;
|
||||||
|
subj : Str ;
|
||||||
|
c3 : Str
|
||||||
|
} ;
|
||||||
|
|
||||||
Temp = {s : Str ; t : Tense} ;
|
Temp = {s : Str ; t : Tense} ;
|
||||||
Pol = {s : Str ; p : Polarity} ;
|
Pol = {s : Str ; p : Polarity} ;
|
||||||
NP = {s : Case => Str ; a : Agr} ;
|
NP = {s : Case => Str ; a : Agr} ;
|
||||||
Adv = {s : Str} ;
|
Adv = {s : Str} ;
|
||||||
|
AdV = {s : Str} ;
|
||||||
S = {s : Str} ;
|
S = {s : Str} ;
|
||||||
QS = {s : Str} ;
|
QS = {s : Str} ;
|
||||||
Utt = {s : Str} ;
|
Utt = {s : Str} ;
|
||||||
AP = {s : Str ; c1 : Str ; c2 : Str ; obj1 : Agr => Str} ;
|
AP = {s : Str ; c1 : Str ; c2 : Str ; obj1 : Agr => Str} ;
|
||||||
IP = {s : Str ; a : Agr} ;
|
IP = {s : Str ; a : Agr} ;
|
||||||
|
Prep = {s : Str} ;
|
||||||
|
|
||||||
lin
|
lin
|
||||||
aNone, aS, aV = {s = []} ;
|
aNone, aS, aV = {s = []} ;
|
||||||
@@ -37,7 +64,7 @@ lin
|
|||||||
c1 = v.c1 ;
|
c1 = v.c1 ;
|
||||||
c2 = v.c2 ;
|
c2 = v.c2 ;
|
||||||
adj,obj1,obj2 = \\a => [] ;
|
adj,obj1,obj2 = \\a => [] ;
|
||||||
adv = [] ;
|
adv,adV = [] ;
|
||||||
ext = [] ;
|
ext = [] ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -49,7 +76,7 @@ lin
|
|||||||
adj = \\_ => ap.s ;
|
adj = \\_ => ap.s ;
|
||||||
obj1 = ap.obj1 ;
|
obj1 = ap.obj1 ;
|
||||||
obj2 = \\a => [] ;
|
obj2 = \\a => [] ;
|
||||||
adv = [] ;
|
adv,adV = [] ;
|
||||||
ext = [] ;
|
ext = [] ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -62,6 +89,7 @@ lin
|
|||||||
obj1 = \\a => np.s ! Acc ;
|
obj1 = \\a => np.s ! Acc ;
|
||||||
obj2 = vp.obj2 ;
|
obj2 = vp.obj2 ;
|
||||||
adv = vp.adv ;
|
adv = vp.adv ;
|
||||||
|
adV = vp.adV ;
|
||||||
ext = vp.ext ;
|
ext = vp.ext ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -74,6 +102,7 @@ lin
|
|||||||
obj1 = vp.obj1 ;
|
obj1 = vp.obj1 ;
|
||||||
obj2 = \\a => np.s ! Acc ;
|
obj2 = \\a => np.s ! Acc ;
|
||||||
adv = vp.adv ;
|
adv = vp.adv ;
|
||||||
|
adV = vp.adV ;
|
||||||
ext = vp.ext ;
|
ext = vp.ext ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -85,6 +114,7 @@ lin
|
|||||||
adj = vp.adj ;
|
adj = vp.adj ;
|
||||||
obj1 = vp.obj1 ;
|
obj1 = vp.obj1 ;
|
||||||
obj2 = vp.obj2 ;
|
obj2 = vp.obj2 ;
|
||||||
|
adV = vp.adV ;
|
||||||
adv = vp.adv ;
|
adv = vp.adv ;
|
||||||
ext = (DeclCl (lin Cl cl)).s ;
|
ext = (DeclCl (lin Cl cl)).s ;
|
||||||
} ;
|
} ;
|
||||||
@@ -97,6 +127,7 @@ lin
|
|||||||
adj = vp.adj ;
|
adj = vp.adj ;
|
||||||
obj1 = vp.obj1 ;
|
obj1 = vp.obj1 ;
|
||||||
obj2 = \\a => infVP a vpo ;
|
obj2 = \\a => infVP a vpo ;
|
||||||
|
adV = vp.adV ;
|
||||||
adv = vp.adv ;
|
adv = vp.adv ;
|
||||||
ext = vp.ext ;
|
ext = vp.ext ;
|
||||||
} ;
|
} ;
|
||||||
@@ -109,6 +140,7 @@ lin
|
|||||||
adj = vp.adj ;
|
adj = vp.adj ;
|
||||||
obj1 = vp.obj1 ;
|
obj1 = vp.obj1 ;
|
||||||
obj2 = vp.obj2 ;
|
obj2 = vp.obj2 ;
|
||||||
|
adV = vp.adV ;
|
||||||
adv = vp.adv ;
|
adv = vp.adv ;
|
||||||
ext = (DeclCl (lin Cl cl)).s ;
|
ext = (DeclCl (lin Cl cl)).s ;
|
||||||
} ;
|
} ;
|
||||||
@@ -121,6 +153,7 @@ lin
|
|||||||
adj = vp.adj ;
|
adj = vp.adj ;
|
||||||
obj1 = vp.obj1 ;
|
obj1 = vp.obj1 ;
|
||||||
obj2 = \\a => infVP a vpo ;
|
obj2 = \\a => infVP a vpo ;
|
||||||
|
adV = vp.adV ;
|
||||||
adv = vp.adv ;
|
adv = vp.adv ;
|
||||||
ext = vp.ext ;
|
ext = vp.ext ;
|
||||||
} ;
|
} ;
|
||||||
@@ -133,10 +166,24 @@ lin
|
|||||||
adj = vp.adj ;
|
adj = vp.adj ;
|
||||||
obj1 = vp.obj1 ;
|
obj1 = vp.obj1 ;
|
||||||
obj2 = vp.obj2 ;
|
obj2 = vp.obj2 ;
|
||||||
|
adV = vp.adV ;
|
||||||
adv = vp.adv ++ adv.s ;
|
adv = vp.adv ++ adv.s ;
|
||||||
ext = vp.ext ;
|
ext = vp.ext ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
AdVVP adv _ vp = {
|
||||||
|
v = vp.v ;
|
||||||
|
inf = vp.inf ;
|
||||||
|
c1 = vp.c1 ;
|
||||||
|
c2 = vp.c2 ;
|
||||||
|
adj = vp.adj ;
|
||||||
|
obj1 = vp.obj1 ;
|
||||||
|
obj2 = vp.obj2 ;
|
||||||
|
adV = vp.adV ++ adv.s ;
|
||||||
|
adv = vp.adv ;
|
||||||
|
ext = vp.ext ;
|
||||||
|
} ;
|
||||||
|
|
||||||
ReflVP x vp = {
|
ReflVP x vp = {
|
||||||
v = vp.v ;
|
v = vp.v ;
|
||||||
inf = vp.inf ;
|
inf = vp.inf ;
|
||||||
@@ -145,6 +192,7 @@ lin
|
|||||||
adj = vp.adj ;
|
adj = vp.adj ;
|
||||||
obj1 = \\a => reflPron a ;
|
obj1 = \\a => reflPron a ;
|
||||||
obj2 = vp.obj2 ;
|
obj2 = vp.obj2 ;
|
||||||
|
adV = vp.adV ;
|
||||||
adv = vp.adv ;
|
adv = vp.adv ;
|
||||||
ext = vp.ext ;
|
ext = vp.ext ;
|
||||||
} ;
|
} ;
|
||||||
@@ -157,6 +205,7 @@ lin
|
|||||||
adj = vp.adj ;
|
adj = vp.adj ;
|
||||||
obj1 = vp.obj1 ;
|
obj1 = vp.obj1 ;
|
||||||
obj2 = \\a => reflPron a ;
|
obj2 = \\a => reflPron a ;
|
||||||
|
adV = vp.adV ;
|
||||||
adv = vp.adv ;
|
adv = vp.adv ;
|
||||||
ext = vp.ext ;
|
ext = vp.ext ;
|
||||||
} ;
|
} ;
|
||||||
@@ -168,24 +217,40 @@ lin
|
|||||||
adj = vp.adj ! np.a ;
|
adj = vp.adj ! np.a ;
|
||||||
obj1 = vp.c1 ++ vp.obj1 ! np.a ;
|
obj1 = vp.c1 ++ vp.obj1 ! np.a ;
|
||||||
obj2 = vp.c2 ++ vp.obj2 ! np.a ;
|
obj2 = vp.c2 ++ vp.obj2 ! np.a ;
|
||||||
|
adV = vp.adV ;
|
||||||
adv = vp.adv ;
|
adv = vp.adv ;
|
||||||
ext = vp.ext ;
|
ext = vp.ext ;
|
||||||
|
c3 = [] ; -- for one more prep to build ClSlash
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
PrepCl p x cl = {
|
||||||
|
subj = cl.subj ;
|
||||||
|
v = cl.v ;
|
||||||
|
inf = cl.inf ;
|
||||||
|
adj = cl.adj ;
|
||||||
|
obj1 = cl.obj1 ;
|
||||||
|
obj2 = cl.obj2 ;
|
||||||
|
adV = cl.adV ;
|
||||||
|
adv = cl.adv ;
|
||||||
|
ext = cl.ext ;
|
||||||
|
c3 = p.s ; -- for one more prep to build ClSlash
|
||||||
|
} ;
|
||||||
|
|
||||||
|
|
||||||
DeclCl cl = {
|
DeclCl cl = {
|
||||||
s = cl.subj ++ cl.v.p1 ++ cl.v.p2 ++ cl.adj ++ cl.obj1 ++ cl.obj2 ++ cl.adv ++ cl.ext
|
s = cl.subj ++ cl.v.p1 ++ cl.adV ++ cl.v.p2 ++ cl.adj ++ cl.obj1 ++ cl.obj2 ++ cl.adv ++ cl.ext
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
QuestCl cl = {
|
QuestCl cl = {
|
||||||
s = cl.v.p1 ++ cl.subj ++ cl.v.p2 ++ cl.adj ++ cl.obj1 ++ cl.obj2 ++ cl.adv ++ cl.ext
|
s = cl.v.p1 ++ cl.subj ++ cl.adV ++ cl.v.p2 ++ cl.adj ++ cl.obj1 ++ cl.obj2 ++ cl.adv ++ cl.ext
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
QuestVP ip vp = {
|
QuestVP ip vp = {
|
||||||
s = ip.s ++ (vp.v ! ip.a).p1 ++ (vp.v ! ip.a).p2 ++ vp.adj ! ip.a ++ vp.c1 ++ vp.obj1 ! ip.a ++ vp.c2 ++ vp.obj2 ! ip.a ++ vp.adv ++ vp.ext
|
s = ip.s ++ (vp.v ! ip.a).p1 ++ vp.adV ++ (vp.v ! ip.a).p2 ++ vp.adj ! ip.a ++ vp.c1 ++ vp.obj1 ! ip.a ++ vp.c2 ++ vp.obj2 ! ip.a ++ vp.adv ++ vp.ext
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
QuestSlash ip cl = {
|
QuestSlash ip cl = {
|
||||||
s = ip.s ++ cl.v.p1 ++ cl.subj ++ cl.v.p2 ++ cl.adj ++ cl.obj1 ++ cl.obj2 ++ cl.adv ++ cl.ext
|
s = ip.s ++ cl.v.p1 ++ cl.subj ++ cl.adV ++ cl.v.p2 ++ cl.adj ++ cl.obj1 ++ cl.obj2 ++ cl.adv ++ cl.ext ++ cl.c3
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
UttS s = s ;
|
UttS s = s ;
|
||||||
@@ -208,9 +273,14 @@ lin
|
|||||||
we_NP = {s = table {Nom => "we" ; Acc => "us"} ; a = Pl} ;
|
we_NP = {s = table {Nom => "we" ; Acc => "us"} ; a = Pl} ;
|
||||||
|
|
||||||
today_Adv = {s = "today"} ;
|
today_Adv = {s = "today"} ;
|
||||||
|
always_AdV = {s = "always"} ;
|
||||||
|
|
||||||
who_IP = {s = "who" ; a = Sg} ;
|
who_IP = {s = "who" ; a = Sg} ;
|
||||||
|
|
||||||
|
PrepNP p np = {s = p.s ++ np.s ! Acc} ;
|
||||||
|
|
||||||
|
with_Prep = {s = "with"} ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
mkV = overload {
|
mkV = overload {
|
||||||
mkV : Str -> V = \s -> lin V {v = \\_,_ => s ; c1 = [] ; c2 = []} ;
|
mkV : Str -> V = \s -> lin V {v = \\_,_ => s ; c1 = [] ; c2 = []} ;
|
||||||
@@ -236,6 +306,6 @@ oper
|
|||||||
|
|
||||||
reflPron : Agr -> Str = \a -> case a of {Sg => "herself" ; Pl => "ourselves"} ;
|
reflPron : Agr -> Str = \a -> case a of {Sg => "herself" ; Pl => "ourselves"} ;
|
||||||
|
|
||||||
infVP : Agr -> VP -> Str = \a,vp -> vp.inf ++ vp.adj ! a ++ vp.obj1 ! a ++ vp.obj2 ! a ++ vp.adv ++ vp.ext ;
|
infVP : Agr -> VP -> Str = \a,vp -> vp.adV ++ vp.inf ++ vp.adj ! a ++ vp.c1 ++ vp.obj1 ! a ++ vp.c2 ++ vp.obj2 ! a ++ vp.adv ++ vp.ext ;
|
||||||
|
|
||||||
}
|
}
|
||||||
309
lib/src/experimental/PredicationSwe.gf
Normal file
309
lib/src/experimental/PredicationSwe.gf
Normal file
@@ -0,0 +1,309 @@
|
|||||||
|
concrete PredicationSwe of Predication = {
|
||||||
|
|
||||||
|
param
|
||||||
|
Agr = Sg | Pl ;
|
||||||
|
Case = Nom | Acc ;
|
||||||
|
Tense = Pres | Past ;
|
||||||
|
Polarity = Pos | Neg ;
|
||||||
|
VForm = Inf | VT Tense ;
|
||||||
|
|
||||||
|
lincat
|
||||||
|
Arg = {s : Str} ;
|
||||||
|
|
||||||
|
V = {
|
||||||
|
v : VForm => Str ;
|
||||||
|
c1 : Str ;
|
||||||
|
c2 : Str
|
||||||
|
} ;
|
||||||
|
|
||||||
|
VP = {
|
||||||
|
v : Str ;
|
||||||
|
inf : Str ;
|
||||||
|
c1 : Str ;
|
||||||
|
c2 : Str ;
|
||||||
|
adj,obj1,obj2 : Agr => Str ;
|
||||||
|
adv : Str ;
|
||||||
|
adV : Str ;
|
||||||
|
ext : Str
|
||||||
|
} ;
|
||||||
|
|
||||||
|
Cl = {
|
||||||
|
v : Str ;
|
||||||
|
inf : Str ;
|
||||||
|
adj,obj1,obj2 : Str ;
|
||||||
|
adv : Str ;
|
||||||
|
adV : Str ;
|
||||||
|
ext : Str ;
|
||||||
|
subj : Str ;
|
||||||
|
c3 : Str
|
||||||
|
} ;
|
||||||
|
|
||||||
|
Temp = {s : Str ; t : Tense} ;
|
||||||
|
Pol = {s : Str ; p : Polarity} ;
|
||||||
|
NP = {s : Case => Str ; a : Agr} ;
|
||||||
|
Adv = {s : Str} ;
|
||||||
|
AdV = {s : Str} ;
|
||||||
|
S = {s : Str} ;
|
||||||
|
QS = {s : Str} ;
|
||||||
|
Utt = {s : Str} ;
|
||||||
|
AP = {s : Agr => Str ; c1 : Str ; c2 : Str ; obj1 : Agr => Str} ;
|
||||||
|
IP = {s : Str ; a : Agr} ;
|
||||||
|
Prep = {s : Str} ;
|
||||||
|
|
||||||
|
lin
|
||||||
|
aNone, aS, aV = {s = []} ;
|
||||||
|
aNP a = a ;
|
||||||
|
|
||||||
|
TPres = {s = [] ; t = Pres} ;
|
||||||
|
TPast = {s = [] ; t = Past} ;
|
||||||
|
PPos = {s = [] ; p = Pos} ;
|
||||||
|
PNeg = {s = [] ; p = Neg} ;
|
||||||
|
|
||||||
|
UseV t p _ v = {
|
||||||
|
v = t.s ++ v.v ! VT t.t ;
|
||||||
|
inf = t.s ++ aux t.t ++ v.v ! Inf ;
|
||||||
|
c1 = v.c1 ;
|
||||||
|
c2 = v.c2 ;
|
||||||
|
adj,obj1,obj2 = \\a => [] ;
|
||||||
|
adV = p.s ++ neg p.p ;
|
||||||
|
adv = [] ;
|
||||||
|
ext = [] ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
UseAP t p _ ap = {
|
||||||
|
v = t.s ++ be_Aux (VT t.t) ;
|
||||||
|
inf = t.s ++ p.s ++ aux t.t ++ be_Aux Inf ;
|
||||||
|
c1 = ap.c1 ;
|
||||||
|
c2 = ap.c2 ;
|
||||||
|
adj = \\a => ap.s ! a ;
|
||||||
|
obj1 = ap.obj1 ;
|
||||||
|
obj2 = \\a => [] ;
|
||||||
|
adV = p.s ++ neg p.p ;
|
||||||
|
adv = [] ;
|
||||||
|
ext = [] ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
SlashVNP x vp np = {
|
||||||
|
v = vp.v ;
|
||||||
|
inf = vp.inf ;
|
||||||
|
c1 = vp.c1 ;
|
||||||
|
c2 = vp.c2 ;
|
||||||
|
adj = vp.adj ;
|
||||||
|
obj1 = \\a => np.s ! Acc ;
|
||||||
|
obj2 = vp.obj2 ;
|
||||||
|
adv = vp.adv ;
|
||||||
|
adV = vp.adV ;
|
||||||
|
ext = vp.ext ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
SlashVNP2 x vp np = {
|
||||||
|
v = vp.v ;
|
||||||
|
inf = vp.inf ;
|
||||||
|
c1 = vp.c1 ;
|
||||||
|
c2 = vp.c2 ;
|
||||||
|
adj = vp.adj ;
|
||||||
|
obj1 = vp.obj1 ;
|
||||||
|
obj2 = \\a => np.s ! Acc ;
|
||||||
|
adv = vp.adv ;
|
||||||
|
adV = vp.adV ;
|
||||||
|
ext = vp.ext ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
ComplVS x vp cl = {
|
||||||
|
v = vp.v ;
|
||||||
|
inf = vp.inf ;
|
||||||
|
c1 = vp.c1 ;
|
||||||
|
c2 = vp.c2 ;
|
||||||
|
adj = vp.adj ;
|
||||||
|
obj1 = vp.obj1 ;
|
||||||
|
obj2 = vp.obj2 ;
|
||||||
|
adV = vp.adV ;
|
||||||
|
adv = vp.adv ;
|
||||||
|
ext = (DeclCl (lin Cl cl)).s ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
ComplVV x vp vpo = {
|
||||||
|
v = vp.v ;
|
||||||
|
inf = vp.inf ;
|
||||||
|
c1 = vp.c1 ;
|
||||||
|
c2 = vp.c2 ;
|
||||||
|
adj = vp.adj ;
|
||||||
|
obj1 = vp.obj1 ;
|
||||||
|
obj2 = \\a => infVP a vpo ;
|
||||||
|
adV = vp.adV ;
|
||||||
|
adv = vp.adv ;
|
||||||
|
ext = vp.ext ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
SlashV2S x vp cl = {
|
||||||
|
v = vp.v ;
|
||||||
|
inf = vp.inf ;
|
||||||
|
c1 = vp.c1 ;
|
||||||
|
c2 = vp.c2 ;
|
||||||
|
adj = vp.adj ;
|
||||||
|
obj1 = vp.obj1 ;
|
||||||
|
obj2 = vp.obj2 ;
|
||||||
|
adV = vp.adV ;
|
||||||
|
adv = vp.adv ;
|
||||||
|
ext = (DeclCl (lin Cl cl)).s ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
SlashV2V x vp vpo = {
|
||||||
|
v = vp.v ;
|
||||||
|
inf = vp.inf ;
|
||||||
|
c1 = vp.c1 ;
|
||||||
|
c2 = vp.c2 ;
|
||||||
|
adj = vp.adj ;
|
||||||
|
obj1 = vp.obj1 ;
|
||||||
|
obj2 = \\a => infVP a vpo ;
|
||||||
|
adV = vp.adV ;
|
||||||
|
adv = vp.adv ;
|
||||||
|
ext = vp.ext ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
AdvVP adv _ vp = {
|
||||||
|
v = vp.v ;
|
||||||
|
inf = vp.inf ;
|
||||||
|
c1 = vp.c1 ;
|
||||||
|
c2 = vp.c2 ;
|
||||||
|
adj = vp.adj ;
|
||||||
|
obj1 = vp.obj1 ;
|
||||||
|
obj2 = vp.obj2 ;
|
||||||
|
adV = vp.adV ;
|
||||||
|
adv = vp.adv ++ adv.s ;
|
||||||
|
ext = vp.ext ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
AdVVP adv _ vp = {
|
||||||
|
v = vp.v ;
|
||||||
|
inf = vp.inf ;
|
||||||
|
c1 = vp.c1 ;
|
||||||
|
c2 = vp.c2 ;
|
||||||
|
adj = vp.adj ;
|
||||||
|
obj1 = vp.obj1 ;
|
||||||
|
obj2 = vp.obj2 ;
|
||||||
|
adV = vp.adV ++ adv.s ;
|
||||||
|
adv = vp.adv ;
|
||||||
|
ext = vp.ext ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
ReflVP x vp = {
|
||||||
|
v = vp.v ;
|
||||||
|
inf = vp.inf ;
|
||||||
|
c1 = vp.c1 ;
|
||||||
|
c2 = vp.c2 ;
|
||||||
|
adj = vp.adj ;
|
||||||
|
obj1 = \\a => reflPron a ;
|
||||||
|
obj2 = vp.obj2 ;
|
||||||
|
adV = vp.adV ;
|
||||||
|
adv = vp.adv ;
|
||||||
|
ext = vp.ext ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
ReflVP2 x vp = {
|
||||||
|
v = vp.v ;
|
||||||
|
inf = vp.inf ;
|
||||||
|
c1 = vp.c1 ;
|
||||||
|
c2 = vp.c2 ;
|
||||||
|
adj = vp.adj ;
|
||||||
|
obj1 = vp.obj1 ;
|
||||||
|
obj2 = \\a => reflPron a ;
|
||||||
|
adV = vp.adV ;
|
||||||
|
adv = vp.adv ;
|
||||||
|
ext = vp.ext ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
PredVP x np vp = {
|
||||||
|
subj = np.s ! Nom ;
|
||||||
|
v = vp.v ;
|
||||||
|
inf = vp.inf ;
|
||||||
|
adj = vp.adj ! np.a ;
|
||||||
|
obj1 = vp.c1 ++ vp.obj1 ! np.a ;
|
||||||
|
obj2 = vp.c2 ++ vp.obj2 ! np.a ;
|
||||||
|
adV = vp.adV ;
|
||||||
|
adv = vp.adv ;
|
||||||
|
ext = vp.ext ;
|
||||||
|
c3 = [] ; -- for one more prep to build ClSlash
|
||||||
|
} ;
|
||||||
|
|
||||||
|
PrepCl p x cl = {
|
||||||
|
subj = cl.subj ;
|
||||||
|
v = cl.v ;
|
||||||
|
inf = cl.inf ;
|
||||||
|
adj = cl.adj ;
|
||||||
|
obj1 = cl.obj1 ;
|
||||||
|
obj2 = cl.obj2 ;
|
||||||
|
adV = cl.adV ;
|
||||||
|
adv = cl.adv ;
|
||||||
|
ext = cl.ext ;
|
||||||
|
c3 = p.s ; -- for one more prep to build ClSlash
|
||||||
|
} ;
|
||||||
|
|
||||||
|
|
||||||
|
DeclCl cl = {
|
||||||
|
s = cl.subj ++ cl.v ++ cl.adV ++ cl.adj ++ cl.obj1 ++ cl.obj2 ++ cl.adv ++ cl.ext
|
||||||
|
} ;
|
||||||
|
|
||||||
|
QuestCl cl = {
|
||||||
|
s = cl.v ++ cl.subj ++ cl.adV ++ cl.adj ++ cl.obj1 ++ cl.obj2 ++ cl.adv ++ cl.ext
|
||||||
|
} ;
|
||||||
|
|
||||||
|
QuestVP ip vp = {
|
||||||
|
s = ip.s ++ vp.v ++ vp.adV ++ vp.adj ! ip.a ++ vp.c1 ++ vp.obj1 ! ip.a ++ vp.c2 ++ vp.obj2 ! ip.a ++ vp.adv ++ vp.ext
|
||||||
|
} ;
|
||||||
|
|
||||||
|
QuestSlash ip cl = {
|
||||||
|
s = ip.s ++ cl.v ++ cl.subj ++ cl.adV ++ cl.adj ++ cl.obj1 ++ cl.obj2 ++ cl.adv ++ cl.ext ++ cl.c3
|
||||||
|
} ;
|
||||||
|
|
||||||
|
UttS s = s ;
|
||||||
|
UttQS s = s ;
|
||||||
|
|
||||||
|
sleep_V = mkV "sova" "sover" "sov" ;
|
||||||
|
love_V2 = mkV "älska" "älskar" "älskade" ;
|
||||||
|
believe_VS = mkV "tro" "tror" "trodde" ;
|
||||||
|
tell_V2S = mkV "berätta" "berättar" "berättade" "för" [] ;
|
||||||
|
prefer_V3 = mkV "föredra" "föredrar" "föredrog" [] "framför" ;
|
||||||
|
want_VV = mkV "vilja" "vill" "ville" ;
|
||||||
|
force_V2V = mkV "tvinga" "tvingar" "tvingade" [] "att" ;
|
||||||
|
|
||||||
|
old_A = {s = table {Sg => "gammal" ; Pl => "gamla"} ; c1 = [] ; c2 = [] ; obj1 = \\_ => []} ;
|
||||||
|
married_A2 = {s = table {Sg => "gift" ; Pl => "gifta"} ; c1 = "med" ; c2 = [] ; obj1 = \\_ => []} ;
|
||||||
|
eager_AV = {s = table {Sg => "ivrig" ; Pl => "ivriga"} ; c1 = [] ; c2 = "att" ; obj1 = \\_ => []} ;
|
||||||
|
easy_A2V = {s = table {Sg => "lätt" ; Pl => "lätta"} ; c1 = "för" ; c2 = "att" ; obj1 = \\_ => []} ;
|
||||||
|
|
||||||
|
she_NP = {s = table {Nom => "hon" ; Acc => "henne"} ; a = Sg} ;
|
||||||
|
we_NP = {s = table {Nom => "vi" ; Acc => "oss"} ; a = Pl} ;
|
||||||
|
|
||||||
|
today_Adv = {s = "idag"} ;
|
||||||
|
always_AdV = {s = "alltid"} ;
|
||||||
|
|
||||||
|
who_IP = {s = "vem" ; a = Sg} ;
|
||||||
|
|
||||||
|
PrepNP p np = {s = p.s ++ np.s ! Acc} ;
|
||||||
|
|
||||||
|
with_Prep = {s = "med"} ;
|
||||||
|
|
||||||
|
oper
|
||||||
|
mkV = overload {
|
||||||
|
mkV : (x,y,z : Str) -> V = \x,y,z ->
|
||||||
|
lin V {v = table {Inf => x ; VT Pres => y ; VT Past => z} ; c1 = [] ; c2 = []} ;
|
||||||
|
mkV : (x,y,z : Str) -> Str -> Str -> V = \x,y,z,p,q ->
|
||||||
|
lin V {v = table {Inf => x ; VT Pres => y ; VT Past => z} ; c1 = p ; c2 = q} ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
be_Aux : VForm -> Str = \t -> case t of {
|
||||||
|
Inf => "vara" ;
|
||||||
|
VT Pres => "är" ;
|
||||||
|
VT Past => "var"
|
||||||
|
} ;
|
||||||
|
|
||||||
|
neg : Polarity -> Str = \p -> case p of {Pos => [] ; Neg => "inte"} ;
|
||||||
|
|
||||||
|
aux : Tense -> Str = \t -> case t of {Pres => [] ; Past => "ha"} ;
|
||||||
|
|
||||||
|
reflPron : Agr -> Str = \a -> case a of {Sg => "sig" ; Pl => "oss"} ;
|
||||||
|
|
||||||
|
infVP : Agr -> VP -> Str = \a,vp -> vp.adV ++ vp.inf ++ vp.adj ! a ++ vp.c1 ++ vp.obj1 ! a ++ vp.c2 ++ vp.obj2 ! a ++ vp.adv ++ vp.ext ;
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user