diff --git a/src/armenian/CatHye.gf b/src/armenian/CatHye.gf index 123e96f6..3839bd58 100644 --- a/src/armenian/CatHye.gf +++ b/src/armenian/CatHye.gf @@ -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} ; diff --git a/src/armenian/ConstructionHye.gf b/src/armenian/ConstructionHye.gf index 55b22ddf..bebac285 100644 --- a/src/armenian/ConstructionHye.gf +++ b/src/armenian/ConstructionHye.gf @@ -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}; diff --git a/src/armenian/ExtendHye.gf b/src/armenian/ExtendHye.gf index 51ed340e..f92306ce 100644 --- a/src/armenian/ExtendHye.gf +++ b/src/armenian/ExtendHye.gf @@ -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 of { + => vp.converb.perfective++presentAux agr.p agr.n; + => negativePresentAux agr.p agr.n++vp.converb.perfective; + => vp.converb.perfective++pastAux agr.p agr.n; + => negativePastAux agr.p agr.n++vp.converb.perfective; + => vp.converb.perfective++copulaVerb.conditional!Non_Past!agr.p!agr.n; + => negativePresentAux agr.p agr.n++vp.converb.perfective++copulaVerb.converb.futCon1; + => vp.converb.perfective++copulaVerb.conditional!Perfect!agr.p!agr.n; + => negativePastAux agr.p agr.n++vp.converb.perfective + }; + Simul => case of { + => vp.converb.imperfective++presentAux agr.p agr.n; + => negativePresentAux agr.p agr.n++vp.converb.imperfective; + => vp.past!agr.p!agr.n; + => "չ"++BIND++vp.past!agr.p!agr.n; + => vp.conditional!Non_Past!agr.p!agr.n; + => negativePresentAux agr.p agr.n++vp.converb.futCon1; + => vp.conditional!Perfect!agr.p!agr.n; + => "չ"++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} ; } diff --git a/src/armenian/IdiomHye.gf b/src/armenian/IdiomHye.gf index bdcac3b1..31406251 100644 --- a/src/armenian/IdiomHye.gf +++ b/src/armenian/IdiomHye.gf @@ -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} ; diff --git a/src/armenian/MorphoHye.gf b/src/armenian/MorphoHye.gf index 92e8f8a4..37de875a 100644 --- a/src/armenian/MorphoHye.gf +++ b/src/armenian/MorphoHye.gf @@ -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+"եցի" ; diff --git a/src/armenian/NounHye.gf b/src/armenian/NounHye.gf index 1bdc3706..d8a2a334 100644 --- a/src/armenian/NounHye.gf +++ b/src/armenian/NounHye.gf @@ -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 of { + => 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 of { + => 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 of { diff --git a/src/armenian/ParadigmsHye.gf b/src/armenian/ParadigmsHye.gf index 48d6c801..20da6b38 100644 --- a/src/armenian/ParadigmsHye.gf +++ b/src/armenian/ParadigmsHye.gf @@ -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} ; diff --git a/src/armenian/PhraseHye.gf b/src/armenian/PhraseHye.gf index 09a2a856..605916cb 100644 --- a/src/armenian/PhraseHye.gf +++ b/src/armenian/PhraseHye.gf @@ -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 ; diff --git a/src/armenian/QuestionHye.gf b/src/armenian/QuestionHye.gf index 84d1cef0..204d9b35 100644 --- a/src/armenian/QuestionHye.gf +++ b/src/armenian/QuestionHye.gf @@ -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 of { + => vp.converb.perfective ++ presentAux P3 Sg; + => negativePresentAux P3 Sg ++ vp.converb.perfective; + => vp.converb.perfective ++ pastAux P3 Sg; + => negativePastAux P3 Sg ++ vp.converb.perfective; + => vp.converb.perfective ++ copulaVerb.conditional ! Non_Past ! P3 ! Sg; + => negativePresentAux P3 Sg ++ vp.converb.perfective ++ copulaVerb.converb.futCon1; + => vp.converb.perfective ++ copulaVerb.conditional ! Perfect ! P3 ! Sg; + => negativePastAux P3 Sg ++ vp.converb.perfective + }; + Simul => case of { + => vp.converb.imperfective ++ presentAux P3 Sg; + => negativePresentAux P3 Sg ++ vp.converb.imperfective; + => vp.past ! P3 ! Sg; + => "չ" ++ BIND ++ vp.past ! P3 ! Sg; + => vp.conditional ! Non_Past ! P3 ! Sg; + => negativePresentAux P3 Sg ++ vp.converb.futCon1; + => vp.conditional ! Perfect ! P3 ! Sg; + => "չ" ++ 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} ; } diff --git a/src/armenian/ResHye.gf b/src/armenian/ResHye.gf index b97abbd0..939fc349 100644 --- a/src/armenian/ResHye.gf +++ b/src/armenian/ResHye.gf @@ -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 of { + => "եմ"; => "ես"; => "է"; + => "ենք"; => "եք"; => "են" +} ; +oper negativePresentAux : Person -> Number -> Str = \p,n -> case of { + => "չեմ"; => "չես"; => "չի"; + => "չենք"; => "չեք"; => "չեն" +} ; +oper pastAux : Person -> Number -> Str = \p,n -> case of { + => "էի"; => "էիր"; => "էր"; + => "էինք"; => "էիք"; => "էին" +} ; +oper negativePastAux : Person -> Number -> Str = \p,n -> case of { + => "չէի"; => "չէիր"; => "չէր"; + => "չէինք"; => "չէիք"; => "չէին" +} ; +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 ; diff --git a/src/armenian/SentenceHye.gf b/src/armenian/SentenceHye.gf index 332dea81..a6c2fa22 100644 --- a/src/armenian/SentenceHye.gf +++ b/src/armenian/SentenceHye.gf @@ -1,19 +1,30 @@ concrete SentenceHye of Sentence = CatHye ** open Prelude,ResHye in { - oper negAux : Agr -> Str = \a -> case of { - => "չեմ"; => "չես"; => "չի"; - => "չենք"; => "չեք"; => "չեն" - } ; lin PredVP np vp = {s = np.s ! Nom ++ vp.converb.imperfective ++ - case of { - => "եմ"; => "ես"; => "է"; - => "ենք"; => "եք"; => "են" - }; + 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 of { - => cl.s; - => cl.converb.perfective; - => cl.past ! P3 ! Sg; - => cl.converb.perfective; - => cl.conditional ! Non_Past ! Sg; - => cl.conditional ! Perfect ! Sg; - => cl.conditional ! Non_Past ! Sg; - => 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} ; diff --git a/src/armenian/StructuralHye.gf b/src/armenian/StructuralHye.gf index 6c957264..5b43a6f1 100644 --- a/src/armenian/StructuralHye.gf +++ b/src/armenian/StructuralHye.gf @@ -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 "պակաս" ; diff --git a/src/armenian/VerbHye.gf b/src/armenian/VerbHye.gf index 21692b1e..c231bba7 100644 --- a/src/armenian/VerbHye.gf +++ b/src/armenian/VerbHye.gf @@ -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 ;