summaryrefslogtreecommitdiff
path: root/next-lib/src/russian/VerbRus.gf
diff options
context:
space:
mode:
authorkrasimir <krasimir@chalmers.se>2008-11-26 14:43:05 +0000
committerkrasimir <krasimir@chalmers.se>2008-11-26 14:43:05 +0000
commitd0116c395839cd53dd24cfe1cb26b3f64ddc9430 (patch)
tree74665c6353429f714a973437fb49a7b80a1ac12a /next-lib/src/russian/VerbRus.gf
parent66785b20208f9ea2fca7b6ff3355cd8ce87636c3 (diff)
add Russian in next-lib
Diffstat (limited to 'next-lib/src/russian/VerbRus.gf')
-rw-r--r--next-lib/src/russian/VerbRus.gf289
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{_ => ""}}
+};
+
+}
+