summaryrefslogtreecommitdiff
path: root/next-lib/src
diff options
context:
space:
mode:
authorkrasimir <krasimir@chalmers.se>2008-11-26 21:21:23 +0000
committerkrasimir <krasimir@chalmers.se>2008-11-26 21:21:23 +0000
commitc9c07f8e6897723c5b642c329e81d761cb6a9f70 (patch)
treebbf67746a72fd3015537f6583759a7ea06857a98 /next-lib/src
parentb6c9aedd873348b59e5215572b3540824ec3abef (diff)
initial Slavic grammar, shared between Bulgarian and Russian
Diffstat (limited to 'next-lib/src')
-rw-r--r--next-lib/src/bulgarian/CatBul.gf16
-rw-r--r--next-lib/src/bulgarian/ConjunctionBul.gf2
-rw-r--r--next-lib/src/bulgarian/DiffBul.gf15
-rw-r--r--next-lib/src/bulgarian/LangBul.gf2
-rw-r--r--next-lib/src/bulgarian/MorphoBul.gf11
-rw-r--r--next-lib/src/bulgarian/MorphoFunsBul.gf11
-rw-r--r--next-lib/src/bulgarian/NounBul.gf55
-rw-r--r--next-lib/src/bulgarian/ParadigmsBul.gf282
-rw-r--r--next-lib/src/bulgarian/QuestionBul.gf12
-rw-r--r--next-lib/src/bulgarian/ResBul.gf75
-rw-r--r--next-lib/src/bulgarian/SentenceBul.gf2
-rw-r--r--next-lib/src/bulgarian/StructuralBul.gf4
-rw-r--r--next-lib/src/russian/CatRus.gf6
-rw-r--r--next-lib/src/russian/DiffRus.gf9
-rw-r--r--next-lib/src/russian/LangRus.gf2
-rw-r--r--next-lib/src/russian/NounRus.gf9
-rw-r--r--next-lib/src/russian/ParadigmsRus.gf4
-rw-r--r--next-lib/src/russian/ResRus.gf6
-rw-r--r--next-lib/src/slavic/CatSlavic.gf9
-rw-r--r--next-lib/src/slavic/CommonSlavic.gf6
-rw-r--r--next-lib/src/slavic/DiffSlavic.gf5
-rw-r--r--next-lib/src/slavic/ResSlavic.gf6
22 files changed, 342 insertions, 207 deletions
diff --git a/next-lib/src/bulgarian/CatBul.gf b/next-lib/src/bulgarian/CatBul.gf
index 6888dd511..c089bcbc1 100644
--- a/next-lib/src/bulgarian/CatBul.gf
+++ b/next-lib/src/bulgarian/CatBul.gf
@@ -1,9 +1,7 @@
-concrete CatBul of Cat = open ResBul, Prelude, (R = ParamX) in {
- flags coding=cp1251 ;
-
-
- flags optimize=all_subs ;
+concrete CatBul of Cat = CatSlavic with (ResSlavic = ResBul) ** open Prelude, (R = ParamX) in {
+ flags
+ coding=cp1251; optimize=all_subs;
lincat
@@ -44,7 +42,7 @@ concrete CatBul of Cat = open ResBul, Prelude, (R = ParamX) in {
QCl = {s : ResBul.Tense => Anteriority => Polarity => QForm => Str} ;
IP = {s : Role => QForm => Str; gn : GenNum} ;
IComp = {s : QForm => Str} ;
- IDet = {s : DGender => QForm => Str; n : Number ; nonEmpty : Bool} ;
+ IDet = {s : Gender => Animacy => QForm => Str; n : Number ; nonEmpty : Bool} ;
IQuant = {s : GenNum => QForm => Str} ;
-- Relative
@@ -73,10 +71,9 @@ concrete CatBul of Cat = open ResBul, Prelude, (R = ParamX) in {
-- Noun
- CN = {s : NForm => Str; g : DGender} ;
NP = {s : Role => Str; a : Agr} ;
Pron = {s : Role => Str; gen : AForm => Str; a : Agr} ;
- Det = {s : Bool => DGender => Role => Str; n : Number; countable : Bool; spec : Species} ;
+ Det = {s : Bool => Gender => Animacy => Role => Str; n : Number; countable : Bool; spec : Species} ;
Predet = {s : GenNum => Str} ;
Ord = {s : AForm => Str} ;
Num = {s : DGenderSpecies => Str; n : Number; nonEmpty : Bool} ;
@@ -106,9 +103,6 @@ concrete CatBul of Cat = open ResBul, Prelude, (R = ParamX) in {
A = {s : AForm => Str; adv : Str} ;
A2 = {s : AForm => Str; adv : Str; c2 : Str} ;
- N = {s : NForm => Str; g : DGender} ;
- N2 = {s : NForm => Str; g : DGender} ** {c2 : Preposition} ;
- N3 = {s : NForm => Str; g : DGender} ** {c2,c3 : Preposition} ;
PN = {s : Str; g : Gender} ;
diff --git a/next-lib/src/bulgarian/ConjunctionBul.gf b/next-lib/src/bulgarian/ConjunctionBul.gf
index 23664cd1f..8a1523a02 100644
--- a/next-lib/src/bulgarian/ConjunctionBul.gf
+++ b/next-lib/src/bulgarian/ConjunctionBul.gf
@@ -16,7 +16,7 @@ concrete ConjunctionBul of Conjunction =
ConjNP conj ss = {
s = \\role => (linCoordSep [])!conj.distr!conj.conj++ss.s!conj.distr!conj.conj!role;
- a = {gn = conjGenNum (gennum DMasc conj.n) ss.a.gn; p = ss.a.p}
+ a = {gn = conjGenNum (gennum Masc conj.n) ss.a.gn; p = ss.a.p}
} ;
ConjAP conj ss = {
diff --git a/next-lib/src/bulgarian/DiffBul.gf b/next-lib/src/bulgarian/DiffBul.gf
new file mode 100644
index 000000000..6d94154a5
--- /dev/null
+++ b/next-lib/src/bulgarian/DiffBul.gf
@@ -0,0 +1,15 @@
+instance DiffBul of DiffSlavic = open CommonSlavic, Prelude in {
+
+ param
+ Case = Acc | Dat ;
+
+ Species = Indef | Def ;
+
+ NForm =
+ NF Number Species
+ | NFSgDefNom
+ | NFPlCount
+ | NFVocative
+ ;
+
+} \ No newline at end of file
diff --git a/next-lib/src/bulgarian/LangBul.gf b/next-lib/src/bulgarian/LangBul.gf
index d92b2533a..f0a0bd4f0 100644
--- a/next-lib/src/bulgarian/LangBul.gf
+++ b/next-lib/src/bulgarian/LangBul.gf
@@ -1,4 +1,4 @@
---# -path=.:../abstract:../common:src/prelude
+--# -path=.:../abstract:../common:../slavic
concrete LangBul of Lang =
GrammarBul,
diff --git a/next-lib/src/bulgarian/MorphoBul.gf b/next-lib/src/bulgarian/MorphoBul.gf
index f59d783c8..b2359fac2 100644
--- a/next-lib/src/bulgarian/MorphoBul.gf
+++ b/next-lib/src/bulgarian/MorphoBul.gf
@@ -21,10 +21,10 @@ resource MorphoBul = ResBul ** open
oper
--2 Determiners
- mkDeterminerSg : Str -> Str -> Str -> {s : Bool => DGender => Role => Str; n : Number; countable : Bool ; spec : Species} = \vseki,vsiaka,vsiako ->
- {s = \\_,g,_ => table DGender [vseki;vseki;vsiaka;vsiako] ! g; n = Sg; countable = False; spec = Indef} ;
- mkDeterminerPl : Str -> {s : Bool => DGender => Role => Str ; n : Number; countable : Bool ; spec : Species} = \vsicki ->
- {s = \\_,_,_ => vsicki; sp = \\_,_ => vsicki; n = Pl; countable = False; spec = Indef} ;
+ mkDeterminerSg : Str -> Str -> Str -> {s : Bool => Gender => Animacy => Role => Str; n : Number; countable : Bool ; spec : Species} = \vseki,vsiaka,vsiako ->
+ {s = \\_,g,_,_ => table Gender [vseki;vsiaka;vsiako] ! g; n = Sg; countable = False; spec = Indef} ;
+ mkDeterminerPl : Str -> {s : Bool => Gender => Animacy => Role => Str ; n : Number; countable : Bool ; spec : Species} = \vsicki ->
+ {s = \\_,_,_,_ => vsicki; sp = \\_,_ => vsicki; n = Pl; countable = False; spec = Indef} ;
mkQuant : Str -> Str -> Str -> Str -> {s : Bool => AForm => Str; nonEmpty : Bool; spec : Species} = \tozi,tazi,towa,tezi ->
{ s = \\_ => table {
@@ -105,7 +105,7 @@ oper
--2 Nouns
- mkNoun : Str -> Str -> Str -> Str -> DGender -> N = \sg,pl,count,voc,g -> {
+ mkNoun : Str -> Str -> Str -> Str -> Gender -> Animacy -> N = \sg,pl,count,voc,g,anim -> {
s = table {
NF Sg Indef => sg ;
NF Sg Def => case sg of {
@@ -154,6 +154,7 @@ oper
NFVocative => voc
} ;
g = g ;
+ anim = anim ;
lock_N = <>
} ;
diff --git a/next-lib/src/bulgarian/MorphoFunsBul.gf b/next-lib/src/bulgarian/MorphoFunsBul.gf
index 678479d8e..04962bdac 100644
--- a/next-lib/src/bulgarian/MorphoFunsBul.gf
+++ b/next-lib/src/bulgarian/MorphoFunsBul.gf
@@ -142,7 +142,7 @@ oper
--
prepN2 : N -> Prep -> N2 ;
- prepN2 n p = {s = n.s; g = n.g; c2 = p; lock_N2 = <>} ;
+ prepN2 n p = {s = n.s; g = n.g; anim=n.anim ; c2 = p; lock_N2 = <>} ;
dirN2 : N -> N2 ;
dirN2 n = prepN2 n noPrep ;
@@ -152,7 +152,7 @@ oper
--
prepN3 : N -> Prep -> Prep -> N3 ;
- prepN3 n p q = {s = n.s; g = n.g; c2 = p; c3 = q; lock_N3 = <>} ;
+ prepN3 n p q = {s = n.s; g = n.g; anim=n.anim ; c2 = p; c3 = q; lock_N3 = <>} ;
dirN3 : N -> Prep -> N3 ;
dirN3 n p = prepN3 n noPrep p ;
@@ -160,6 +160,13 @@ oper
dirdirN3 : N -> N3 ;
dirdirN3 n = dirN3 n noPrep ;
+ compoundN = overload {
+ compoundN : Str -> N -> N
+ = \s,n -> {s = \\nform => s ++ n.s ! nform ; g=n.g ; anim=n.anim ; lock_N = <>} ;
+ compoundN : N -> Str -> N
+ = \n,s -> {s = \\nform => s ++ n.s ! nform ; g=n.g ; anim=n.anim ; lock_N = <>} ;
+ } ;
+
--2 Prepositions
--
diff --git a/next-lib/src/bulgarian/NounBul.gf b/next-lib/src/bulgarian/NounBul.gf
index e9206e443..89aa34e69 100644
--- a/next-lib/src/bulgarian/NounBul.gf
+++ b/next-lib/src/bulgarian/NounBul.gf
@@ -22,7 +22,7 @@ concrete NounBul of Noun = CatBul ** open ResBul, Prelude in {
}
}
} ;
- s = det.s ! True ! cn.g ! role ++ cn.s ! nf
+ s = det.s ! True ! cn.g ! cn.anim ! role ++ cn.s ! nf
in case role of {
RObj Dat => "на" ++ s;
_ => s
@@ -31,12 +31,12 @@ concrete NounBul of Noun = CatBul ** open ResBul, Prelude in {
} ;
DetNP det =
- { s = \\role => let s = det.s ! False ! DNeut ! role
+ { s = \\role => let s = det.s ! False ! Neut ! Inanimate ! role
in case role of {
RObj Dat => "на" ++ s;
_ => s
} ;
- a = {gn = gennum DNeut det.n; p = P3} ;
+ a = {gn = gennum Neut det.n; p = P3} ;
} ;
UsePN pn = { s = table {
@@ -63,19 +63,19 @@ concrete NounBul of Noun = CatBul ** open ResBul, Prelude in {
} ;
DetQuant quant num = {
- s = \\sp,g,c => let sp' = case num.nonEmpty of { True => True ;
- False => sp }
- in quant.s ! sp' ! aform (gennum g num.n) (case c of {RVoc=>Indef; _=>Def}) c ++
- num.s ! dgenderSpecies g quant.spec c ;
+ s = \\sp,g,anim,c => let sp' = case num.nonEmpty of { True => True ;
+ False => sp }
+ in quant.s ! sp' ! aform (gennum g num.n) (case c of {RVoc=>Indef; _=>Def}) c ++
+ num.s ! dgenderSpecies g anim quant.spec c ;
n = num.n ;
countable = num.nonEmpty ;
spec = case num.nonEmpty of {True=>Indef; _=>quant.spec}
} ;
DetQuantOrd = \quant, num, ord -> {
- s = \\_,g,c => quant.s ! True ! aform (gennum g num.n) (case c of {RVoc=>Indef; _=>Def}) c ++
- num.s ! dgenderSpecies g quant.spec c ++
- ord.s ! aform (gennum g num.n) (case num.nonEmpty of {True=>Indef; _=>quant.spec}) c ;
+ s = \\_,g,anim,c => quant.s ! True ! aform (gennum g num.n) (case c of {RVoc=>Indef; _=>Def}) c ++
+ num.s ! dgenderSpecies g anim quant.spec c ++
+ ord.s ! aform (gennum g num.n) (case num.nonEmpty of {True=>Indef; _=>quant.spec}) c ;
n = num.n ;
countable = num.nonEmpty ;
spec=Indef
@@ -144,11 +144,21 @@ concrete NounBul of Noun = CatBul ** open ResBul, Prelude in {
UseN noun = noun ;
UseN2 noun = noun ;
- ComplN2 f x = {s = \\nf => f.s ! nf ++ f.c2.s ++ x.s ! RObj f.c2.c; g=f.g} ;
- ComplN3 f x = {s = \\nf => f.s ! nf ++ f.c2.s ++ x.s ! RObj f.c2.c; c2 = f.c3; g=f.g} ;
+ ComplN2 f x = {
+ s = \\nf => f.s ! nf ++ f.c2.s ++ x.s ! RObj f.c2.c ;
+ g=f.g ;
+ anim = f.anim
+ } ;
+
+ ComplN3 f x = {
+ s = \\nf => f.s ! nf ++ f.c2.s ++ x.s ! RObj f.c2.c ;
+ c2 = f.c3 ;
+ g=f.g ;
+ anim = f.anim
+ } ;
- Use2N3 f = {s = f.s ; g=f.g ; c2 = f.c2} ;
- Use3N3 f = {s = f.s ; g=f.g ; c2 = f.c3} ;
+ Use2N3 f = {s = f.s ; g=f.g ; anim=f.anim ; c2 = f.c2} ;
+ Use3N3 f = {s = f.s ; g=f.g ; anim=f.anim ; c2 = f.c3} ;
AdjCN ap cn = {
@@ -156,20 +166,27 @@ concrete NounBul of Noun = CatBul ** open ResBul, Prelude in {
True => (ap.s ! nform2aform nf cn.g) ++ (cn.s ! (indefNForm nf)) ;
False => (cn.s ! nf) ++ (ap.s ! nform2aform (indefNForm nf) cn.g)
} ;
- g = cn.g
+ g = cn.g ;
+ anim = cn.anim
} ;
RelCN cn rs = {
s = \\nf => cn.s ! nf ++ rs.s ! {gn=gennum cn.g (numNForm nf); p=P3} ;
- g = cn.g
+ g = cn.g ;
+ anim = cn.anim
} ;
AdvCN cn ad = {
s = \\nf => cn.s ! nf ++ ad.s ;
- g = cn.g
+ g = cn.g ;
+ anim = cn.anim
} ;
- SentCN cn sc = {s = \\nf => cn.s ! nf ++ sc.s; g=DNeut} ;
+ SentCN cn sc = {s = \\nf => cn.s ! nf ++ sc.s; g=Neut; anim=Inanimate} ;
- ApposCN cn np = {s = \\nf => cn.s ! nf ++ np.s ! RSubj; g=cn.g} ;
+ ApposCN cn np = {
+ s = \\nf => cn.s ! nf ++ np.s ! RSubj;
+ g=cn.g ;
+ anim = cn.anim
+ } ;
RelNP np rs = {
s = \\r => np.s ! r ++ rs.s ! np.a ;
diff --git a/next-lib/src/bulgarian/ParadigmsBul.gf b/next-lib/src/bulgarian/ParadigmsBul.gf
index a22cc6fe9..d1635f295 100644
--- a/next-lib/src/bulgarian/ParadigmsBul.gf
+++ b/next-lib/src/bulgarian/ParadigmsBul.gf
@@ -13,7 +13,8 @@ oper
(v0+"ове")
(v0+"а")
(v0+"-")
- DMasc ;
+ Masc
+ Inanimate ;
mkN002 : Str -> N ;
mkN002 base = let v0 = tk 2 base;
v1 = last (base)
@@ -21,7 +22,8 @@ oper
(v0+"е"+v1+"ове")
(v0+"я"+v1+"а")
(v0+"-")
- DMasc ;
+ Masc
+ Inanimate ;
mkN002a : Str -> N ;
mkN002a base = let v0 = tk 2 base;
v1 = last (base)
@@ -29,7 +31,8 @@ oper
(v0+"е"+v1+"ове")
(v0+"я"+v1+"а")
(v0+"-")
- DMasc ;
+ Masc
+ Inanimate ;
mkN003 : Str -> N ;
mkN003 base = let v0 = tk 3 base;
v1 = last (base)
@@ -37,49 +40,56 @@ oper
(v0+"ър"+v1+"ове")
(v0+"ър"+v1+"а")
(v0+"-")
- DMasc ;
+ Masc
+ Inanimate ;
mkN004 : Str -> N ;
mkN004 base = let v0 = tk 4 base
in mkNoun (v0+"ятър")
(v0+"етрове")
(v0+"ятъра")
(v0+"-")
- DMasc ;
+ Masc
+ Inanimate ;
mkN005 : Str -> N ;
mkN005 base = let v0 = base
in mkNoun (v0)
(v0+"ове")
(v0+"а")
(v0+"-")
- DMasc ;
+ Masc
+ Inanimate ;
mkN006 : Str -> N ;
mkN006 base = let v0 = base
in mkNoun (v0)
(v0+"ове")
(v0+"а")
(v0+"-")
- DMasc ;
+ Masc
+ Inanimate ;
mkN007 : Str -> N ;
mkN007 base = let v0 = base
in mkNoun (v0)
(v0+"и")
(v0+"а")
(v0+"-")
- DMasc ;
+ Masc
+ Inanimate ;
mkN007b : Str -> N ;
mkN007b base = let v0 = base
in mkNoun (v0)
(v0+"и")
(v0+"а")
(v0+"о")
- DMasc ;
+ Masc
+ Inanimate ;
mkN007a : Str -> N ;
mkN007a base = let v0 = base
in mkNoun (v0)
(v0+"и")
(v0+"а")
(v0+"е")
- DMascPersonal ;
+ Masc
+ Animate ;
mkN008 : Str -> N ;
mkN008 base = let v0 = tk 2 base;
v1 = last (base)
@@ -87,14 +97,16 @@ oper
(v0+v1+"и")
(v0+"е"+v1+"а")
(v0+"-")
- DMasc ;
+ Masc
+ Inanimate ;
mkN008a : Str -> N ;
mkN008a base = let v0 = tk 2 base
in mkNoun (v0+"ец")
(v0+"ци")
(v0+"-")
(v0+"ецо")
- DMasc ;
+ Masc
+ Inanimate ;
mkN009 : Str -> N ;
mkN009 base = let v0 = tk 2 base;
v1 = last (base)
@@ -102,84 +114,96 @@ oper
(v0+v1+"и")
(v0+"ъ"+v1+"а")
(v0+"-")
- DMasc ;
+ Masc
+ Inanimate ;
mkN009a : Str -> N ;
mkN009a base = let v0 = tk 2 base
in mkNoun (v0+"ър")
(v0+"рове")
(v0+"ъра")
(v0+"-")
- DMasc ;
+ Masc
+ Inanimate ;
mkN010 : Str -> N ;
mkN010 base = let v0 = tk 2 base
in mkNoun (v0+"ър")
(v0+"ри")
(v0+"ра")
(v0+"-")
- DMasc ;
+ Masc
+ Inanimate ;
mkN011 : Str -> N ;
mkN011 base = let v0 = tk 2 base
in mkNoun (v0+"ъм")
(v0+"ми")
(v0+"ъма")
(v0+"-")
- DMasc ;
+ Masc
+ Inanimate ;
mkN012 : Str -> N ;
mkN012 base = let v0 = tk 3 base
in mkNoun (v0+"рък")
(v0+"ърци")
(v0+"-")
(v0+"ърко")
- DMasc ;
+ Masc
+ Inanimate ;
mkN013 : Str -> N ;
mkN013 base = let v0 = tk 2 base
in mkNoun (v0+"ец")
(v0+"йци")
(v0+"-")
(v0+"ецо")
- DMasc ;
+ Masc
+ Inanimate ;
mkN014 : Str -> N ;
mkN014 base = let v0 = tk 1 base
in mkNoun (v0+"к")
(v0+"ци")
(v0+"ка")
(v0+"-")
- DMasc ;
+ Masc
+ Inanimate ;
mkN014a : Str -> N ;
mkN014a base = let v0 = tk 1 base
in mkNoun (v0+"к")
(v0+"ци")
(v0+"ка")
(v0+"ко")
- DMasc ;
+ Masc
+ Inanimate ;
mkN015 : Str -> N ;
mkN015 base = let v0 = tk 1 base
in mkNoun (v0+"г")
(v0+"зи")
(v0+"га")
(v0+"-")
- DMasc ;
+ Masc
+ Inanimate ;
mkN016 : Str -> N ;
mkN016 base = let v0 = tk 1 base
in mkNoun (v0+"х")
(v0+"си")
(v0+"ха")
(v0+"-")
- DMasc ;
+ Masc
+ Inanimate ;
mkN017 : Str -> N ;
mkN017 base = let v0 = tk 1 base
in mkNoun (v0+"к")
(v0+"ни")
(v0+"ка")
(v0+"-")
- DMasc ;
+ Masc
+ Inanimate ;
mkN018 : Str -> N ;
mkN018 base = let v0 = tk 2 base
in mkNoun (v0+"ин")
(v0+"и")
(v0+"-")
(v0+"ино")
- DMasc ;
+ Masc
+ Inanimate ;
mkN018a : Str -> N ;
mkN018a base = let v0 = tk 2 base;
v1 = last (base)
@@ -187,21 +211,24 @@ oper
(v0+"и")
(v0+"-")
(v0+"-")
- DMasc ;
+ Masc
+ Inanimate ;
mkN019 : Str -> N ;
mkN019 base = let v0 = tk 2 base
in mkNoun (v0+"ък")
(v0+"ци")
(v0+"-")
(v0+"ко")
- DMasc ;
+ Masc
+ Inanimate ;
mkN019a : Str -> N ;
mkN019a base = let v0 = tk 2 base
in mkNoun (v0+"ек")
(v0+"йци")
(v0+"ека")
(v0+"-")
- DMasc ;
+ Masc
+ Inanimate ;
mkN020 : Str -> N ;
mkN020 base = let v0 = tk 3 base;
v1 = last (tk 2 base)
@@ -209,217 +236,248 @@ oper
(v0+"ъ"+v1+"ци")
(v0+"-")
(v0+v1+"ецо")
- DMasc ;
+ Masc
+ Inanimate ;
mkN021 : Str -> N ;
mkN021 base = let v0 = tk 3 base
in mkNoun (v0+"чин")
(v0+"ци")
(v0+"-")
(v0+"чино")
- DMasc ;
+ Masc
+ Inanimate ;
mkN022 : Str -> N ;
mkN022 base = let v0 = base
in mkNoun (v0)
(v0+"а")
(v0+"а")
(v0+"-")
- DMasc ;
+ Masc
+ Inanimate ;
mkN023 : Str -> N ;
mkN023 base = let v0 = tk 2 base
in mkNoun (v0+"ин")
(v0+"а")
(v0+"-")
(v0+"ине")
- DMasc ;
+ Masc
+ Inanimate ;
mkN024a : Str -> N ;
mkN024a base = let v0 = tk 1 base
in mkNoun (v0+"з")
(v0+"зе")
(v0+"-")
(v0+"же")
- DMasc ;
+ Masc
+ Inanimate ;
mkN024 : Str -> N ;
mkN024 base = let v0 = base
in mkNoun (v0)
(v0+"е")
(v0+"е")
(v0+"о")
- DMascPersonal ;
+ Masc
+ Animate ;
mkN025 : Str -> N ;
mkN025 base = let v0 = base
in mkNoun (v0)
(v0+"я")
(v0+"-")
(v0+"е")
- DMascPersonal ;
+ Masc
+ Animate ;
mkN026 : Str -> N ;
mkN026 base = let v0 = base
in mkNoun (v0)
(v0+"илища")
(v0+"а")
(v0+"-")
- DMasc ;
+ Masc
+ Inanimate ;
mkN027 : Str -> N ;
mkN027 base = let v0 = tk 2 base
in mkNoun (v0+"ец")
(v0+"овце")
(v0+"еца")
(v0+"-")
- DMasc ;
+ Masc
+ Inanimate ;
mkN028 : Str -> N ;
mkN028 base = let v0 = tk 1 base
in mkNoun (v0+"й")
(v0+"еве")
(v0+"я")
(v0+"-")
- DMasc ;
+ Masc
+ Inanimate ;
mkN028a : Str -> N ;
mkN028a base = let v0 = tk 1 base
in mkNoun (v0+"й")
(v0+"йове")
(v0+"я")
(v0+"-")
- DMasc ;
+ Masc
+ Inanimate ;
mkN029 : Str -> N ;
mkN029 base = let v0 = base
in mkNoun (v0)
(v0+"ьове")
(v0+"-")
(v0+"ко")
- DMasc ;
+ Masc
+ Inanimate ;
mkN030 : Str -> N ;
mkN030 base = let v0 = tk 2 base
in mkNoun (v0+"ън")
(v0+"ньове")
(v0+"ъня")
(v0+"-")
- DMasc ;
+ Masc
+ Inanimate ;
mkN031 : Str -> N ;
mkN031 base = let v0 = base
in mkNoun (v0)
(v0+"и")
(v0+"я")
(v0+"-")
- DMasc ;
+ Masc
+ Inanimate ;
mkN031a : Str -> N ;
mkN031a base = let v0 = base
in mkNoun (v0)
(v0+"и")
(v0+"я")
(v0+"ю")
- DMascPersonal ;
+ Masc
+ Animate ;
mkN032 : Str -> N ;
mkN032 base = let v0 = tk 1 base
in mkNoun (v0+"й")
(v0+"и")
(v0+"я")
(v0+"-")
- DMasc ;
+ Masc
+ Inanimate ;
mkN032a : Str -> N ;
mkN032a base = let v0 = tk 1 base
in mkNoun (v0+"й")
(v0+"и")
(v0+"я")
(v0+"ю")
- DMascPersonal ;
+ Masc
+ Animate ;
mkN033 : Str -> N ;
mkN033 base = let v0 = tk 2 base
in mkNoun (v0+"ен")
(v0+"ни")
(v0+"ена")
(v0+"-")
- DMasc ;
+ Masc
+ Inanimate ;
mkN034 : Str -> N ;
mkN034 base = let v0 = tk 2 base
in mkNoun (v0+"ът")
(v0+"ти")
(v0+"ътя")
(v0+"-")
- DMasc ;
+ Masc
+ Inanimate ;
mkN035 : Str -> N ;
mkN035 base = let v0 = base
in mkNoun (v0)
(v0+"е")
(v0+"я")
(v0+"-")
- DMasc ;
+ Masc
+ Inanimate ;
mkN035a : Str -> N ;
mkN035a base = let v0 = base
in mkNoun (v0)
(v0+"е")
(v0+"я")
(v0+"ю")
- DMascPersonal ;
+ Masc
+ Animate ;
mkN036 : Str -> N ;
mkN036 base = let v0 = tk 1 base
in mkNoun (v0+"й")
(v0+"ища")
(v0+"я")
(v0+"-")
- DMasc ;
+ Masc
+ Inanimate ;
mkN037 : Str -> N ;
mkN037 base = let v0 = base
in mkNoun (v0)
(v0+"ища")
(v0+"я")
(v0+"-")
- DMasc ;
+ Masc
+ Inanimate ;
mkN038 : Str -> N ;
mkN038 base = let v0 = tk 1 base
in mkNoun (v0+"а")
(v0+"и")
(v0+"-")
(v0+"а")
- DMascPersonal ;
+ Masc
+ Animate ;
mkN039 : Str -> N ;
mkN039 base = let v0 = tk 1 base
in mkNoun (v0+"я")
(v0+"и")
(v0+"-")
(v0+"-")
- DMasc ;
+ Masc
+ Inanimate ;
mkN040 : Str -> N ;
mkN040 base = let v0 = tk 1 base
in mkNoun (v0+"о")
(v0+"овци")
(v0+"-")
(v0+"о")
- DMasc ;
+ Masc
+ Inanimate ;
mkN040a : Str -> N ;
mkN040a base = let v0 = base
in mkNoun (v0)
(v0+"-")
(v0+"-")
(v0+"-")
- DMasc ;
+ Masc
+ Inanimate ;
mkN041 : Str -> N ;
mkN041 base = let v0 = tk 1 base
in mkNoun (v0+"а")
(v0+"и")
(v0+"и")
(v0+"-")
- DFem ;
+ Fem
+ Inanimate ;
mkN041a : Str -> N ;
mkN041a base = let v0 = tk 1 base
in mkNoun (v0+"а")
(v0+"и")
(v0+"и")
(v0+"о")
- DFem ;
+ Fem
+ Inanimate ;
mkN041b : Str -> N ;
mkN041b base = let v0 = tk 1 base
in mkNoun (v0+"а")
(v0+"и")
(v0+"и")
(v0+"е")
- DFem ;
+ Fem
+ Inanimate ;
mkN042 : Str -> N ;
mkN042 base = let v0 = base
in mkNoun (v0)
(v0)
(v0)
(v0+"-")
- DFem ;
+ Fem
+ Inanimate ;
mkN043 : Str -> N ;
mkN043 base = let v0 = tk 3 base;
v1 = last (tk 1 base)
@@ -427,7 +485,8 @@ oper
(v0+"е"+v1+"и")
(v0+"е"+v1+"и")
(v0+"-")
- DFem ;
+ Fem
+ Inanimate ;
mkN043a : Str -> N ;
mkN043a base = let v0 = tk 4 base;
v1 = last (tk 2 base)
@@ -435,56 +494,64 @@ oper
(v0+"е"+v1+"ки")
(v0+"е"+v1+"ки")
(v0+"-")
- DFem ;
+ Fem
+ Inanimate ;
mkN044 : Str -> N ;
mkN044 base = let v0 = tk 1 base
in mkNoun (v0+"а")
(v0+"е")
(v0+"е")
(v0+"-")
- DFem ;
+ Fem
+ Inanimate ;
mkN045 : Str -> N ;
mkN045 base = let v0 = tk 2 base
in mkNoun (v0+"ка")
(v0+"це")
(v0+"це")
(v0+"-")
- DFem ;
+ Fem
+ Inanimate ;
mkN046 : Str -> N ;
mkN046 base = let v0 = tk 2 base
in mkNoun (v0+"га")
(v0+"зе")
(v0+"зе")
(v0+"-")
- DFem ;
+ Fem
+ Inanimate ;
mkN047 : Str -> N ;
mkN047 base = let v0 = tk 1 base
in mkNoun (v0+"я")
(v0+"и")
(v0+"и")
(v0+"-")
- DFem ;
+ Fem
+ Inanimate ;
mkN048 : Str -> N ;
mkN048 base = let v0 = tk 1 base
in mkNoun (v0+"я")
(v0+"е")
(v0+"е")
(v0+"ьо")
- DFem ;
+ Fem
+ Inanimate ;
mkN049 : Str -> N ;
mkN049 base = let v0 = base
in mkNoun (v0)
(v0+"и")
(v0+"и")
(v0+"-")
- DFem ;
+ Fem
+ Inanimate ;
mkN050 : Str -> N ;
mkN050 base = let v0 = tk 2 base
in mkNoun (v0+"ен")
(v0+"ни")
(v0+"ни")
(v0+"-")
- DFem ;
+ Fem
+ Inanimate ;
mkN051 : Str -> N ;
mkN051 base = let v0 = tk 2 base;
v1 = last (base)
@@ -492,21 +559,24 @@ oper
(v0+v1+"и")
(v0+v1+"и")
(v0+"-")
- DFem ;
+ Fem
+ Inanimate ;
mkN052 : Str -> N ;
mkN052 base = let v0 = tk 5 base
in mkNoun (v0+"ялост")
(v0+"ялости")
(v0+"ялости")
(v0+"-")
- DFem ;
+ Fem
+ Inanimate ;
mkN052a : Str -> N ;
mkN052a base = let v0 = tk 6 base
in mkNoun (v0+"ярност")
(v0+"ярности")
(v0+"ярности")
(v0+"-")
- DFem ;
+ Fem
+ Inanimate ;
mkN053 : Str -> N ;
mkN053 base = let v0 = tk 3 base;
v1 = last (base)
@@ -514,28 +584,32 @@ oper
(v0+"ър"+v1+"и")
(v0+"ър"+v1+"и")
(v0+"-")
- DFem ;
+ Fem
+ Inanimate ;
mkN054 : Str -> N ;
mkN054 base = let v0 = tk 1 base
in mkNoun (v0+"о")
(v0+"а")
(v0+"а")
(v0+"о")
- DNeut ;
+ Neut
+ Inanimate ;
mkN055 : Str -> N ;
mkN055 base = let v0 = tk 1 base
in mkNoun (v0+"о")
(v0+"а")
(v0+"а")
(v0+"о")
- DNeut ;
+ Neut
+ Inanimate ;
mkN056 : Str -> N ;
mkN056 base = let v0 = tk 1 base
in mkNoun (v0+"о")
(v0+"а")
(v0+"а")
(v0+"о")
- DNeut ;
+ Neut
+ Inanimate ;
mkN057 : Str -> N ;
mkN057 base = let v0 = tk 3 base;
v1 = last (tk 1 base)
@@ -543,140 +617,160 @@ oper
(v0+"е"+v1+"а")
(v0+"е"+v1+"а")
(v0+"я"+v1+"о")
- DNeut ;
+ Neut
+ Inanimate ;
mkN057a : Str -> N ;
mkN057a base = let v0 = tk 4 base
in mkNoun (v0+"ясто")
(v0+"еста")
(v0+"еста")
(v0+"ясто")
- DNeut ;
+ Neut
+ Inanimate ;
mkN058 : Str -> N ;
mkN058 base = let v0 = tk 3 base
in mkNoun (v0+"яно")
(v0+"ена")
(v0+"ена")
(v0+"яно")
- DNeut ;
+ Neut
+ Inanimate ;
mkN059 : Str -> N ;
mkN059 base = let v0 = tk 1 base
in mkNoun (v0+"о")
(v0+"ене")
(v0+"ене")
(v0+"о")
- DNeut ;
+ Neut
+ Inanimate ;
mkN060 : Str -> N ;
mkN060 base = let v0 = tk 1 base
in mkNoun (v0+"о")
(v0+"еса")
(v0+"еса")
(v0+"о")
- DNeut ;
+ Neut
+ Inanimate ;
mkN061 : Str -> N ;
mkN061 base = let v0 = tk 1 base
in mkNoun (v0+"о")
(v0+"а")
(v0+"а")
(v0+"о")
- DNeut ;
+ Neut
+ Inanimate ;
mkN062 : Str -> N ;
mkN062 base = let v0 = tk 1 base
in mkNoun (v0+"о")
(v0+"и")
(v0+"и")
(v0+"о")
- DNeut ;
+ Neut
+ Inanimate ;
mkN063 : Str -> N ;
mkN063 base = let v0 = tk 2 base
in mkNoun (v0+"ко")
(v0+"чи")
(v0+"чи")
(v0+"ко")
- DNeut ;
+ Neut
+ Inanimate ;
mkN064 : Str -> N ;
mkN064 base = let v0 = tk 2 base
in mkNoun (v0+"хо")
(v0+"ши")
(v0+"ши")
(v0+"хо")
- DNeut ;
+ Neut
+ Inanimate ;
mkN065 : Str -> N ;
mkN065 base = let v0 = base
in mkNoun (v0)
(v0+"та")
(v0+"та")
(v0)
- DNeut ;
+ Neut
+ Inanimate ;
mkN066 : Str -> N ;
mkN066 base = let v0 = tk 1 base
in mkNoun (v0+"е")
(v0+"а")
(v0+"а")
(v0+"е")
- DNeut ;
+ Neut
+ Inanimate ;
mkN067 : Str -> N ;
mkN067 base = let v0 = tk 2 base
in mkNoun (v0+"те")
(v0+"ца")
(v0+"ца")
(v0+"те")
- DNeut ;
+ Neut
+ Inanimate ;
mkN068 : Str -> N ;
mkN068 base = let v0 = tk 1 base
in mkNoun (v0+"е")
(v0+"я")
(v0+"я")
(v0+"е")
- DNeut ;
+ Neut
+ Inanimate ;
mkN069 : Str -> N ;
mkN069 base = let v0 = base
in mkNoun (v0)
(v0+"на")
(v0+"на")
(v0)
- DNeut ;
+ Neut
+ Inanimate ;
mkN070 : Str -> N ;
mkN070 base = let v0 = base
in mkNoun (v0)
(v0+"са")
(v0+"са")
(v0)
- DNeut ;
+ Neut
+ Inanimate ;
mkN071 : Str -> N ;
mkN071 base = let v0 = tk 1 base
in mkNoun (v0+"е")
(v0+"ия")
(v0+"ия")
(v0+"е")
- DNeut ;
+ Neut
+ Inanimate ;
mkN072 : Str -> N ;
mkN072 base = let v0 = tk 1 base
in mkNoun (v0+"е")
(v0+"я")
(v0+"я")
(v0+"е")
- DNeut ;
+ Neut
+ Inanimate ;
mkN073 : Str -> N ;
mkN073 base = let v0 = base
in mkNoun (v0)
(v0+"та")
(v0+"та")
(v0)
- DNeut ;
+ Neut
+ Inanimate ;
mkN074 : Str -> N ;
mkN074 base = let v0 = tk 1 base
in mkNoun (v0+"-")
(v0)
(v0)
(v0+"-")
- DNeut ;
+ Neut
+ Inanimate ;
mkN075 : Str -> N ;
mkN075 base = let v0 = tk 1 base
in mkNoun (v0+"-")
(v0)
(v0)
(v0+"-")
- DNeut ;
+ Neut
+ Inanimate ;
mkA076 : Str -> A ;
mkA076 base = let v0 = base
in mkAdjective (v0)
diff --git a/next-lib/src/bulgarian/QuestionBul.gf b/next-lib/src/bulgarian/QuestionBul.gf
index 9a02bf333..33781a46b 100644
--- a/next-lib/src/bulgarian/QuestionBul.gf
+++ b/next-lib/src/bulgarian/QuestionBul.gf
@@ -41,20 +41,20 @@ concrete QuestionBul of Question = CatBul ** open ResBul, Prelude in {
IdetCN idet cn = {
s = \\_,qform => let nf = case <idet.n, idet.nonEmpty> of {
<Pl,True> => NFPlCount ;
- _ => NF idet.n Indef
+ _ => NF idet.n Indef
}
- in idet.s ! cn.g ! qform ++ cn.s ! nf ;
+ in idet.s ! cn.g ! cn.anim ! qform ++ cn.s ! nf ;
gn = gennum cn.g idet.n
} ;
IdetIP idet = {
- s = \\_ => idet.s ! DNeut ;
- gn = gennum DNeut idet.n
+ s = \\_ => idet.s ! Neut ! Inanimate ;
+ gn = gennum Neut idet.n
} ;
IdetQuant iquant num = {
- s = \\g,qform => iquant.s ! gennum g num.n ! qform ++
- num.s ! dgenderSpecies g Indef RSubj ;
+ s = \\g,anim,qform => iquant.s ! gennum g num.n ! qform ++
+ num.s ! dgenderSpecies g anim Indef RSubj ;
n = num.n ;
nonEmpty = num.nonEmpty
} ;
diff --git a/next-lib/src/bulgarian/ResBul.gf b/next-lib/src/bulgarian/ResBul.gf
index 3e18065d9..263a8dbb2 100644
--- a/next-lib/src/bulgarian/ResBul.gf
+++ b/next-lib/src/bulgarian/ResBul.gf
@@ -7,11 +7,11 @@
-- implement $Test$, it moreover contains regular lexical
-- patterns needed for $Lex$.
-resource ResBul = ParamX ** open Prelude in {
- flags coding=cp1251 ;
+instance ResBul of ResSlavic = ParamX, DiffBul, CommonSlavic ** open Prelude in {
+ flags
+ coding=cp1251 ; optimize=all ;
- flags optimize=all ;
-- Some parameters, such as $Number$, are inherited from $ParamX$.
@@ -21,14 +21,6 @@ resource ResBul = ParamX ** open Prelude in {
param
Role = RSubj | RObj Case | RVoc ;
- Case = Acc | Dat;
-
- NForm =
- NF Number Species
- | NFSgDefNom
- | NFPlCount
- | NFVocative
- ;
GenNum = GSg Gender | GPl ;
@@ -37,11 +29,7 @@ resource ResBul = ParamX ** open Prelude in {
oper
Agr = {gn : GenNum ; p : Person} ;
- param
- Gender = Masc | Fem | Neut ;
-
- Species = Indef | Def ;
-
+ param
-- The plural never makes a gender distinction.
--2 For $Verb$
@@ -79,13 +67,6 @@ resource ResBul = ParamX ** open Prelude in {
;
--2 For $Numeral$
-
- DGender =
- DMasc
- | DMascPersonal
- | DFem
- | DNeut
- ;
DGenderSpecies =
DMascIndef
@@ -120,14 +101,9 @@ resource ResBul = ParamX ** open Prelude in {
p = conjPerson a.p b.p
} ;
- gennum : DGender -> Number -> GenNum = \g,n ->
+ gennum : Gender -> Number -> GenNum = \g,n ->
case n of {
- Sg => GSg (case g of {
- DMasc => Masc ;
- DMascPersonal => Masc ;
- DFem => Fem ;
- DNeut => Neut
- }) ;
+ Sg => GSg g ;
Pl => GPl
} ;
@@ -146,25 +122,30 @@ resource ResBul = ParamX ** open Prelude in {
GPl => APl spec
} ;
- dgenderSpecies : DGender -> Species -> Role -> DGenderSpecies =
- \g,spec,role -> case <g,spec> of {
- <DMasc,Indef> => DMascIndef ;
- <DMasc,Def> => case role of {
- RSubj => DMascDefNom ;
- _ => DMascDef
- } ;
- <DMascPersonal,Indef> => DMascPersonalIndef ;
- <DMascPersonal,Def> => case role of {
- RSubj => DMascPersonalDefNom ;
- _ => DMascPersonalDef
- } ;
- <DFem ,Indef> => DFemIndef ;
- <DFem ,Def> => DFemDef ;
- <DNeut,Indef> => DNeutIndef ;
- <DNeut,Def> => DNeutDef
+ dgenderSpecies : Gender -> Animacy -> Species -> Role -> DGenderSpecies =
+ \g,anim,spec,role ->
+ case <g,spec> of {
+ <Masc,Indef> => case anim of {
+ Inanimate => DMascIndef ;
+ Animate => DMascPersonalIndef
+ } ;
+ <Masc,Def> => case anim of {
+ Inanimate => case role of {
+ RSubj => DMascDefNom ;
+ _ => DMascDef
+ } ;
+ Animate => case role of {
+ RSubj => DMascPersonalDefNom ;
+ _ => DMascPersonalDef
+ }
+ } ;
+ <Fem ,Indef> => DFemIndef ;
+ <Fem ,Def> => DFemDef ;
+ <Neut,Indef> => DNeutIndef ;
+ <Neut,Def> => DNeutDef
} ;
- nform2aform : NForm -> DGender -> AForm
+ nform2aform : NForm -> Gender -> AForm
= \nf,g -> case nf of {
NF n spec => aform (gennum g n) spec (RObj Acc) ;
NFSgDefNom => aform (gennum g Sg) Def RSubj ;
diff --git a/next-lib/src/bulgarian/SentenceBul.gf b/next-lib/src/bulgarian/SentenceBul.gf
index 9966b538d..7c4ae219f 100644
--- a/next-lib/src/bulgarian/SentenceBul.gf
+++ b/next-lib/src/bulgarian/SentenceBul.gf
@@ -68,5 +68,5 @@ concrete SentenceBul of Sentence = CatBul ** open Prelude, ResBul in {
AdvS a s = {s = a.s ++ "," ++ s.s} ;
- RelS s r = {s = s.s ++ "," ++ r.s ! {gn=gennum DNeut Sg; p=P3}} ;
+ RelS s r = {s = s.s ++ "," ++ r.s ! {gn=gennum Neut Sg; p=P3}} ;
}
diff --git a/next-lib/src/bulgarian/StructuralBul.gf b/next-lib/src/bulgarian/StructuralBul.gf
index 4ff725d26..b01b4e6f4 100644
--- a/next-lib/src/bulgarian/StructuralBul.gf
+++ b/next-lib/src/bulgarian/StructuralBul.gf
@@ -28,7 +28,7 @@ concrete StructuralBul of Structural = CatBul **
every_Det = mkDeterminerSg "всеки" "всяка" "всяко";
everything_NP = mkNP "всичко" (GSg Neut) P3 ;
everywhere_Adv = ss "навсякъде" ;
- few_Det = {s = \\_,_,_ => "няколко"; n = Pl; countable = True; spec = Indef} ;
+ few_Det = {s = \\_,_,_,_ => "няколко"; n = Pl; countable = True; spec = Indef} ;
--- first_Ord = ss "first" ; DEPRECATED
for_Prep = mkPrep "за" Acc ;
from_Prep = mkPrep "от" Acc ;
@@ -37,7 +37,7 @@ concrete StructuralBul of Structural = CatBul **
here7to_Adv = ss ["до тук"] ;
here7from_Adv = ss ["от тук"] ;
how_IAdv = mkIAdv "как" ;
- how8many_IDet = {s = \\_ => table QForm ["колко";"колкото"]; n = Pl; nonEmpty = False} ;
+ how8many_IDet = {s = \\_,_ => table QForm ["колко";"колкото"]; n = Pl; nonEmpty = False} ;
if_Subj = ss "ако" ;
in8front_Prep = mkPrep "пред" Acc ;
i_Pron = mkPron "аз" "мен" "ми" "мой" "моя" "моят" "моя" "моята" "мое" "моето" "мои" "моите" (GSg Masc) P1 ;
diff --git a/next-lib/src/russian/CatRus.gf b/next-lib/src/russian/CatRus.gf
index 8b364388e..97c7522ee 100644
--- a/next-lib/src/russian/CatRus.gf
+++ b/next-lib/src/russian/CatRus.gf
@@ -1,6 +1,6 @@
--# -path=.:../abstract:../common:../../prelude
-concrete CatRus of Cat = CommonX ** open ResRus, Prelude in {
+concrete CatRus of Cat = CommonX ** CatSlavic with (ResSlavic = ResRus) ** open ResRus, Prelude, (R = ParamX) in {
flags optimize=all_subs ; coding=utf8 ;
@@ -44,7 +44,6 @@ concrete CatRus of Cat = CommonX ** open ResRus, Prelude in {
-- Noun
- CN = {s : NForm => Str; g : Gender; anim : Animacy} ;
NP = { s : PronForm => Str ; n : Number ; p : Person ;
g: PronGen ; anim : Animacy ; pron: Bool} ;
Pron = { s : PronForm => Str ; n : Number ; p : Person ;
@@ -89,9 +88,6 @@ concrete CatRus of Cat = CommonX ** open ResRus, Prelude in {
A2 = A ** Complement ;
-- Substantives moreover have an inherent gender.
- N = {s : NForm => Str; g : Gender; anim : Animacy} ;
- N2 = {s : NForm => Str; g : Gender; anim : Animacy} ** Complement ;
- N3 = {s : NForm => Str; g : Gender; anim : Animacy} ** Complement ** {s3 : Str; c2: Case} ;
PN = {s : Case => Str ; g : Gender ; anim : Animacy} ;
diff --git a/next-lib/src/russian/DiffRus.gf b/next-lib/src/russian/DiffRus.gf
new file mode 100644
index 000000000..a29690e86
--- /dev/null
+++ b/next-lib/src/russian/DiffRus.gf
@@ -0,0 +1,9 @@
+instance DiffRus of DiffSlavic = open CommonSlavic, Prelude in {
+
+ param
+ PrepKind = PrepOther | PrepVNa;
+ Case = Nom | Gen | Dat | Acc | Inst | Prepos PrepKind ;
+
+ NForm = NF Number Case ;
+
+} \ No newline at end of file
diff --git a/next-lib/src/russian/LangRus.gf b/next-lib/src/russian/LangRus.gf
index c3126dcfe..00a515c58 100644
--- a/next-lib/src/russian/LangRus.gf
+++ b/next-lib/src/russian/LangRus.gf
@@ -1,4 +1,4 @@
---# -path=.:../abstract:../common:prelude
+--# -path=.:../abstract:../common:../slavic:prelude
concrete LangRus of Lang =
GrammarRus,
diff --git a/next-lib/src/russian/NounRus.gf b/next-lib/src/russian/NounRus.gf
index 834f140c1..2e86d33ab 100644
--- a/next-lib/src/russian/NounRus.gf
+++ b/next-lib/src/russian/NounRus.gf
@@ -166,8 +166,8 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in {
ComplN2 f x = {
s = \\nf => case x.pron of {
True => x.s ! (case nf of {NF n c => mkPronForm c No (Poss (gNum f.g n))}) ++ f.s ! nf ;
- False => f.s ! nf ++ f.s2 ++
- x.s ! (case nf of {NF n c => mkPronForm f.c Yes (Poss (gNum f.g n))})
+ False => f.s ! nf ++ f.c2.s ++
+ x.s ! (case nf of {NF n c => mkPronForm f.c2.c Yes (Poss (gNum f.g n))})
};
g = f.g ;
anim = f.anim
@@ -177,11 +177,10 @@ concrete NounRus of Noun = CatRus ** open ResRus, Prelude, MorphoRus in {
-- There application starts by filling the first place.
ComplN3 f x = {
- s = \\nf => f.s ! nf ++ f.s2 ++ x.s ! (PF f.c Yes NonPoss) ;
+ s = \\nf => f.s ! nf ++ f.c2.s ++ x.s ! (PF f.c2.c Yes NonPoss) ;
g = f.g ;
anim = f.anim ;
- s2 = f.s3 ;
- c = f.c2
+ c2 = f.c3 ;
} ;
diff --git a/next-lib/src/russian/ParadigmsRus.gf b/next-lib/src/russian/ParadigmsRus.gf
index 677a92639..17171cfdf 100644
--- a/next-lib/src/russian/ParadigmsRus.gf
+++ b/next-lib/src/russian/ParadigmsRus.gf
@@ -352,11 +352,11 @@ foreign = Foreign; -- +++ MG_UR: added +++
mkN2 : N -> Prep -> N2 = mkFun;
} ;
- mkFun : N -> Prep -> N2 = \f,p -> (UseN f) ** {s2 = p.s ; c = p.c}** {lock_N2 = <>} ;
+ mkFun : N -> Prep -> N2 = \f,p -> UseN f ** {c2 = p ; lock_N2 = <>} ;
nullPrep : Prep = {s = []; c= Gen; lock_Prep=<>} ;
- mkN3 f p r = (UseN f) ** {s2 = p.s ; c=p.c; s3=r.s ; c2=r.c; lock_N3 = <>} ;
+ mkN3 f p2 p3 = (UseN f) ** {c2 = p2; c3 = p3; lock_N3 = <>} ;
mkPN = \ivan, g, anim ->
diff --git a/next-lib/src/russian/ResRus.gf b/next-lib/src/russian/ResRus.gf
index 9203f0bd7..78e6cb81f 100644
--- a/next-lib/src/russian/ResRus.gf
+++ b/next-lib/src/russian/ResRus.gf
@@ -7,7 +7,7 @@
-- implement $Test$, it moreover contains regular lexical
-- patterns needed for $Lex$.
-resource ResRus = ParamX ** open Prelude in {
+instance ResRus of ResSlavic = ParamX, DiffRus, CommonSlavic ** open Prelude in {
flags coding=utf8 ; optimize=all ;
@@ -18,10 +18,6 @@ flags coding=utf8 ; optimize=all ;
-- Some parameters, such as $Number$, are inherited from $ParamX$.
param
- Gender = Masc | Fem | Neut ;
- Case = Nom | Gen | Dat | Acc | Inst | Prepos PrepKind ;
- PrepKind = PrepOther | PrepVNa;
- Animacy = Animate | Inanimate ;
Voice = Act | Pass ;
Aspect = Imperfective | Perfective ;
RusTense = Present | PastRus | Future ;
diff --git a/next-lib/src/slavic/CatSlavic.gf b/next-lib/src/slavic/CatSlavic.gf
new file mode 100644
index 000000000..f757a6044
--- /dev/null
+++ b/next-lib/src/slavic/CatSlavic.gf
@@ -0,0 +1,9 @@
+incomplete concrete CatSlavic of Cat = open Prelude, CommonSlavic, ResSlavic in {
+
+lincat
+ CN = {s : NForm => Str; g : Gender; anim : Animacy} ;
+
+ N = {s : NForm => Str; g : Gender; anim : Animacy} ;
+ N2 = {s : NForm => Str; g : Gender; anim : Animacy} ** {c2 : Preposition} ;
+ N3 = {s : NForm => Str; g : Gender; anim : Animacy} ** {c2,c3 : Preposition} ;
+} \ No newline at end of file
diff --git a/next-lib/src/slavic/CommonSlavic.gf b/next-lib/src/slavic/CommonSlavic.gf
new file mode 100644
index 000000000..d65c3d090
--- /dev/null
+++ b/next-lib/src/slavic/CommonSlavic.gf
@@ -0,0 +1,6 @@
+resource CommonSlavic = ParamX ** open Prelude in {
+
+param
+ Gender = Masc | Fem | Neut ;
+ Animacy = Animate | Inanimate ;
+}
diff --git a/next-lib/src/slavic/DiffSlavic.gf b/next-lib/src/slavic/DiffSlavic.gf
new file mode 100644
index 000000000..77728ad1b
--- /dev/null
+++ b/next-lib/src/slavic/DiffSlavic.gf
@@ -0,0 +1,5 @@
+interface DiffSlavic = open Prelude in {
+
+ param NForm ;
+
+} \ No newline at end of file
diff --git a/next-lib/src/slavic/ResSlavic.gf b/next-lib/src/slavic/ResSlavic.gf
new file mode 100644
index 000000000..1f86fbde5
--- /dev/null
+++ b/next-lib/src/slavic/ResSlavic.gf
@@ -0,0 +1,6 @@
+interface ResSlavic = DiffSlavic ** open CommonSlavic, Prelude in {
+
+oper
+ Preposition : Type = {s : Str; c : Case};
+
+}