diff options
| author | krasimir <krasimir@chalmers.se> | 2008-11-26 14:43:05 +0000 |
|---|---|---|
| committer | krasimir <krasimir@chalmers.se> | 2008-11-26 14:43:05 +0000 |
| commit | d0116c395839cd53dd24cfe1cb26b3f64ddc9430 (patch) | |
| tree | 74665c6353429f714a973437fb49a7b80a1ac12a /next-lib/src/russian/VerbRus.gf | |
| parent | 66785b20208f9ea2fca7b6ff3355cd8ce87636c3 (diff) | |
add Russian in next-lib
Diffstat (limited to 'next-lib/src/russian/VerbRus.gf')
| -rw-r--r-- | next-lib/src/russian/VerbRus.gf | 289 |
1 files changed, 289 insertions, 0 deletions
diff --git a/next-lib/src/russian/VerbRus.gf b/next-lib/src/russian/VerbRus.gf new file mode 100644 index 000000000..193800034 --- /dev/null +++ b/next-lib/src/russian/VerbRus.gf @@ -0,0 +1,289 @@ + +--# -path=.:../abstract:../common:../../prelude + +concrete VerbRus of Verb = CatRus ** open ResRus, Prelude in { + +-- 1.4 additions by AR 17/6/2008 + + flags optimize=all_subs ; coding=utf8 ; + lin + CompNP masha = + { s=\\clf,gn,p => case clf of + { + (ClIndic Present _) => masha.s ! (mkPronForm Nom No NonPoss) ; + (ClIndic PastRus _) => case gn of + { (ASg Fem) =>"была"++masha.s ! (mkPronForm Inst No NonPoss); + (ASg Masc) =>"был" ++ masha.s!(mkPronForm Inst No NonPoss); + (ASg Neut) =>"было" ++ masha.s!(mkPronForm Inst No NonPoss); + APl => "были" ++ masha.s ! (mkPronForm Inst No NonPoss) + }; + (ClIndic Future _) => case gn of + { APl => case p of + { P3 => "будут"++masha.s ! (mkPronForm Inst No NonPoss); + P2 => "будете"++masha.s !(mkPronForm Inst No NonPoss); + P1 => "будем"++masha.s ! (mkPronForm Inst No NonPoss) + }; + (ASg _) => case p of + { P3=>"будет"++masha.s!(mkPronForm Inst No NonPoss) ; + P2 => "будешь"++ masha.s ! (mkPronForm Inst No NonPoss) ; + P1=> "буду"++ masha.s ! (mkPronForm Inst No NonPoss) + } --case p + }; --case gn + ClCondit => "" ; + ClImper => case (numGNum gn) of + {Sg => "будь" ++ masha.s ! (mkPronForm Inst No NonPoss); + Pl => "будьте" ++ masha.s ! (mkPronForm Inst No NonPoss) + }; + ClInfin => "быть" ++ masha.s ! (mkPronForm Inst No NonPoss) +}; -- case clf + asp = Imperfective ; + w = Act; + negBefore = True; + s2 = ""; + s3 = \\g,n => "" + } ; + + CompAP zloj ={ + s= \\clf,gn,p => case clf of { +-- person is ignored ! + ClInfinit => "быть" ++ zloj.s ! AF Inst Animate (ASg Masc) ; + ClImper => case gn of + { (ASg _) => "будь" ++ zloj.s ! AF Inst Animate (ASg Masc); + APl => "будьте" ++ zloj.s ! AF Inst Animate APl + }; +-- infinitive does not save GenNum, +-- but indicative does for the sake of adjectival predication ! + ClIndic Present _ => zloj.s ! AF Nom Animate gn ; + ClIndic PastRus _ => case gn of + { (ASg Fem) => "была" ++ zloj.s! AF Nom Animate (ASg Fem); + (ASg Masc) => "был" ++ zloj.s! AF Nom Animate (ASg Masc); + (ASg Neut) => "был" ++ zloj.s! AF Nom Animate (ASg Neut); + APl => "были" ++ zloj.s! AF Nom Animate APl + }; + ClIndic Future _ => case gn of + { APl => case p of + { P3 => "будут" ++ zloj.s! AF Nom Animate APl; + P2 => "будете" ++ zloj.s! AF Nom Animate APl; + P1 => "будем" ++ zloj.s! AF Nom Animate APl + } ; + (ASg _) => case p of + {P3 => "будет" ++ zloj.s! AF Nom Animate (ASg (genGNum gn)); + P2 => "будешь"++ zloj.s! AF Nom Animate (ASg (genGNum gn)); + P1=> "буду" ++ zloj.s! AF Nom Animate (ASg (genGNum gn)) + } + }; + ClCondit => "" + } ; + + asp = Imperfective ; + w = Act; + negBefore = True; + s2 = ""; + s3 = \\g,n=> "" + } ; + + +-- Verb phrases can also be formed from adjectives (" молод"), +-- common nouns (" человек"), and noun phrases (" самый молодой"). +-- The third rule is overgenerating: " каждый человек" has to be ruled out +-- on semantic grounds. +-- Note: we omit a dash "-" because it will cause problems with negation word order: +-- "Я не - волшебник". Alternatively, we can consider verb-based VP and +-- all the rest. + + CompAdv zloj = + { s= \\clf,gn,p => case clf of { + ClImper => case gn of + { ASg _ => "будь" ++ zloj.s; -- person is ignored ! + APl => "будьте" ++ zloj.s + }; + ClInfinit => "быть" ++ zloj.s; + ClIndic Present _ => zloj.s ; + ClIndic PastRus _ => case gn of + { (ASg Fem) => "была" ++ zloj.s; + (ASg Masc) => "был" ++ zloj.s; + (ASg Neut) => "было" ++ zloj.s; + APl => "были" ++ zloj.s + }; + ClIndic Future _ => case gn of + { (ASg _) => "будет" ++ zloj.s; + APl => "будут" ++ zloj.s + }; + ClCondit => "" + } ; + asp = Imperfective ; + w = Act; + s2 = ""; + negBefore = True; + s3 = \\g,n => "" + } ; + + + + UseComp comp = comp ; + +-- CompAP ap = ap ; +-- CompNP np = {s = \\_ => np.s ! Acc} ; +-- CompAdv a = {s = \\_ => a.s} ; + + +-- A simple verb can be made into a verb phrase with an empty complement. +-- There are two versions, depending on if we want to negate the verb. +-- N.B. negation is *not* a function applicable to a verb phrase, since +-- double negations with "inte" are not grammatical. + + UseV se = + {s=\\clf,gn,p => se.s ! (getActVerbForm clf (genGNum gn) (numGNum gn) p) ; + asp = se.asp ; + w=Act; + s2 = ""; + negBefore = True; + s3 = table{_=> table{_ => ""}} + } ; + +-- The rule for using transitive verbs is the complementization rule: + SlashV2a se = + {s = \\clf,gn,p => se.s ! (getActVerbForm clf (genGNum gn) (numGNum gn) p) ; + asp = se.asp ; + w = Act; + s2 = ""; + s3 = \\g,n => ""; + negBefore = True ; + sc = se.s2 ; + c = se.c + } ; + + ComplSlash se tu = + {s = \\clf,gn,p => se.s ! clf ! gn ! p + ++ se.sc ++ tu.s ! (mkPronForm se.c No NonPoss) ; + asp = se.asp ; + w = se.w; + s2 = se.s2; + s3 = se.s3; + negBefore = se.negBefore + } ; + + Slash2V3 dat tu = + let + tebepivo = dat.s2 ++ tu.s ! PF dat.c No NonPoss ++ dat.s4 ; + in + {s = \\clf,gn,p => dat.s ! (getActVerbForm clf (genGNum gn) (numGNum gn) p) ++ tebepivo ; + asp = dat.asp ; + w = Act; + negBefore = True; + s2 = ""; + s3 = \\g,n=> "" ; + sc = dat.s4 ; + c = dat.c2 + } ; + + Slash3V3 dat pivo = + let + tebepivo = dat.s4 ++ pivo.s ! PF dat.c2 Yes NonPoss + in + {s = \\clf,gn,p => dat.s ! (getActVerbForm clf (genGNum gn) (numGNum gn) p) ++ tebepivo ; + asp = dat.asp ; + w = Act; + negBefore = True; + s2 = ""; + s3 = \\g,n=> "" ; + sc = dat.s2 ; + c = dat.c + } ; + +{- + ComplV3 dat tu pivo = + let + tebepivo = dat.s2 ++ + tu.s ! PF dat.c No NonPoss ++ dat.s4 ++ pivo.s ! PF dat.c2 Yes NonPoss + in + {s = \\clf,gn,p => dat.s ! (getActVerbForm clf (genGNum gn) (numGNum gn) p) ++ tebepivo ; + asp = dat.asp ; + w = Act; + negBefore = True; + s2 = ""; + s3 = \\g,n=> "" + } ; + + + ReflV2 v = + { s = \\clf,gn,p => v.s ! (getActVerbForm clf (genGNum gn) (numGNum gn) p) ++ v.s2 ++ sebya!v.c; + asp = v.asp ; + w = Act; + negBefore = True; + s2 = ""; + s3 = \\g,n=> "" + } ; +-} + +-- To generate "сказал, что Иван гуляет" / "не сказал, что Иван гуляет": + ComplVS vidit tuUlubaeshsya = + {s = \\clf,gn,p => vidit.s ! (getActVerbForm clf (genGNum gn) (numGNum gn) p) + ++ [", что"] ++ tuUlubaeshsya.s ; + asp = vidit.asp; + w = Act; + s2=""; + negBefore = True; + s3 = \\g,n => "" + } ; +-- To generate "can walk"/"can't walk"; "tries to walk"/"does not try to walk": +-- The contraction of "not" is not provided, since it would require changing +-- the verb parameter type. + + ComplVV putatsya bezhat = + { s = \\clf,gn,p => putatsya.s ! (getActVerbForm clf (genGNum gn) + (numGNum gn) p) ++ bezhat.s!ClInfinit !gn!p ; + asp = putatsya.asp ; + w = Act; + negBefore = True; + s2 = ""; + s3 =\\g,n => "" + } ; + ComplVQ dat esliOnPridet = + {s = \\clf,gn,p => dat.s ! (getActVerbForm clf (genGNum gn) (numGNum gn) p) ++ esliOnPridet.s ! QDir ; + asp = dat.asp ; + w = Act; + negBefore = True; + s2 = ""; + s3 = \\g,n=> "" + } ; + ComplVA vuglyadet molodoj = + {s = \\clf,gn,p => vuglyadet.s ! (getActVerbForm clf (genGNum gn) (numGNum gn) p) ; + asp = vuglyadet.asp ; + w = Act; + negBefore = True; + s2 = ""; + s3 = \\g,n => molodoj.s!(AF Inst Animate (gNum g n)) + } ; + + SlashV2A obechat molodoj = + {s = \\clf,gn,p => + obechat.s ! (getActVerbForm clf (genGNum gn) (numGNum gn) p) ++ + molodoj.s ! AF Inst Inanimate (ASg Neut) ; + ---- AR 17/6; AF Inst tu.anim (pgNum tu.g tu.n) ; + asp = obechat.asp ; + w = Act; + negBefore = True; + s2 = ""; + s3 = \\g,n =>"" ; + sc = obechat.s2 ; + c = obechat.c + } ; + + AdvVP poet khorosho = + {s = \\clf,gn,p => poet.s ! clf!gn!p; s2 = poet.s2 ++ khorosho.s; s3 = poet.s3; + asp = poet.asp; w = poet.w; t = poet.t ; negBefore = poet.negBefore } ; + + AdVVP khorosho poet = + {s = \\clf,gn,p => poet.s ! clf!gn!p; s2 = khorosho.s ++ poet.s2; s3 = poet.s3; + asp = poet.asp; w = poet.w; t = poet.t ; negBefore = poet.negBefore } ; + +PassV2 se = + {s=\\clf,gn,p => se.s ! (getPassVerbForm clf (genGNum gn) (numGNum gn) p) ; + asp=se.asp; w=Pass; s2 = se.s2; + negBefore = True; + s3 = table{_=> table{_ => ""}} +}; + +} + |
