more updates from Codex

This commit is contained in:
Krasimir Angelov
2026-09-28 06:56:12 +02:00
parent e2e0fca917
commit 2d6beba1e6
13 changed files with 356 additions and 102 deletions
+5 -4
View File
@@ -7,6 +7,7 @@ concrete CatHye of Cat = CommonX ** open Prelude,ResHye in {
lincat Card = {s : Str} ;
lincat Cl = {s : Str;
negative : Tense => Str;
anterior : Tense => Polarity => Str;
conditional : Aspect => Number => Str;
converb : {imperfective : Str; futCon1 : Str;
futCon2 : Str; negative : Str;
@@ -26,22 +27,22 @@ concrete CatHye of Cat = CommonX ** open Prelude,ResHye in {
lincat IDet = {s : Str} ;
lincat IP = {s : Str} ;
lincat IQuant = {s : Str} ;
lincat Imp = {s : Str} ;
lincat Imp = {s : Number => Str} ;
lincat LN = {s : Str} ;
lincat N = Noun ;
lincat N2 = Noun ** {c2 : Compl} ;
lincat N3 = Noun ** {c2,c3 : Compl} ;
lincat NP = {s : Case => Str; a : Agr} ;
lincat Num = {s : Str; n : Number} ;
lincat Num = {s : Str; n : Number; isCard : Bool} ;
lincat Numeral = {s : CardOrd => Str; n : Number} ;
lincat Ord = {s : Str} ;
lincat PN = {s : Str} ;
lincat Predet = {s : Str} ;
lincat Prep = Compl ;
lincat Pron = {s : Case => Str; empty : Str; a : Agr} ;
lincat QCl = {s : Str} ;
lincat QCl = {s : Tense => Anteriority => Polarity => Str} ;
lincat QS = {s : Str} ;
lincat Quant = {s : Str; sp : Species} ;
lincat Quant = {s : Number => Str; sp : Species; isArt : Bool} ;
lincat RCl = {s : Str} ;
lincat RP = {s : Str} ;
lincat RS = {s : Str} ;
+21 -4
View File
@@ -1,20 +1,37 @@
concrete ConstructionHye of Construction = CatHye ** open ResHye, ParadigmsHye, Prelude in {
lincat Timeunit, Hour, Weekday, Month, Monthday, Year, Language = {s:Str} ;
oper
stateVP : Str -> VP = \s -> lin VP (invarVerb s) ;
stateVP : Str -> VP = \s -> lin VP {
s=s++copulaVerb.s;
conditional=\\a,p,n=>s++copulaVerb.conditional!a!p!n;
converb={imperfective=s++copulaVerb.converb.imperfective;
futCon1=s++copulaVerb.converb.futCon1;
futCon2=s++copulaVerb.converb.futCon2;
negative=s++copulaVerb.converb.negative;
perfective=s++copulaVerb.converb.perfective;
simultaneous=s++copulaVerb.converb.simultaneous};
imperative=\\n=>s++copulaVerb.imperative!n;
passive=s++copulaVerb.passive;
past=\\p,n=>s++copulaVerb.past!p!n;
participle=\\p=>s++copulaVerb.participle!p;
subjunctive=\\a,p,n=>s++copulaVerb.subjunctive!a!p!n
} ;
constCN : Str -> CN = \s -> lin CN {s=\\_,_,_=>s} ;
lin
hungry_VP=stateVP "սոված";thirsty_VP=stateVP "ծարավ";tired_VP=stateVP "հոգնած";
scared_VP=stateVP "վախեցած";ill_VP=stateVP "հիվանդ";ready_VP=stateVP "պատրաստ";
has_age_VP c=stateVP (c.s++"տարեկան");
have_name_Cl np name=lin Cl {s=np.s!Nom++name.s!Nom;negative=table {_=>np.s!Nom++"չի"++name.s!Nom};conditional=\\_,_=>np.s!Nom++name.s!Nom;
have_name_Cl np name=lin Cl {s=np.s!Nom++name.s!Nom;negative=table {_=>np.s!Nom++"չի"++name.s!Nom};
anterior=\\_=>table {_=>np.s!Nom++name.s!Nom};conditional=\\_,_=>np.s!Nom++name.s!Nom;
converb={imperfective=np.s!Nom++name.s!Nom;futCon1=np.s!Nom++name.s!Nom;futCon2=np.s!Nom++name.s!Nom;
negative=np.s!Nom++name.s!Nom;perfective=np.s!Nom++name.s!Nom;simultaneous=np.s!Nom++name.s!Nom};
passive=np.s!Nom++name.s!Nom;past=\\_,_=>np.s!Nom++name.s!Nom;participle=\\_=>np.s!Nom++name.s!Nom;
subjunctive=\\_,_=>np.s!Nom++name.s!Nom};
married_Cl x y=have_name_Cl x y;
what_name_QCl np={s="ինչ է"++np.s!Nom++"անունը"};how_old_QCl np={s=np.s!Nom++"քանի տարեկան է"};
how_far_QCl np={s=np.s!Nom++"որքան հեռու է"};weather_adjCl ap=have_name_Cl {s=\\_=>[];a={n=Sg;p=P3}} {s=\\_=>ap.s!Indef!Nom!Sg;a={n=Sg;p=P3}};
what_name_QCl np={s=\\_,_,_=>"ի՞նչ է"++np.s!Nom++"անունը"};
how_old_QCl np={s=\\_,_,_=>np.s!Nom++"քանի՞ տարեկան է"};
how_far_QCl np={s=\\_,_,_=>np.s!Nom++"որքա՞ն հեռու է"};
weather_adjCl ap=have_name_Cl {s=\\_=>[];a={n=Sg;p=P3}} {s=\\_=>ap.s!Indef!Nom!Sg;a={n=Sg;p=P3}};
is_right_VP=stateVP "ճիշտ";is_wrong_VP=stateVP "սխալ";
n_units_AP card cn a={s=\\sp,c,n=>card.s++cn.s!Indef!Nom!Pl++a.s!c!n;isPre=True};
n_units_of_NP card cn np={s=\\c=>card.s++cn.s!Indef!Nom!Pl++np.s!c;a=np.a};
+60 -15
View File
@@ -23,9 +23,9 @@ concrete ExtendHye of Extend =
open Prelude, ResHye, ParadigmsHye, (R = ParamX) in {
lincat
VPS = {s : Str} ; [VPS] = {s1,s2 : Str} ;
VPS = {s : Agr => Str} ; [VPS] = {s1,s2 : Agr => Str} ;
VPI = {s : Str} ; [VPI] = {s1,s2 : Str} ;
[Comp] = {s1,s2 : Str} ; [Imp] = {s1,s2 : Str} ;
[Comp] = {s1,s2 : Str} ; [Imp] = {s1,s2 : Number => Str} ;
RNP = {s : Case => Str} ; RNPList = {s : Case => Str} ;
oper
@@ -40,20 +40,51 @@ oper
imperative=\\n=>v.imperative!n++x;passive=v.passive++x;
past=\\p,n=>v.past!p!n++x;participle=\\p=>v.participle!p++x;
subjunctive=\\a,p,n=>v.subjunctive!a!p!n++x} ;
extPrependVP : Str -> VP -> VP = \x,v -> lin VP {s=x++v.s;
conditional=\\a,p,n=>x++v.conditional!a!p!n;
converb={imperfective=x++v.converb.imperfective;futCon1=x++v.converb.futCon1;
futCon2=x++v.converb.futCon2;negative=x++v.converb.negative;
perfective=x++v.converb.perfective;simultaneous=x++v.converb.simultaneous};
imperative=\\n=>x++v.imperative!n;passive=x++v.passive;
past=\\p,n=>x++v.past!p!n;participle=\\p=>x++v.participle!p;
subjunctive=\\a,p,n=>x++v.subjunctive!a!p!n} ;
passivePart : Verb -> Str = \v -> v.passivePart ;
agentAdv : NP -> Str = \np -> np.s ! Dat ++ "կողմից" ;
refl : RNP = lin RNP {s=\\_=>"իրեն"} ;
lin
GenModNP num np cn = {s=\\c=>np.s!Dat ++ cn.s!Indef!c!num.n;a={n=num.n;p=P3}} ;
EmptyRelSlash slash = {s="որը" ++ slash.s} ;
MkVPS temp pol vp = {s=pol.s ++ vp.s} ;
MkVPS temp pol vp = {s=\\agr=>case temp.a of {
Anter => case <temp.t,pol.p> of {
<R.Pres,Pos> => vp.converb.perfective++presentAux agr.p agr.n;
<R.Pres,Neg> => negativePresentAux agr.p agr.n++vp.converb.perfective;
<R.Past,Pos> => vp.converb.perfective++pastAux agr.p agr.n;
<R.Past,Neg> => negativePastAux agr.p agr.n++vp.converb.perfective;
<R.Fut,Pos> => vp.converb.perfective++copulaVerb.conditional!Non_Past!agr.p!agr.n;
<R.Fut,Neg> => negativePresentAux agr.p agr.n++vp.converb.perfective++copulaVerb.converb.futCon1;
<R.Cond,Pos> => vp.converb.perfective++copulaVerb.conditional!Perfect!agr.p!agr.n;
<R.Cond,Neg> => negativePastAux agr.p agr.n++vp.converb.perfective
};
Simul => case <temp.t,pol.p> of {
<R.Pres,Pos> => vp.converb.imperfective++presentAux agr.p agr.n;
<R.Pres,Neg> => negativePresentAux agr.p agr.n++vp.converb.imperfective;
<R.Past,Pos> => vp.past!agr.p!agr.n;
<R.Past,Neg> => "չ"++BIND++vp.past!agr.p!agr.n;
<R.Fut,Pos> => vp.conditional!Non_Past!agr.p!agr.n;
<R.Fut,Neg> => negativePresentAux agr.p agr.n++vp.converb.futCon1;
<R.Cond,Pos> => vp.conditional!Perfect!agr.p!agr.n;
<R.Cond,Neg> => "չ"++BIND++vp.conditional!Perfect!agr.p!agr.n
}
}} ;
BaseVPS x y = {s1=x.s;s2=y.s} ;
ConsVPS x xs = {s1=x.s;s2=xs.s1++","++xs.s2} ;
ConjVPS c xs = {s=xs.s1++c.s++xs.s2} ;
PredVPS np vps = {s=np.s!Nom++vps.s} ;
SQuestVPS np vps = {s=np.s!Nom++vps.s++"՞"} ;
QuestVPS ip vps = {s=ip.s++vps.s++"՞"} ;
RelVPS rp vps = {s=rp.s++vps.s} ;
ConsVPS x xs = {s1=x.s;s2=\\a=>xs.s1!a++","++xs.s2!a} ;
ConjVPS c xs = {s=\\a=>xs.s1!a++c.s++xs.s2!a} ;
PredVPS np vps = {s=np.s!Nom++vps.s!np.a} ;
SQuestVPS np vps = {s=np.s!Nom++vps.s!np.a++BIND++"՞"} ;
QuestVPS ip vps = {s=ip.s++vps.s!{n=Sg;p=P3}++BIND++"՞"} ;
RelVPS rp vps = {s=rp.s++vps.s!{n=Sg;p=P3}} ;
ExistS t p np = {s=np.s!Nom++"կա"} ;
ExistNPQS t p np = {s=np.s!Nom++"կա՞"} ;
ExistIPQS t p ip = {s=ip.s++"կա՞"} ;
@@ -66,10 +97,24 @@ lin
PresPartAP vp = {s=\\_,_,_=>vp.participle!Subject;isPre=True} ;
EmbedPresPart vp = {s=vp.participle!Subject} ;
PastPartAP slash = {s=\\_,_,_=>slash.participle!Resultative;isPre=True} ;
PastPartAgentAP slash np = {s=\\_,_,_=>slash.participle!Resultative++np.s!Instr;isPre=True} ;
PassVPSlash slash = extAddVP (extToVP (mkV "լինել")) (slash.participle!Resultative) ;
PassAgentVPSlash slash np = extAddVP (extToVP (mkV "լինել")) (slash.participle!Resultative++np.s!Instr) ;
PastPartAP slash = {s=\\_,_,_=>passivePart slash;isPre=True} ;
PastPartAgentAP slash np = {s=\\_,_,_=>agentAdv np++passivePart slash;isPre=True} ;
PassVPSlash slash = lin VP {
s=passivePart slash++copulaVerb.s;
conditional=\\a,p,n=>passivePart slash++copulaVerb.conditional!a!p!n;
converb={imperfective=passivePart slash++copulaVerb.converb.imperfective;
futCon1=passivePart slash++copulaVerb.converb.futCon1;
futCon2=passivePart slash++copulaVerb.converb.futCon2;
negative=passivePart slash++copulaVerb.converb.negative;
perfective=passivePart slash++copulaVerb.converb.perfective;
simultaneous=passivePart slash++copulaVerb.converb.simultaneous};
imperative=\\n=>passivePart slash++copulaVerb.imperative!n;
passive=passivePart slash++copulaVerb.passive;
past=\\p,n=>passivePart slash++copulaVerb.past!p!n;
participle=\\p=>passivePart slash++copulaVerb.participle!p;
subjunctive=\\a,p,n=>passivePart slash++copulaVerb.subjunctive!a!p!n
} ;
PassAgentVPSlash slash np = extPrependVP (agentAdv np) (PassVPSlash slash) ;
ProgrVPSlash slash = slash ;
ComplBareVS vs s = extAddVP (extToVP vs) s.s ;
@@ -110,7 +155,7 @@ lin
ConsComp x xs = {s1=x.s;s2=xs.s1++","++xs.s2} ;
ConjComp c xs = {s=xs.s1++c.s++xs.s2} ;
BaseImp x y = {s1=x.s;s2=y.s} ;
ConsImp x xs = {s1=x.s;s2=xs.s1++","++xs.s2} ;
ConjImp c xs = {s=xs.s1++c.s++xs.s2} ;
ConsImp x xs = {s1=x.s;s2=\\n=>xs.s1!n++","++xs.s2!n} ;
ConjImp c xs = {s=\\n=>xs.s1!n++c.s++xs.s2!n} ;
TPastSimple = {s=[];t=R.Past} ;
}
+4 -4
View File
@@ -1,7 +1,7 @@
concrete IdiomHye of Idiom = CatHye ** open ResHye in {
concrete IdiomHye of Idiom = CatHye ** open Prelude, ResHye in {
oper
bareCl : Str -> Cl = \s -> lin Cl {
s=s; negative=table {_ => "չ" ++ s}; conditional=\\_,_ => s;
s=s; negative=table {_ => "չ" ++ s}; anterior=\\_=>table {_=>s}; conditional=\\_,_ => s;
converb={imperfective=s;futCon1=s;futCon2=s;negative=s;perfective=s;simultaneous=s};
passive=s;past=\\_,_ => s;participle=\\_ => s;subjunctive=\\_,_ => s
} ;
@@ -11,9 +11,9 @@ concrete IdiomHye of Idiom = CatHye ** open ResHye in {
CleftNP np rs = bareCl (np.s ! Nom ++ rs.s) ;
CleftAdv adv s = bareCl (adv.s ++ s.s) ;
ExistNP np = bareCl (np.s ! Nom ++ "կա") ;
ExistIP ip = {s=ip.s ++ "կա՞"} ;
ExistIP ip = {s=\\_,_,_=>ip.s ++ BIND ++ "՞" ++ "կա"} ;
ExistNPAdv np adv = bareCl (adv.s ++ np.s ! Nom ++ "կա") ;
ExistIPAdv ip adv = {s=adv.s ++ ip.s ++ "կա՞"} ;
ExistIPAdv ip adv = {s=\\_,_,_=>adv.s ++ ip.s ++ BIND ++ "՞" ++ "կա"} ;
ProgrVP vp = vp ;
ImpPl1 vp = {s="եկեք" ++ vp.s} ;
ImpP3 np vp = {s="թող" ++ np.s ! Nom ++ vp.s} ;
+25
View File
@@ -50,6 +50,7 @@ mkV001 base =
Pl => base_1+"ե՛ք"
} ;
passive = base_1+"վել" ;
passivePart = base_1+"ված" ;
past = table {
P1 => table {
Sg => base_1+"եցի" ;
@@ -150,6 +151,7 @@ mkV002 base =
Pl => base_1+"ացե՛ք"
} ;
passive = base ; --guessed
passivePart = base ;
past = table {
P1 => table {
Sg => base_1+"ացի" ;
@@ -250,6 +252,7 @@ mkV003 base =
Pl => base_1+"րե՛ք"
} ;
passive = base_1+"վել" ;
passivePart = base_1+"ված" ;
past = table {
P1 => table {
Sg => base_1+"րի" ;
@@ -350,6 +353,7 @@ mkV004 base =
Pl => base_1+"ցե՛ք"
} ;
passive = base ; --guessed
passivePart = base ;
past = table {
P1 => table {
Sg => base_1+"ցա" ;
@@ -450,6 +454,7 @@ mkV005 base =
Pl => base_1+"րձե՛ք"
} ;
passive = base ; --guessed
passivePart = base ;
past = table {
P1 => table {
Sg => base_1+"րձեցի" ;
@@ -550,6 +555,7 @@ mkV006 base =
Pl => "գնացե՛ք"
} ;
passive = base ; --guessed
passivePart = base ;
past = table {
P1 => table {
Sg => "գնացի" ;
@@ -650,6 +656,7 @@ mkV007 base =
Pl => "գնացե՛ք"
} ;
passive = base ; --guessed
passivePart = base ;
past = table {
P1 => table {
Sg => "գնացի" ;
@@ -750,6 +757,7 @@ mkV008 base =
Pl => base_1+"ե՛ք"
} ;
passive = base_1+"նվել" ;
passivePart = base_1+"նված" ;
past = table {
P1 => table {
Sg => base_1+"ա" ;
@@ -850,6 +858,7 @@ mkV009 base =
Pl => "էղե՛ք"
} ;
passive = base ; --guessed
passivePart = base ;
past = table {
P1 => table {
Sg => "էղա" ;
@@ -950,6 +959,7 @@ mkV010 base =
Pl => base_1+"ցե՛ք"
} ;
passive = base ; --guessed
passivePart = base ;
past = table {
P1 => table {
Sg => base_1+"ցի" ;
@@ -1050,6 +1060,7 @@ mkV011 base =
Pl => base_1+"ացէ՛ք"
} ;
passive = base ; --guessed
passivePart = base ;
past = table {
P1 => table {
Sg => base_1+"ացի" ;
@@ -1150,6 +1161,7 @@ mkV012 base =
Pl => base_1+"է՛ք"
} ;
passive = base_1+"ուել" ;
passivePart = base_1+"ուած" ;
past = table {
P1 => table {
Sg => base_1+"եցի" ;
@@ -1250,6 +1262,7 @@ mkV013 base =
Pl => base_1+base_2+"ե՛ք"
} ;
passive = base_1+base_2+"վել" ;
passivePart = base_1+base_2+"ված" ;
past = table {
P1 => table {
Sg => base_1+base_2+"եցի" ;
@@ -1350,6 +1363,7 @@ mkV014 base =
Pl => base_1+base_2+"ե՛ք"
} ;
passive = base_1+base_2+"նվել" ;
passivePart = base_1+base_2+"նված" ;
past = table {
P1 => table {
Sg => base_1+base_2+"ա" ;
@@ -1450,6 +1464,7 @@ mkV015 base =
Pl => base_1+base_2+"ցե՛ք"
} ;
passive = base ; --guessed
passivePart = base ;
past = table {
P1 => table {
Sg => base_1+base_2+"ցա" ;
@@ -1550,6 +1565,7 @@ mkV016 base =
Pl => base_1+base_2+"է՛ք"
} ;
passive = base_1+base_2+"ուել" ;
passivePart = base_1+base_2+"ուած" ;
past = table {
P1 => table {
Sg => base_1+base_2+"եցի" ;
@@ -1650,6 +1666,7 @@ mkV017 base =
Pl => base_1+base_2+"րե՛ք"
} ;
passive = base_1+base_2+"վել" ;
passivePart = base_1+base_2+"ված" ;
past = table {
P1 => table {
Sg => base_1+base_2+"րի" ;
@@ -1750,6 +1767,7 @@ mkV018 base =
Pl => base_1+"ե՛ք"
} ;
passive = base_1+"վել" ;
passivePart = base_1+"ված" ;
past = table {
P1 => table {
Sg => base_1+"եցի" ;
@@ -1850,6 +1868,7 @@ mkV019 base =
Pl => base_1+base_2+"ացե՛ք"
} ;
passive = base ; --guessed
passivePart = base ;
past = table {
P1 => table {
Sg => base_1+base_2+"ացի" ;
@@ -1950,6 +1969,7 @@ mkV020 base =
Pl => base_1+"ցէ՛ք"
} ;
passive = base ; --guessed
passivePart = base ;
past = table {
P1 => table {
Sg => base_1+"ցայ" ;
@@ -2050,6 +2070,7 @@ mkV021 base =
Pl => base_1+base_2+"է՛ք"
} ;
passive = base ; --guessed
passivePart = base ;
past = table {
P1 => table {
Sg => base_1+base_2+"եցի" ;
@@ -2150,6 +2171,7 @@ mkV022 base =
Pl => base_1+"րձե՛ք"
} ;
passive = base ; --guessed
passivePart = base ;
past = table {
P1 => table {
Sg => base_1+"րձա" ;
@@ -2250,6 +2272,7 @@ mkV023 base =
Pl => base_1+"սե՛ք"
} ;
passive = base ; --guessed
passivePart = base ;
past = table {
P1 => table {
Sg => base_1+"սա" ;
@@ -2350,6 +2373,7 @@ mkV024 base =
Pl => base_1+"ե՛ք"
} ;
passive = base ; --guessed
passivePart = base ;
past = table {
P1 => table {
Sg => base_1+"ա" ;
@@ -2450,6 +2474,7 @@ mkV025 base =
Pl => base_1+base_2+"ե՛ք"
} ;
passive = base ; --guessed
passivePart = base ;
past = table {
P1 => table {
Sg => base_1+base_2+"եցի" ;
+19 -9
View File
@@ -13,17 +13,27 @@ concrete NounHye of Noun = CatHye ** open Prelude, ResHye in {
lin ExtAdvNP np adv = {s = \\c => np.s ! c ++ "," ++ adv.s; a = np.a} ;
lin PredetNP pred np = {s = \\c => pred.s ++ np.s ! c; a = np.a} ;
lin UsePN pn = {s = \\_ => pn.s; a = {n = Sg; p = P3}} ;
lin DefArt = {s = []; sp = Def} ;
lin DefArt = {s = \\_ => []; sp = Def; isArt = True} ;
lin DetCN det cn = {s = \\c => det.s ++ cn.s ! det.sp ! c ! det.n;
a = {n=det.n; p=P3}} ;
lin DetQuant quant num = {s = quant.s ++ num.s; n = num.n; sp=quant.sp} ;
lin DetQuantOrd quant num ord = {
s = quant.s ++ num.s ++ ord.s; n = num.n; sp = quant.sp
lin DetQuant quant num = {
s = case <quant.isArt,num.isCard> of {
<True,True> => num.s;
_ => quant.s ! num.n ++ num.s
};
n = num.n; sp=quant.sp
} ;
lin IndefArt = {s = []; sp = Indef} ;
lin NumPl = {s = []; n = Pl} ;
lin NumSg = {s = []; n = Sg} ;
lin NumCard card = {s = card.s; n = Pl} ;
lin DetQuantOrd quant num ord = {
s = case <quant.isArt,num.isCard> of {
<True,True> => num.s ++ ord.s;
_ => quant.s ! num.n ++ num.s ++ ord.s
};
n = num.n; sp = quant.sp
} ;
lin IndefArt = {s = table {Sg => "մի"; Pl => []}; sp = Indef; isArt = True} ;
lin NumPl = {s = []; n = Pl; isCard = False} ;
lin NumSg = {s = []; n = Sg; isCard = False} ;
lin NumCard card = {s = card.s; n = Sg; isCard = True} ;
lin NumDigits digits = {s = digits.s ! NCard} ;
lin NumDecimal decimal = {s = decimal.s ! NCard} ;
lin NumNumeral numeral = {s = numeral.s ! NCard} ;
@@ -73,7 +83,7 @@ concrete NounHye of Noun = CatHye ** open Prelude, ResHye in {
};
a = {n=Pl;p=P3}
} ;
lin PossPron pron = {s = pron.empty; sp = Poss pron.a.p} ;
lin PossPron pron = {s = \\_ => pron.empty; sp = Def; isArt = False} ;
lin UseN n = {
s = \\sp,c,num =>
case <sp,c> of {
+1 -1
View File
@@ -486,7 +486,7 @@ oper
mkIQuant : Str -> IQuant = \s -> lin IQuant {s=s} ;
mkIDet : Str -> IDet = \s -> lin IDet {s=s} ;
mkSubj : Str -> Subj = \s -> lin Subj {s=s} ;
mkQuant : Str -> Quant = \s -> lin Quant {s=s; sp=Indef} ;
mkQuant : Str -> Quant = \s -> lin Quant {s=\\_=>s; sp=Indef; isArt=False} ;
mkDet : Str -> Number -> Det = \s,n -> lin Det {s=s; n=n; sp=Indef} ;
mkPredet : Str -> Predet = \s -> lin Predet {s=s} ;
mkCard : Str -> Card = \s -> lin Card {s=s} ;
+3 -3
View File
@@ -11,9 +11,9 @@ lin
UttIAdv adv = adv ;
UttIP ip = ip ;
UttQS qs = qs ;
UttImpSg pol imp = {s = case pol.p of {Pos => imp.s; Neg => "մի" ++ imp.s}} ;
UttImpPl pol imp = {s = case pol.p of {Pos => imp.s; Neg => "մի" ++ imp.s}} ;
UttImpPol pol imp = {s = case pol.p of {Pos => imp.s; Neg => "մի" ++ imp.s}} ;
UttImpSg pol imp = {s = case pol.p of {Pos => imp.s ! Sg; Neg => "մի" ++ imp.s ! Sg}} ;
UttImpPl pol imp = {s = case pol.p of {Pos => imp.s ! Pl; Neg => "մի" ++ imp.s ! Pl}} ;
UttImpPol pol imp = {s = case pol.p of {Pos => imp.s ! Pl; Neg => "մի" ++ imp.s ! Pl}} ;
VocNP np = {s = np.s ! Nom} ;
PConjConj conj = conj ;
+45 -7
View File
@@ -1,11 +1,49 @@
concrete QuestionHye of Question = CatHye ** open ResHye in {
concrete QuestionHye of Question = CatHye ** open Prelude, ResHye in {
lincat QVP = {s : Str} ;
oper
markFinal : Str -> Str = \s -> s ++ BIND ++ "՞" ;
clForm : Cl -> Tense -> Anteriority -> Polarity -> Str = \cl,t,a,p ->
case a of {
Anter => cl.anterior ! t ! p;
Simul => case p of {
Neg => cl.negative ! t;
Pos => case t of {
Pres => cl.s;
Past => cl.past ! P3 ! Sg;
Fut => cl.conditional ! Non_Past ! Sg;
Cond => cl.conditional ! Perfect ! Sg
}
}
} ;
vpForm : VP -> Tense -> Anteriority -> Polarity -> Str = \vp,t,a,p ->
case a of {
Anter => case <t,p> of {
<Pres,Pos> => vp.converb.perfective ++ presentAux P3 Sg;
<Pres,Neg> => negativePresentAux P3 Sg ++ vp.converb.perfective;
<Past,Pos> => vp.converb.perfective ++ pastAux P3 Sg;
<Past,Neg> => negativePastAux P3 Sg ++ vp.converb.perfective;
<Fut,Pos> => vp.converb.perfective ++ copulaVerb.conditional ! Non_Past ! P3 ! Sg;
<Fut,Neg> => negativePresentAux P3 Sg ++ vp.converb.perfective ++ copulaVerb.converb.futCon1;
<Cond,Pos> => vp.converb.perfective ++ copulaVerb.conditional ! Perfect ! P3 ! Sg;
<Cond,Neg> => negativePastAux P3 Sg ++ vp.converb.perfective
};
Simul => case <t,p> of {
<Pres,Pos> => vp.converb.imperfective ++ presentAux P3 Sg;
<Pres,Neg> => negativePresentAux P3 Sg ++ vp.converb.imperfective;
<Past,Pos> => vp.past ! P3 ! Sg;
<Past,Neg> => "չ" ++ BIND ++ vp.past ! P3 ! Sg;
<Fut,Pos> => vp.conditional ! Non_Past ! P3 ! Sg;
<Fut,Neg> => negativePresentAux P3 Sg ++ vp.converb.futCon1;
<Cond,Pos> => vp.conditional ! Perfect ! P3 ! Sg;
<Cond,Neg> => "չ" ++ BIND ++ vp.conditional ! Perfect ! P3 ! Sg
}
} ;
lin
QuestCl cl = {s = cl.s ++ "՞"} ;
QuestVP ip vp = {s = ip.s ++ vp.s ++ "՞"} ;
QuestSlash ip slash = {s = ip.s ++ slash.s ++ "՞"} ;
QuestIAdv adv cl = {s = adv.s ++ cl.s ++ "՞"} ;
QuestIComp comp np = {s = comp.s ++ np.s ! Nom ++ "՞"} ;
QuestCl cl = {s = \\t,a,p => markFinal (clForm cl t a p)} ;
QuestVP ip vp = {s = \\t,a,p => ip.s ++ vpForm vp t a p} ;
QuestSlash ip slash = {s = \\_,_,_ => ip.s ++ slash.s} ;
QuestIAdv adv cl = {s = \\t,a,p => adv.s ++ clForm cl t a p} ;
QuestIComp comp np = {s = \\_,_,_ => comp.s ++ np.s ! Nom} ;
IdetCN det cn = {s = det.s ++ cn.s ! Indef ! Nom ! Sg} ;
IdetIP det = {s = det.s} ;
AdvIP ip adv = {s = ip.s ++ adv.s} ;
@@ -17,5 +55,5 @@ concrete QuestionHye of Question = CatHye ** open ResHye in {
ComplSlashIP slash ip = {s = slash.s ++ ip.s} ;
AdvQVP vp adv = {s = vp.s ++ adv.s} ;
AddAdvQVP qvp adv = {s = qvp.s ++ adv.s} ;
QuestQVP ip qvp = {s = ip.s ++ qvp.s ++ "՞"} ;
QuestQVP ip qvp = {s = \\_,_,_ => ip.s ++ qvp.s} ;
}
+68 -2
View File
@@ -4,12 +4,73 @@ param CardOrd = NCard | NOrd ;
param Aspect = Non_Past | Perfect ;
param Case = Nom | Dat | Ablat | Instr | Loc ;
param PartType = Resultative | Subject ;
oper Verb = {s: Str; causative: Str; conditional: Aspect => Person => Number => Str; converb: {imperfective: Str; futCon1: Str; futCon2: Str; negative: Str; perfective: Str; simultaneous: Str}; imperative: Number => Str; passive: Str; past: Person => Number => Str; participle: PartType => Str; subjunctive: Aspect => Person => Number => Str} ; -- 898
oper Verb = {s: Str; causative: Str; conditional: Aspect => Person => Number => Str; converb: {imperfective: Str; futCon1: Str; futCon2: Str; negative: Str; perfective: Str; simultaneous: Str}; imperative: Number => Str; passive: Str; passivePart: Str; past: Person => Number => Str; participle: PartType => Str; subjunctive: Aspect => Person => Number => Str} ; -- 898
oper presentAux : Person -> Number -> Str = \p,n -> case <p,n> of {
<P1,Sg> => "եմ"; <P2,Sg> => "ես"; <P3,Sg> => "է";
<P1,Pl> => "ենք"; <P2,Pl> => "եք"; <P3,Pl> => "են"
} ;
oper negativePresentAux : Person -> Number -> Str = \p,n -> case <p,n> of {
<P1,Sg> => "չեմ"; <P2,Sg> => "չես"; <P3,Sg> => "չի";
<P1,Pl> => "չենք"; <P2,Pl> => "չեք"; <P3,Pl> => "չեն"
} ;
oper pastAux : Person -> Number -> Str = \p,n -> case <p,n> of {
<P1,Sg> => "էի"; <P2,Sg> => "էիր"; <P3,Sg> => "էր";
<P1,Pl> => "էինք"; <P2,Pl> => "էիք"; <P3,Pl> => "էին"
} ;
oper negativePastAux : Person -> Number -> Str = \p,n -> case <p,n> of {
<P1,Sg> => "չէի"; <P2,Sg> => "չէիր"; <P3,Sg> => "չէր";
<P1,Pl> => "չէինք"; <P2,Pl> => "չէիք"; <P3,Pl> => "չէին"
} ;
oper copulaVerb : Verb = {
s = "լինել";
causative = "լինել";
conditional = table {
Perfect => table {
P1 => table {Sg => "կլինեի"; Pl => "կլինեինք"};
P2 => table {Sg => "կլինեիր"; Pl => "կլինեիք"};
P3 => table {Sg => "կլիներ"; Pl => "կլինեին"}
};
Non_Past => table {
P1 => table {Sg => "կլինեմ"; Pl => "կլինենք"};
P2 => table {Sg => "կլինես"; Pl => "կլինեք"};
P3 => table {Sg => "կլինի"; Pl => "կլինեն"}
}
};
converb = {
imperfective = [];
futCon1 = "լինելու";
futCon2 = "լինելիք";
negative = "լինի";
perfective = "եղել";
simultaneous = "լինելիս"
};
imperative = table {Sg => "եղի՛ր"; Pl => "եղե՛ք"};
passive = "լինել";
passivePart = "եղած";
past = table {
P1 => table {Sg => "էի"; Pl => "էինք"};
P2 => table {Sg => "էիր"; Pl => "էիք"};
P3 => table {Sg => "էր"; Pl => "էին"}
};
participle = table {Resultative => "եղած"; Subject => "լինող"};
subjunctive = table {
Perfect => table {
P1 => table {Sg => "լինեի"; Pl => "լինեինք"};
P2 => table {Sg => "լինեիր"; Pl => "լինեիք"};
P3 => table {Sg => "լիներ"; Pl => "լինեին"}
};
Non_Past => table {
P1 => table {Sg => "լինեմ"; Pl => "լինենք"};
P2 => table {Sg => "լինես"; Pl => "լինեք"};
P3 => table {Sg => "լինի"; Pl => "լինեն"}
}
}
} ;
oper invarVerb : Str -> Verb = \s -> {
s=s; causative=s;
conditional=table {_ => table {_ => table {_ => s}}};
converb={imperfective=s;futCon1=s;futCon2=s;negative=s;perfective=s;simultaneous=s};
imperative=table {_ => s}; passive=s;
imperative=table {_ => s}; passive=s; passivePart=s;
past=table {_ => table {_ => s}};
participle=table {_ => s};
subjunctive=table {_ => table {_ => table {_ => s}}}
@@ -60,6 +121,11 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_
Pl => f22
} ;
passive = f23 ;
passivePart = case f23 of {
stem + "ել" => stem + "ած";
stem + "ալ" => stem + "ացած";
_ => f23
} ;
past = table {
P1 => table {
Sg => f24 ;
+54 -29
View File
@@ -1,19 +1,30 @@
concrete SentenceHye of Sentence = CatHye ** open Prelude,ResHye in {
oper negAux : Agr -> Str = \a -> case <a.p,a.n> of {
<P1,Sg> => "չեմ"; <P2,Sg> => "չես"; <P3,Sg> => "չի";
<P1,Pl> => "չենք"; <P2,Pl> => "չեք"; <P3,Pl> => "չեն"
} ;
lin PredVP np vp = {s = np.s ! Nom ++ vp.converb.imperfective ++
case <np.a.p,np.a.n> of {
<P1,Sg> => "եմ"; <P2,Sg> => "ես"; <P3,Sg> => "է";
<P1,Pl> => "ենք"; <P2,Pl> => "եք"; <P3,Pl> => "են"
};
presentAux np.a.p np.a.n;
negative = table {
Pres => np.s ! Nom ++ negAux np.a ++ vp.converb.imperfective;
Pres => np.s ! Nom ++ negativePresentAux np.a.p np.a.n ++ vp.converb.imperfective;
Past => np.s ! Nom ++ "չ" ++ BIND ++ vp.past ! np.a.p ! np.a.n;
Fut => np.s ! Nom ++ negAux np.a ++ vp.converb.futCon1;
Fut => np.s ! Nom ++ negativePresentAux np.a.p np.a.n ++ vp.converb.futCon1;
Cond => np.s ! Nom ++ "չ" ++ BIND ++ vp.conditional ! Non_Past ! np.a.p ! np.a.n
};
anterior = table {
Pres => table {
Pos => np.s ! Nom ++ vp.converb.perfective ++ presentAux np.a.p np.a.n;
Neg => np.s ! Nom ++ negativePresentAux np.a.p np.a.n ++ vp.converb.perfective
};
Past => table {
Pos => np.s ! Nom ++ vp.converb.perfective ++ pastAux np.a.p np.a.n;
Neg => np.s ! Nom ++ negativePastAux np.a.p np.a.n ++ vp.converb.perfective
};
Fut => table {
Pos => np.s ! Nom ++ vp.converb.perfective ++ copulaVerb.conditional ! Non_Past ! np.a.p ! np.a.n;
Neg => np.s ! Nom ++ negativePresentAux np.a.p np.a.n ++ vp.converb.perfective ++ copulaVerb.converb.futCon1
};
Cond => table {
Pos => np.s ! Nom ++ vp.converb.perfective ++ copulaVerb.conditional ! Perfect ! np.a.p ! np.a.n;
Neg => np.s ! Nom ++ negativePastAux np.a.p np.a.n ++ vp.converb.perfective
}
};
conditional = \\a,_ => np.s ! Nom ++ vp.conditional ! a ! np.a.p ! np.a.n;
converb = {imperfective = np.s ! Nom ++ vp.converb.imperfective;
futCon1 = np.s ! Nom ++ vp.converb.futCon1;
@@ -25,37 +36,51 @@ concrete SentenceHye of Sentence = CatHye ** open Prelude,ResHye in {
past = \\_,_ => np.s ! Nom ++ vp.past ! np.a.p ! np.a.n;
participle = \\p => np.s ! Nom ++ vp.participle ! p;
subjunctive = \\a,_ => np.s ! Nom ++ vp.subjunctive ! a ! np.a.p ! np.a.n} ;
lin PredSCVP sc vp = {s = sc.s ++ vp.s;
negative=table {_ => sc.s ++ "չ" ++ BIND ++ vp.s};
conditional=\\a,n => sc.s ++ vp.conditional ! a ! P3 ! n;
lin PredSCVP sc vp = {s = sc.s ++ vp.converb.imperfective ++ presentAux P3 Sg;
negative=table {
Pres => sc.s ++ negativePresentAux P3 Sg ++ vp.converb.imperfective;
Past => sc.s ++ "չ" ++ BIND ++ vp.past ! P3 ! Sg;
Fut => sc.s ++ negativePresentAux P3 Sg ++ vp.converb.futCon1;
Cond => sc.s ++ "չ" ++ BIND ++ vp.conditional ! Non_Past ! P3 ! Sg
};
anterior=table {
Pres=>table {Pos=>sc.s++vp.converb.perfective++presentAux P3 Sg;
Neg=>sc.s++negativePresentAux P3 Sg++vp.converb.perfective};
Past=>table {Pos=>sc.s++vp.converb.perfective++pastAux P3 Sg;
Neg=>sc.s++negativePastAux P3 Sg++vp.converb.perfective};
Fut=>table {Pos=>sc.s++vp.converb.perfective++copulaVerb.conditional!Non_Past!P3!Sg;
Neg=>sc.s++negativePresentAux P3 Sg++vp.converb.perfective++copulaVerb.converb.futCon1};
Cond=>table {Pos=>sc.s++vp.converb.perfective++copulaVerb.conditional!Perfect!P3!Sg;
Neg=>sc.s++negativePastAux P3 Sg++vp.converb.perfective}
};
conditional=\\a,_ => sc.s ++ vp.conditional ! a ! P3 ! Sg;
converb={imperfective=sc.s ++ vp.converb.imperfective; futCon1=sc.s ++ vp.converb.futCon1;
futCon2=sc.s ++ vp.converb.futCon2; negative=sc.s ++ vp.converb.negative;
perfective=sc.s ++ vp.converb.perfective; simultaneous=sc.s ++ vp.converb.simultaneous};
passive=sc.s ++ vp.passive; past=\\p,n => sc.s ++ vp.past ! p ! n;
passive=sc.s ++ vp.passive; past=\\_,_ => sc.s ++ vp.past ! P3 ! Sg;
participle=\\p => sc.s ++ vp.participle ! p;
subjunctive=\\a,n => sc.s ++ vp.subjunctive ! a ! P3 ! n} ;
lin UseCl temp pol cl = {s = case pol.p of {
Neg => cl.negative ! temp.t;
Pos => case <temp.t,temp.a> of {
<Pres,Simul> => cl.s;
<Pres,Anter> => cl.converb.perfective;
<Past,Simul> => cl.past ! P3 ! Sg;
<Past,Anter> => cl.converb.perfective;
<Fut,Simul> => cl.conditional ! Non_Past ! Sg;
<Fut,Anter> => cl.conditional ! Perfect ! Sg;
<Cond,Simul> => cl.conditional ! Non_Past ! Sg;
<Cond,Anter> => cl.conditional ! Perfect ! Sg
subjunctive=\\a,_ => sc.s ++ vp.subjunctive ! a ! P3 ! Sg} ;
lin UseCl temp pol cl = {s = case temp.a of {
Anter => cl.anterior ! temp.t ! pol.p;
Simul => case pol.p of {
Neg => cl.negative ! temp.t;
Pos => case temp.t of {
Pres => cl.s;
Past => cl.past ! P3 ! Sg;
Fut => cl.conditional ! Non_Past ! Sg;
Cond => cl.conditional ! Perfect ! Sg
}
}
}} ;
lin UseQCl temp pol qcl = {s = case pol.p of {Pos => qcl.s; Neg => "չ" ++ qcl.s}} ;
lin UseQCl temp pol qcl = {s = qcl.s ! temp.t ! temp.a ! pol.p} ;
lin UseRCl temp pol rcl = {s = case pol.p of {Pos => rcl.s; Neg => "չ" ++ rcl.s}} ;
lin UseSlash temp pol slash = {s = case pol.p of {Pos => slash.s; Neg => "չ" ++ slash.s}} ;
lin AdvS adv s = {s = adv.s ++ s.s} ;
lin ExtAdvS adv s = {s = adv.s ++ "," ++ s.s} ;
lin SSubjS s1 subj s2 = {s = s1.s ++ subj.s ++ s2.s} ;
lin RelS s rs = {s = s.s ++ "," ++ rs.s} ;
lin ImpVP vp = {s = vp.imperative ! Sg} ;
lin AdvImp adv imp = {s = adv.s ++ imp.s} ;
lin ImpVP vp = {s = vp.imperative} ;
lin AdvImp adv imp = {s = \\n => adv.s ++ imp.s ! n} ;
lin EmbedS s = s ;
lin EmbedQS qs = qs ;
lin SlashVP np vp = {s = np.s ! Nom ++ vp.s} ;
+11 -11
View File
@@ -72,17 +72,17 @@ lin if_Subj = mkSubj "եթե" ;
lin because_Subj = mkSubj "որովհետև" ;
lin although_Subj = mkSubj "թեև" ;
lin that_Subj = mkSubj "որ" ;
lin whatSg_IP = mkIP "ինչ" ;
lin whatPl_IP = mkIP "ինչեր" ;
lin whoSg_IP = mkIP "ով" ;
lin whoPl_IP = mkIP "ովքեր" ;
lin which_IQuant = mkIQuant "որ" ;
lin how_IAdv = mkIAdv "ինչպես" ;
lin when_IAdv = mkIAdv "երբ" ;
lin where_IAdv = mkIAdv "որտեղ" ;
lin why_IAdv = mkIAdv "ինչու" ;
lin how8many_IDet = mkIDet "քանի" ;
lin how8much_IAdv = mkIAdv "որքան" ;
lin whatSg_IP = mkIP "ի՞նչ" ;
lin whatPl_IP = mkIP "ինչե՞ր" ;
lin whoSg_IP = mkIP "ո՞վ" ;
lin whoPl_IP = mkIP "ովքե՞ր" ;
lin which_IQuant = mkIQuant "ո՞ր" ;
lin how_IAdv = mkIAdv "ինչպե՞ս" ;
lin when_IAdv = mkIAdv "ե՞րբ" ;
lin where_IAdv = mkIAdv "որտե՞ղ" ;
lin why_IAdv = mkIAdv "ինչո՞ւ" ;
lin how8many_IDet = mkIDet "քանի՞" ;
lin how8much_IAdv = mkIAdv "որքա՞ն" ;
lin as_CAdv = mkCAdv "այնքան" ;
lin more_CAdv = mkCAdv "ավելի" ;
lin less_CAdv = mkCAdv "պակաս" ;
+40 -13
View File
@@ -8,6 +8,32 @@ concrete VerbHye of Verb = CatHye ** open Prelude, ResHye, ParadigmsHye in {
s=v.s; conditional=v.conditional; converb=v.converb; imperative=v.imperative;
passive=v.passive; past=v.past; participle=v.participle; subjunctive=v.subjunctive
} ;
appendVerb : Verb -> Str -> Verb = \v,x -> {
s=v.s ++ x; causative=v.causative ++ x;
conditional=\\a,p,n => v.conditional ! a ! p ! n ++ x;
converb={imperfective=v.converb.imperfective ++ x;
futCon1=v.converb.futCon1 ++ x; futCon2=v.converb.futCon2 ++ x;
negative=v.converb.negative ++ x; perfective=v.converb.perfective ++ x;
simultaneous=v.converb.simultaneous ++ x};
imperative=\\n => v.imperative ! n ++ x; passive=v.passive ++ x;
passivePart=v.passivePart ++ x;
past=\\p,n => v.past ! p ! n ++ x;
participle=\\p => v.participle ! p ++ x;
subjunctive=\\a,p,n => v.subjunctive ! a ! p ! n ++ x
} ;
prependVerb : Str -> Verb -> Verb = \x,v -> {
s=x ++ v.s; causative=x ++ v.causative;
conditional=\\a,p,n => x ++ v.conditional ! a ! p ! n;
converb={imperfective=x ++ v.converb.imperfective;
futCon1=x ++ v.converb.futCon1; futCon2=x ++ v.converb.futCon2;
negative=x ++ v.converb.negative; perfective=x ++ v.converb.perfective;
simultaneous=x ++ v.converb.simultaneous};
imperative=\\n => x ++ v.imperative ! n; passive=x ++ v.passive;
passivePart=x ++ v.passivePart;
past=\\p,n => x ++ v.past ! p ! n;
participle=\\p => x ++ v.participle ! p;
subjunctive=\\a,p,n => x ++ v.subjunctive ! a ! p ! n
} ;
appendVP : VP -> Str -> VP = \v,x -> lin VP {
s=v.s ++ x;
conditional=\\a,p,n => v.conditional ! a ! p ! n ++ x;
@@ -66,24 +92,25 @@ concrete VerbHye of Verb = CatHye ** open Prelude, ResHye, ParadigmsHye in {
lin ComplVS v s = appendVP (toVP v) s.s ;
lin ComplVQ v qs = appendVP (toVP v) qs.s ;
lin ComplVA v ap = appendVP (toVP v) (ap.s ! Indef ! Nom ! Sg) ;
lin Slash2V3 v np = lin VPSlash (v ** {
s = compl v.c2 np ++ v.s; c2 = v.c3
lin Slash2V3 v np = lin VPSlash ((prependVerb (compl v.c2 np) v) ** {
c2 = v.c3
}) ;
lin Slash3V3 v np = lin VPSlash (v ** {
s = compl v.c3 np ++ v.s; c2 = v.c2
lin Slash3V3 v np = lin VPSlash ((prependVerb (compl v.c3 np) v) ** {
c2 = v.c2
}) ;
lin SlashV2S v s = lin VPSlash (v ** {s = v.s ++ s.s; c2=v.c2}) ;
lin SlashV2Q v qs = lin VPSlash (v ** {s = v.s ++ qs.s; c2=v.c2}) ;
lin SlashV2A v ap = lin VPSlash (v ** {
s = v.s ++ ap.s ! Indef ! Nom ! Sg; c2=v.c2
lin SlashV2S v s = lin VPSlash ((appendVerb v s.s) ** {c2=v.c2}) ;
lin SlashV2Q v qs = lin VPSlash ((appendVerb v qs.s) ** {c2=v.c2}) ;
lin SlashV2A v ap = lin VPSlash ((appendVerb v (ap.s ! Indef ! Nom ! Sg)) ** {
c2=v.c2
}) ;
lin UseComp comp = prependVP comp.s (toVP (mkV "լինել")) ;
lin UseCopula = toVP (mkV "լինել") ;
lin UseComp comp = prependVP comp.s (toVP copulaVerb) ;
lin UseCopula = toVP copulaVerb ;
lin ExtAdvVP vp adv = appendVP vp ("," ++ adv.s) ;
lin AdVVP adv vp = prependVP adv.s vp ;
lin AdvVPSlash vp adv = lin VPSlash (vp ** {s = vp.s ++ adv.s}) ;
lin AdVVPSlash adv vp = lin VPSlash (vp ** {s = adv.s ++ vp.s}) ;
lin VPSlashPrep vp prep = lin VPSlash (vp ** {causative=vp.s;c2=prep}) ;
lin AdvVPSlash vp adv = lin VPSlash ((appendVerb vp adv.s) ** {c2=vp.c2}) ;
lin AdVVPSlash adv vp = lin VPSlash ((prependVerb adv.s vp) ** {c2=vp.c2}) ;
lin VPSlashPrep vp prep = lin VPSlash
(vp ** {causative=vp.s;passivePart=vp.participle!Resultative;c2=prep}) ;
lin CompAP ap = {s = ap.s ! Indef ! Nom ! Sg} ;
lin CompNP np = {s = np.s ! Nom} ;
lin CompAdv adv = adv ;