mirror of
https://github.com/GrammaticalFramework/gf-rgl.git
synced 2026-05-27 17:08:54 -06:00
additions by Codex
This commit is contained in:
@@ -6,7 +6,7 @@ concrete AdverbMkd of Adverb = CatMkd ** open Prelude,ResMkd in {
|
|||||||
lin ComparAdvAdjS c a s = {s = c.s
|
lin ComparAdvAdjS c a s = {s = c.s
|
||||||
++ a.s ! Indef ! GSg Masc ++ s.s} ;
|
++ a.s ! Indef ! GSg Masc ++ s.s} ;
|
||||||
lin PositAdAAdj a = {s = a.s ! Indef ! GSg Masc} ;
|
lin PositAdAAdj a = {s = a.s ! Indef ! GSg Masc} ;
|
||||||
lin PositAdvAdj a = {s = a.s ! Indef ! GSg Masc} ;
|
lin PositAdvAdj a = {s = a.adverb} ;
|
||||||
lin PrepNP p np = {s = p.s ++ np.s ! RPrep} ;
|
lin PrepNP p np = {s = p.s ++ np.s ! RPrep} ;
|
||||||
lin SubjS s s2 = {s = s.s ++ s2.s} ;
|
lin SubjS s s2 = {s = s.s ++ s2.s} ;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,21 @@
|
|||||||
--# -path=.:../abstract:../common:prelude
|
--# -path=.:../abstract:../common:prelude
|
||||||
concrete ExtendMkd of Extend = CatMkd ** open ResMkd, ParadigmsMkd, StructuralMkd in {
|
concrete ExtendMkd of Extend = CatMkd ** open Predef, ResMkd, ParadigmsMkd, StructuralMkd, GrammarMkd, Prelude in {
|
||||||
|
|
||||||
|
lincat
|
||||||
|
VPS = {s : Agr => Str} ;
|
||||||
|
[VPS] = {s : Agr => Ints 4 => Str} ;
|
||||||
|
VPI = {s : Agr => Str} ;
|
||||||
|
[VPI] = {s : Agr => Ints 4 => Str} ;
|
||||||
|
[Comp] = {s : GenNum => Ints 4 => Str} ;
|
||||||
|
[Imp] = {s : Polarity => GenNum => Ints 4 => Str} ;
|
||||||
|
RNP = {s : Agr => Role => Str; a : Agr; isPron : Bool} ;
|
||||||
|
RNPList = {s : Agr => Ints 4 => Role => Str; a : Agr} ;
|
||||||
|
|
||||||
lin
|
lin
|
||||||
|
GenModNP num np cn = DetCN (DetQuant DefArt num) (PossNP cn np) ;
|
||||||
|
|
||||||
|
EmptyRelSlash slash = RelSlash IdRP slash ;
|
||||||
|
|
||||||
CompoundN n1 n2 =
|
CompoundN n1 n2 =
|
||||||
let comp : Species => Number => Str
|
let comp : Species => Number => Str
|
||||||
= \\sp,n => case n1.relType of {
|
= \\sp,n => case n1.relType of {
|
||||||
@@ -23,6 +37,321 @@ lin
|
|||||||
g = n2.g
|
g = n2.g
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
CompoundAP n a = AdvAP (PositA a) (PrepNP (mkPrep "од") (MassNP (UseN n))) ;
|
||||||
|
|
||||||
|
PositAdVAdj a = {s = a.adverb} ;
|
||||||
|
|
||||||
|
PresPartAP vp = {
|
||||||
|
s = \\_,gn => "што" ++
|
||||||
|
vp.present ! Imperfective ! genNum2num gn ! P3 ++
|
||||||
|
vp.compl ! {g = gn; p = P3} ;
|
||||||
|
isPre = False
|
||||||
|
} ;
|
||||||
|
|
||||||
|
PastPartAP vps = {
|
||||||
|
s = \\_,gn => vps.participle.adjectival ! Perfective ++
|
||||||
|
vps.compl ! {g = gn; p = P3} ;
|
||||||
|
isPre = False
|
||||||
|
} ;
|
||||||
|
|
||||||
|
PastPartAgentAP vps np = {
|
||||||
|
s = \\_,gn => vps.participle.adjectival ! Perfective ++
|
||||||
|
vps.compl ! {g = gn; p = P3} ++
|
||||||
|
"од" ++ np.s ! RPrep ;
|
||||||
|
isPre = False
|
||||||
|
} ;
|
||||||
|
|
||||||
|
PassVPSlash vps = {
|
||||||
|
present = \\_ => auxBe.present ;
|
||||||
|
aorist = auxBe.imperfect ;
|
||||||
|
imperfect = \\_ => auxBe.imperfect ;
|
||||||
|
imperative = \\_ => auxBe.imperative ;
|
||||||
|
participle = {aorist = \\_ => auxBe.participle.aorist ;
|
||||||
|
imperfect = \\_ => auxBe.participle.imperfect ;
|
||||||
|
perfect = \\_ => nonExist ;
|
||||||
|
adjectival = \\_ => nonExist ;
|
||||||
|
adverbial = nonExist} ;
|
||||||
|
noun_from_verb = nonExist ;
|
||||||
|
compl = \\agr => vps.participle.adjectival ! Perfective ++ vps.compl ! agr ;
|
||||||
|
vtype = VNormal
|
||||||
|
} ;
|
||||||
|
|
||||||
|
PassAgentVPSlash vps np = {
|
||||||
|
present = \\_ => auxBe.present ;
|
||||||
|
aorist = auxBe.imperfect ;
|
||||||
|
imperfect = \\_ => auxBe.imperfect ;
|
||||||
|
imperative = \\_ => auxBe.imperative ;
|
||||||
|
participle = {aorist = \\_ => auxBe.participle.aorist ;
|
||||||
|
imperfect = \\_ => auxBe.participle.imperfect ;
|
||||||
|
perfect = \\_ => nonExist ;
|
||||||
|
adjectival = \\_ => nonExist ;
|
||||||
|
adverbial = nonExist} ;
|
||||||
|
noun_from_verb = nonExist ;
|
||||||
|
compl = \\agr => vps.participle.adjectival ! Perfective ++ vps.compl ! agr ++
|
||||||
|
"од" ++ np.s ! RPrep ;
|
||||||
|
vtype = VNormal
|
||||||
|
} ;
|
||||||
|
|
||||||
|
ProgrVPSlash vps = vps ** {
|
||||||
|
present = \\_,n,p => vps.present ! Imperfective ! n ! p ;
|
||||||
|
imperfect = \\_,n,p => vps.imperfect ! Imperfective ! n ! p ;
|
||||||
|
imperative = \\_,n => vps.imperative ! Imperfective ! n
|
||||||
|
} ;
|
||||||
|
|
||||||
|
GerundCN vp =
|
||||||
|
let refl : Str = case vp.vtype of {
|
||||||
|
VNormal => [] ;
|
||||||
|
VMedial Acc => "се" ;
|
||||||
|
VMedial Dat => "си"
|
||||||
|
}
|
||||||
|
in {
|
||||||
|
s = \\sp,num => case <sp,num> of {
|
||||||
|
<Indef,Sg> => vp.noun_from_verb ;
|
||||||
|
<Indef,Pl> => vp.noun_from_verb ++ BIND ++ "а" ;
|
||||||
|
<Def Unspecified,Sg> => vp.noun_from_verb ++ BIND ++ "то" ;
|
||||||
|
<Def Unspecified,Pl> => vp.noun_from_verb ++ BIND ++ "та" ;
|
||||||
|
<Def Proximal,Sg> => vp.noun_from_verb ++ BIND ++ "во" ;
|
||||||
|
<Def Proximal,Pl> => vp.noun_from_verb ++ BIND ++ "ва" ;
|
||||||
|
<Def Distal,Sg> => vp.noun_from_verb ++ BIND ++ "но" ;
|
||||||
|
<Def Distal,Pl> => vp.noun_from_verb ++ BIND ++ "на"
|
||||||
|
} ++ refl ++
|
||||||
|
vp.compl ! {g = GSg Neuter; p = P3} ;
|
||||||
|
count_form = vp.noun_from_verb ++ BIND ++ "а" ++ refl ++
|
||||||
|
vp.compl ! {g = GSg Neuter; p = P3} ;
|
||||||
|
vocative = \\num => vp.noun_from_verb ++ refl ++
|
||||||
|
vp.compl ! {g = GSg Neuter; p = P3} ;
|
||||||
|
g = Neuter
|
||||||
|
} ;
|
||||||
|
|
||||||
|
GerundNP vp = MassNP (GerundCN vp) ;
|
||||||
|
|
||||||
|
GerundAdv vp =
|
||||||
|
let refl : Str = case vp.vtype of {
|
||||||
|
VNormal => [] ;
|
||||||
|
VMedial Acc => "се" ;
|
||||||
|
VMedial Dat => "си"
|
||||||
|
}
|
||||||
|
in {s = vp.participle.adverbial ++ refl ++
|
||||||
|
vp.compl ! {g = GSg Neuter; p = P3}} ;
|
||||||
|
|
||||||
|
ByVP vp = {s = "со" ++ vp.noun_from_verb ++ BIND ++ "то" ++
|
||||||
|
vp.compl ! {g = GSg Neuter; p = P3}} ;
|
||||||
|
WithoutVP vp = {s = "без" ++ vp.noun_from_verb ++ BIND ++ "то" ++
|
||||||
|
vp.compl ! {g = GSg Neuter; p = P3}} ;
|
||||||
|
InOrderToVP vp = {s = "за да" ++ vp.present ! Perfective ! Sg ! P3 ++
|
||||||
|
vp.compl ! {g = GSg Masc; p = P3}} ;
|
||||||
|
|
||||||
|
ComplBareVS vs s = vs ** {compl = \\_ => s.s} ;
|
||||||
|
ComplSlashPartLast = ComplSlash ;
|
||||||
|
|
||||||
|
UttVPShort vp = {
|
||||||
|
s = vp.imperative ! Perfective ! Sg ++ vp.compl ! {g = GSg Masc; p = P2}
|
||||||
|
} ;
|
||||||
|
|
||||||
|
BaseVPS x y = {s = \\a => table {4 => y.s ! a; _ => x.s ! a}} ;
|
||||||
|
ConsVPS x xs = {
|
||||||
|
s = \\a => table {
|
||||||
|
4 => xs.s ! a ! 4 ;
|
||||||
|
i => x.s ! a ++ linCoord "," ! i ++ xs.s ! a ! i
|
||||||
|
}
|
||||||
|
} ;
|
||||||
|
MkVPS t p vp = {
|
||||||
|
s = \\agr => t.s ++ p.s ++ mkClause [] agr vp ! Main ! t.t ! t.a ! p.p
|
||||||
|
} ;
|
||||||
|
ConjVPS conj vps = {
|
||||||
|
s = \\agr => linCoord [] ! conj.sep ++
|
||||||
|
vps.s ! agr ! conj.sep ++ conj.s ++ vps.s ! agr ! 4
|
||||||
|
} ;
|
||||||
|
PredVPS np vps = {s = np.s ! RSubj ++ vps.s ! np.a} ;
|
||||||
|
|
||||||
|
BaseVPI x y = {s = \\a => table {4 => y.s ! a; _ => x.s ! a}} ;
|
||||||
|
ConsVPI x xs = {
|
||||||
|
s = \\a => table {
|
||||||
|
4 => xs.s ! a ! 4 ;
|
||||||
|
i => x.s ! a ++ linCoord "," ! i ++ xs.s ! a ! i
|
||||||
|
}
|
||||||
|
} ;
|
||||||
|
MkVPI vp = {
|
||||||
|
s = \\agr => "да" ++ vp.present ! Perfective ! genNum2num agr.g ! agr.p ++ vp.compl ! agr
|
||||||
|
} ;
|
||||||
|
ConjVPI conj vpi = {
|
||||||
|
s = \\agr => linCoord [] ! conj.sep ++
|
||||||
|
vpi.s ! agr ! conj.sep ++ conj.s ++ vpi.s ! agr ! 4
|
||||||
|
} ;
|
||||||
|
ComplVPIVV vv vpi = vv ** {
|
||||||
|
compl = \\agr => vpi.s ! agr
|
||||||
|
} ;
|
||||||
|
|
||||||
|
BaseComp x y = {
|
||||||
|
s = \\gn => table {4 => y.s ! gn; _ => x.s ! gn}
|
||||||
|
} ;
|
||||||
|
ConsComp x xs = {
|
||||||
|
s = \\gn => table {
|
||||||
|
4 => xs.s ! gn ! 4 ;
|
||||||
|
i => x.s ! gn ++ linCoord "," ! i ++ xs.s ! gn ! i
|
||||||
|
}
|
||||||
|
} ;
|
||||||
|
ConjComp conj comps = {
|
||||||
|
s = \\gn => linCoord [] ! conj.sep ++
|
||||||
|
comps.s ! gn ! conj.sep ++ conj.s ++ comps.s ! gn ! 4
|
||||||
|
} ;
|
||||||
|
|
||||||
|
BaseImp x y = {
|
||||||
|
s = \\p,gn => table {4 => y.s ! p ! gn; _ => x.s ! p ! gn}
|
||||||
|
} ;
|
||||||
|
ConsImp x xs = {
|
||||||
|
s = \\p,gn => table {
|
||||||
|
4 => xs.s ! p ! gn ! 4 ;
|
||||||
|
i => x.s ! p ! gn ++ linCoord "," ! i ++ xs.s ! p ! gn ! i
|
||||||
|
}
|
||||||
|
} ;
|
||||||
|
ConjImp conj imps = {
|
||||||
|
s = \\p,gn => linCoord [] ! conj.sep ++
|
||||||
|
imps.s ! p ! gn ! conj.sep ++ conj.s ++ imps.s ! p ! gn ! 4
|
||||||
|
} ;
|
||||||
|
|
||||||
|
ReflRNP slash rnp =
|
||||||
|
slash ** {
|
||||||
|
compl = \\agr =>
|
||||||
|
slash.compl ! agr ++
|
||||||
|
case <rnp.isPron,slash.c2.c> of {
|
||||||
|
<True,Acc> => [] ;
|
||||||
|
<True,Dat> => [] ;
|
||||||
|
_ => slash.c2.s ++ rnp.s ! agr ! RObj slash.c2.c
|
||||||
|
} ;
|
||||||
|
vtype = case <rnp.isPron,slash.c2.c> of {
|
||||||
|
<True,Acc> => VMedial Acc ;
|
||||||
|
<True,Dat> => VMedial Dat ;
|
||||||
|
_ => slash.vtype
|
||||||
|
}
|
||||||
|
} ;
|
||||||
|
|
||||||
|
ReflPron = {
|
||||||
|
s = \\_,role => case role of {
|
||||||
|
RObj Acc => "себе" ;
|
||||||
|
RObj Dat => "себе" ;
|
||||||
|
_ => "себе"
|
||||||
|
} ;
|
||||||
|
a = {g = GSg Masc; p = P3} ;
|
||||||
|
isPron = True
|
||||||
|
} ;
|
||||||
|
|
||||||
|
ReflPoss num cn =
|
||||||
|
let np : NP = DetCN (DetQuant ReflPossPron num) cn
|
||||||
|
in {
|
||||||
|
s = \\_,role => np.s ! role ;
|
||||||
|
a = np.a ;
|
||||||
|
isPron = False
|
||||||
|
} ;
|
||||||
|
|
||||||
|
PredetRNP pred rnp = rnp ** {
|
||||||
|
s = \\agr,role => pred.s ++ rnp.s ! agr ! role ;
|
||||||
|
isPron = False
|
||||||
|
} ;
|
||||||
|
|
||||||
|
AdvRNP np prep rnp = {
|
||||||
|
s = \\agr,role => np.s ! role ++ prep.s ++ rnp.s ! agr ! RObj prep.c ;
|
||||||
|
a = np.a ;
|
||||||
|
isPron = False
|
||||||
|
} ;
|
||||||
|
|
||||||
|
AdvRVP vp prep rnp = vp ** {
|
||||||
|
compl = \\agr => vp.compl ! agr ++ prep.s ++ rnp.s ! agr ! RObj prep.c
|
||||||
|
} ;
|
||||||
|
|
||||||
|
AdvRAP ap prep rnp = {
|
||||||
|
s = \\sp,gn => ap.s ! sp ! gn ++ prep.s ++
|
||||||
|
rnp.s ! {g = gn; p = P3} ! RObj prep.c ;
|
||||||
|
isPre = False
|
||||||
|
} ;
|
||||||
|
|
||||||
|
ReflA2RNP a2 rnp = {
|
||||||
|
s = \\sp,gn => a2.s ! sp ! gn ++ a2.c2.s ++
|
||||||
|
rnp.s ! {g = gn; p = P3} ! RObj a2.c2.c ;
|
||||||
|
isPre = False
|
||||||
|
} ;
|
||||||
|
|
||||||
|
PossPronRNP pron num cn rnp =
|
||||||
|
let det : Det = DetQuant (PossPron pron) num ;
|
||||||
|
n : Number = nnum2num num.n
|
||||||
|
in {
|
||||||
|
s = \\_ => det.s ! cn.g ++ cn.s ! det.sp ! n ++
|
||||||
|
"на" ++ rnp.s ! pron.a ! RObj Acc ;
|
||||||
|
vocative = det.s ! cn.g ++ cn.vocative ! n ++
|
||||||
|
"на" ++ rnp.s ! pron.a ! RObj Acc ;
|
||||||
|
a = {g = genNum cn.g n; p = P3}
|
||||||
|
} ;
|
||||||
|
|
||||||
|
ApposNP np1 np2 = {
|
||||||
|
s = \\role => np1.s ! role ++ SOFT_BIND ++ "," ++ np2.s ! role ;
|
||||||
|
vocative = np1.vocative ++ SOFT_BIND ++ "," ++ np2.vocative ;
|
||||||
|
a = np1.a
|
||||||
|
} ;
|
||||||
|
|
||||||
|
Base_rr_RNP x y = {
|
||||||
|
s = \\agr => table {4 => y.s ! agr; _ => x.s ! agr} ;
|
||||||
|
a = y.a
|
||||||
|
} ;
|
||||||
|
Base_nr_RNP x y = {
|
||||||
|
s = \\agr => table {4 => y.s ! agr; _ => x.s} ;
|
||||||
|
a = y.a
|
||||||
|
} ;
|
||||||
|
Base_rn_RNP x y = {
|
||||||
|
s = \\agr => table {4 => y.s; _ => x.s ! agr} ;
|
||||||
|
a = y.a
|
||||||
|
} ;
|
||||||
|
Cons_rr_RNP x xs = {
|
||||||
|
s = \\agr => table {
|
||||||
|
4 => xs.s ! agr ! 4 ;
|
||||||
|
i => \\role => x.s ! agr ! role ++ linCoord "," ! i ++ xs.s ! agr ! i ! role
|
||||||
|
} ;
|
||||||
|
a = xs.a
|
||||||
|
} ;
|
||||||
|
Cons_nr_RNP x xs = {
|
||||||
|
s = \\agr => table {
|
||||||
|
4 => xs.s ! agr ! 4 ;
|
||||||
|
i => \\role => x.s ! role ++ linCoord "," ! i ++ xs.s ! agr ! i ! role
|
||||||
|
} ;
|
||||||
|
a = xs.a
|
||||||
|
} ;
|
||||||
|
ConjRNP conj xs = {
|
||||||
|
s = \\agr,role => linCoord [] ! conj.sep ++
|
||||||
|
xs.s ! agr ! conj.sep ! role ++ conj.s ++
|
||||||
|
xs.s ! agr ! 4 ! role ;
|
||||||
|
a = xs.a ;
|
||||||
|
isPron = False
|
||||||
|
} ;
|
||||||
|
|
||||||
|
ReflPossPron = {
|
||||||
|
s = table {
|
||||||
|
GSg Masc => "својот" ;
|
||||||
|
GSg Fem => "својата" ;
|
||||||
|
GSg Neuter => "своето" ;
|
||||||
|
GPl => "своите"
|
||||||
|
} ;
|
||||||
|
sp = Indef
|
||||||
|
} ;
|
||||||
|
|
||||||
|
UseDAP dap = {
|
||||||
|
s = \\_ => dap.s ! Neuter ;
|
||||||
|
vocative = dap.s ! Neuter ;
|
||||||
|
a = {g = genNum Neuter (nnum2num dap.n); p = P3}
|
||||||
|
} ;
|
||||||
|
UseDAPMasc dap = {
|
||||||
|
s = \\_ => dap.s ! Masc ;
|
||||||
|
vocative = dap.s ! Masc ;
|
||||||
|
a = {g = genNum Masc (nnum2num dap.n); p = P3}
|
||||||
|
} ;
|
||||||
|
UseDAPFem dap = {
|
||||||
|
s = \\_ => dap.s ! Fem ;
|
||||||
|
vocative = dap.s ! Fem ;
|
||||||
|
a = {g = genNum Fem (nnum2num dap.n); p = P3}
|
||||||
|
} ;
|
||||||
|
|
||||||
|
UseComp_estar = UseComp ;
|
||||||
|
UseComp_ser = UseComp ;
|
||||||
|
ProDrop pro = pro ;
|
||||||
|
|
||||||
iFem_Pron = mkPron "јас" "мене" "ме" "мене" "ми" "мене" "мој" "мојот" "моја" "мојата" "мое" "моето" "мои" "моите" "ми" (GSg Fem) P1 ;
|
iFem_Pron = mkPron "јас" "мене" "ме" "мене" "ми" "мене" "мој" "мојот" "моја" "мојата" "мое" "моето" "мои" "моите" "ми" (GSg Fem) P1 ;
|
||||||
youFem_Pron = mkPron "ти" "тебе" "те" "тебе" "ти" "тебе" "твој" "твојот" "твоја" "твојата" "твое" "твоето" "твои" "твоите" "ти" (GSg Fem) P2 ;
|
youFem_Pron = mkPron "ти" "тебе" "те" "тебе" "ти" "тебе" "твој" "твојот" "твоја" "твојата" "твое" "твоето" "твои" "твоите" "ти" (GSg Fem) P2 ;
|
||||||
weFem_Pron = we_Pron ;
|
weFem_Pron = we_Pron ;
|
||||||
@@ -35,4 +364,3 @@ lin
|
|||||||
lin TPastSimple = {s = []} ** {t = VPastSimple} ; --# notpresent
|
lin TPastSimple = {s = []} ** {t = VPastSimple} ; --# notpresent
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -919,7 +919,7 @@ mkN028 base =
|
|||||||
} ;
|
} ;
|
||||||
rel = \\_,_ => base_1 ;
|
rel = \\_,_ => base_1 ;
|
||||||
relType = Pref ;
|
relType = Pref ;
|
||||||
g = Masc
|
g = Neuter
|
||||||
};
|
};
|
||||||
_ => error "Can't apply paradigm mkN028"
|
_ => error "Can't apply paradigm mkN028"
|
||||||
} ;
|
} ;
|
||||||
|
|||||||
@@ -29,6 +29,10 @@ concrete NumeralMkd of Numeral = CatMkd [Numeral,Digits,Decimal] ** open Prelude
|
|||||||
lin PosDecimal ds = ds ** {hasDot = False} ;
|
lin PosDecimal ds = ds ** {hasDot = False} ;
|
||||||
lincat Sub10 = {s : Str; hundred : Str; n : Number} ;
|
lincat Sub10 = {s : Str; hundred : Str; n : Number} ;
|
||||||
lincat Sub100 = {s : Str; n : Number} ;
|
lincat Sub100 = {s : Str; n : Number} ;
|
||||||
|
lincat Sub1000 = {s : Str; n : Number} ;
|
||||||
|
lincat Sub1000000 = {s : Str; n : Number} ;
|
||||||
|
lincat Sub1000000000 = {s : Str; n : Number} ;
|
||||||
|
lincat Sub1000000000000 = {s : Str; n : Number} ;
|
||||||
oper mkDig : Str -> Number -> {s : Str; n : Number}
|
oper mkDig : Str -> Number -> {s : Str; n : Number}
|
||||||
= \s,n -> {s = s; n = n} ;
|
= \s,n -> {s = s; n = n} ;
|
||||||
oper mkDigit : Str -> Str -> Str -> Str -> {s : Str; teen : Str;
|
oper mkDigit : Str -> Str -> Str -> Str -> {s : Str; teen : Str;
|
||||||
@@ -49,9 +53,30 @@ concrete NumeralMkd of Numeral = CatMkd [Numeral,Digits,Decimal] ** open Prelude
|
|||||||
lin pot1 n = {s = n.ten; n = Pl} ;
|
lin pot1 n = {s = n.ten; n = Pl} ;
|
||||||
lin pot110 = {s = "десет"; n = Pl} ;
|
lin pot110 = {s = "десет"; n = Pl} ;
|
||||||
lin pot111 = {s = "единаесет"; n = Pl} ;
|
lin pot111 = {s = "единаесет"; n = Pl} ;
|
||||||
|
lin pot1to19 d = {s = d.teen; n = Pl} ;
|
||||||
lin pot1as2 n = n ;
|
lin pot1as2 n = n ;
|
||||||
lin pot2 n = {s = n.hundred} ;
|
lin pot1plus d n = {s = d.ten ++ "и" ++ n.s; n = Pl} ;
|
||||||
|
lin pot2 n = {s = n.hundred; n = Pl} ;
|
||||||
|
lin pot21 = {s = "сто"; n = Pl} ;
|
||||||
|
lin pot2plus n m = {s = n.hundred ++ "и" ++ m.s; n = Pl} ;
|
||||||
lin pot2as3 n = n ;
|
lin pot2as3 n = n ;
|
||||||
|
lin pot31 = {s = "илјада"; n = Pl} ;
|
||||||
|
lin pot3 n = {s = n.s ++ thousand ! n.n; n = Pl} ;
|
||||||
|
lin pot3plus n m = {s = n.s ++ thousand ! n.n ++ m.s; n = Pl} ;
|
||||||
|
lin pot3decimal d = {s = d.s ++ "илјади"; n = Pl} ;
|
||||||
lin pot3as4 n = n ;
|
lin pot3as4 n = n ;
|
||||||
|
lin pot41 = {s = "милион"; n = Sg} ;
|
||||||
|
lin pot4 n = {s = n.s ++ million ! n.n; n = Pl} ;
|
||||||
|
lin pot4plus n m = {s = n.s ++ million ! n.n ++ m.s; n = Pl} ;
|
||||||
|
lin pot4decimal d = {s = d.s ++ "милиони"; n = Pl} ;
|
||||||
lin pot4as5 n = n ;
|
lin pot4as5 n = n ;
|
||||||
|
lin pot51 = {s = "милијарда"; n = Sg} ;
|
||||||
|
lin pot5 n = {s = n.s ++ billion ! n.n; n = Pl} ;
|
||||||
|
lin pot5plus n m = {s = n.s ++ billion ! n.n ++ m.s; n = Pl} ;
|
||||||
|
lin pot5decimal d = {s = d.s ++ "милијарди"; n = Pl} ;
|
||||||
|
|
||||||
|
oper
|
||||||
|
thousand : Number => Str = table {Sg => "илјада"; Pl => "илјади"} ;
|
||||||
|
million : Number => Str = table {Sg => "милион"; Pl => "милиони"} ;
|
||||||
|
billion : Number => Str = table {Sg => "милијарда"; Pl => "милијарди"} ;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -319,9 +319,9 @@ mkClause : Str -> Agr -> Verb ** {compl : Agr => Str} -> Order => Tense => Anter
|
|||||||
Neg => "не"
|
Neg => "не"
|
||||||
} ;
|
} ;
|
||||||
fut = case <p,o> of {
|
fut = case <p,o> of {
|
||||||
<Pos,Main> => <"ке",[]> ;
|
<Pos,Main> => <"ќе",[]> ;
|
||||||
<Neg,Main> => <"нема да",[]> ;
|
<Neg,Main> => <"нема да",[]> ;
|
||||||
<Pos,Quest> => <"ке","ли"> ;
|
<Pos,Quest> => <"ќе","ли"> ;
|
||||||
<Neg,Quest> => <"нема ли да",[]>
|
<Neg,Quest> => <"нема ли да",[]>
|
||||||
} ;
|
} ;
|
||||||
li = case o of {
|
li = case o of {
|
||||||
|
|||||||
Reference in New Issue
Block a user