smarter smart paradigms for Slovenian

This commit is contained in:
krasimir
2016-12-14 22:46:43 +00:00
parent 74e4f58b9c
commit c14cc5dada

View File

@@ -1,4 +1,4 @@
resource ParadigmsSlv = open CatSlv, ResSlv, Prelude in { resource ParadigmsSlv = open CatSlv, ResSlv, Prelude, Predef in {
oper oper
nominative : Case = Nom ; nominative : Case = Nom ;
@@ -37,45 +37,69 @@ oper
mascAll : (_,_ : Str) -> Animacy -> N = \oce,ocet,anim -> mascAll : (_,_ : Str) -> Animacy -> N = \oce,ocet,anim ->
let accsg = case anim of {Animate => ocet + "a"; _ => oce}; --Special case: Masc Sg Acc Animate let accsg = case anim of {Animate => ocet + "a"; _ => oce}; --Special case: Masc Sg Acc Animate
oceto : Str
= case ocet of {
_ + ("c"|"j"|"ž"|"š"|"č") => ocet+"e" ;
_ => ocet+"o"
} ;
in in
worstN oce (ocet + "a") (ocet + "u") accsg (ocet + "u") (ocet + "om") -- Singular worstN oce (ocet + "a") (ocet + "u") accsg (ocet + "u") (oceto + "m") -- Singular
(ocet + "a") (ocet + "ov") (ocet + "oma") (ocet + "a") (ocet + "ih") (ocet + "oma") -- Dual (ocet + "a") (oceto + "v") (oceto + "ma") (ocet + "a") (ocet + "ih") (oceto + "ma") -- Dual
(ocet + "i") (ocet + "ov") (ocet + "om") (ocet + "e") (ocet + "ih") (ocet + "i") -- Plural (ocet + "i") (oceto + "v") (oceto + "m") (ocet + "e") (ocet + "ih") (ocet + "i") -- Plural
(AMasc anim) ; (AMasc anim) ;
--All neuter forms are formed here, long or normal. --All neuter forms are formed here, long or normal.
--It takes the baseform + the genitive singular form. --It takes the baseform + the genitive singular form.
--In case the genitive singular has an extra vowel in the end, it is dropped before coming here. --In case the genitive singular has an extra vowel in the end, it is dropped before coming here.
neutAll : (_,_ : Str) -> N = \drevo,dreves -> neutAll : (_,_,_ : Str) -> N = \drevo,dreves,dreves2 ->
worstN drevo (dreves + "a") (dreves + "u") drevo (dreves + "u") (dreves + "om") -- Singular let dreveso = dreves + last drevo ;
(dreves + "i") dreves (dreves + "oma") (dreves + "i") (dreves + "ih") (dreves + "oma") -- Dual in worstN drevo (dreves + "a") (dreves + "u") drevo (dreves + "u") (dreveso + "m") -- Singular
(dreves + "a") dreves (dreves + "om") (dreves + "a") (dreves + "ih") (dreves + "i") -- Plural (dreves + "i") dreves2 (dreveso + "ma") (dreves + "i") (dreves + "ih") (dreveso + "ma") -- Dual
neuter ; (dreves + "a") dreves2 (dreveso + "m") (dreves + "a") (dreves + "ih") (dreves + "i") -- Plural
neuter ;
--Regular feminine nouns are formed from the baseform. Always inanimate. --Regular feminine nouns are formed from the baseform. Always inanimate.
regFem : (_ : Str) -> N = \punca -> regFem_a : (_ : Str) -> N = \punca ->
let punc = init punca let punc = init punca
in irregFem punca (punc+"e") punc ;
regFem_st : (_ : Str) -> N = \posevnost ->
worstN posevnost (posevnost + "i") (posevnost + "i") posevnost (posevnost + "i") (posevnost + "jo") -- Singular
(posevnost + "i") (posevnost + "i") (posevnost + "ma") (posevnost + "i") (posevnost + "ih") (posevnost + "ma") -- Dual
(posevnost + "i") (posevnost + "i") (posevnost + "im") (posevnost + "i") (posevnost + "ih") (posevnost + "mi") -- Plural
feminine ;
regFem_ev : (_ : Str) -> N = \vsaditev ->
let vsaditv = tk 2 vsaditev + "v"
in in
worstN punca (punc + "e") (punc + "i") (punc + "o") (punc + "i") (punc + "o") -- Singular worstN vsaditev (vsaditv + "e") (vsaditv + "i") vsaditev (vsaditv + "i") (vsaditv + "ijo") -- Singular
(punc + "i") punc (punc + "ama") (punc + "i") (punc + "am") (punc + "ama") -- Dual (vsaditv + "i") vsaditev (vsaditv + "ama") (vsaditv + "i") (vsaditv + "ah") (vsaditv + "ama") -- Dual
(punc + "e") punc (punc + "am") (punc + "e") (punc + "am") (punc + "ami") -- Plural (vsaditv + "e") vsaditev (vsaditv + "am") (vsaditv + "e") (vsaditv + "ah") (vsaditv + "ami") -- Plural
feminine ; feminine ;
iFem : (_ : Str) -> N = \stran -> iFem : (_ : Str) -> N = \stran ->
worstN stran (stran + "i") (stran + "i") stran (stran + "i") (stran + "jo") -- Singular let stran' = looseVowel stran ;
(stran + "i") (stran + "i") (stran + "ema") (stran + "i") (stran + "eh") (stran + "ema") -- Dual stran'' : Str
(stran + "i") (stran + "i") (stran + "em") (stran + "i") (stran + "eh") (stran + "mi") -- Plural = case stran' of {
_ + "n" => stran'+"i" ;
_ => stran'
}
in
worstN stran (stran' + "i") (stran' + "i") stran (stran' + "i") (stran'' + "jo") -- Singular
(stran' + "i") (stran' + "i") (stran' + "ema") (stran' + "i") (stran' + "eh") (stran' + "ema") -- Dual
(stran' + "i") (stran' + "i") (stran' + "em") (stran' + "i") (stran' + "eh") (stran' + "mi") -- Plural
feminine ; feminine ;
--This is a smart paradigm for regular nouns. --This is a smart paradigm for regular nouns.
smartN : (noun: Str) -> N = smartN : (noun: Str) -> N =
\noun -> case noun of { \noun -> case noun of {
_ + "a" => regFem noun ; _ + "a" => regFem_a noun ;
_ + ("ev" | "ost") => regFem noun ; _ + ("o"| "e") + "st" => regFem_st noun ;
_ + ("o"| "e") => let nou = init noun in neutAll noun nou ; _ + "ev" => regFem_ev noun ;
_ + ("o"| "e") => let nou = init noun in neutAll noun nou nou ;
_ + #consonant => mascAll noun noun Inanimate; --Base form used in the rest of the paradigm. _ + #consonant => mascAll noun noun Inanimate; --Base form used in the rest of the paradigm.
_ => let nou = init noun in mascAll noun nou Inanimate -- Drops the last vowel for the rest of the paradigm. _ => let nou = init noun in mascAll noun nou Inanimate -- Drops the last vowel for the rest of the paradigm.
} ; } ;
@@ -85,8 +109,8 @@ oper
irregNouns : (noun,longform : Str) -> AGender -> N = \noun,longform,gen -> irregNouns : (noun,longform : Str) -> AGender -> N = \noun,longform,gen ->
case gen of { case gen of {
AMasc anim => let longfor = init longform in mascAll noun longfor anim ; AMasc anim => let longfor = init longform in mascAll noun longfor anim ;
ANeut => let longfor = init longform in neutAll noun longfor ; ANeut => let longfor = init longform in neutAll noun longfor longfor ;
AFem => regFem noun --There are actually no feminine nouns with long stem. AFem => regFem_a noun --There are actually no feminine nouns with long stem.
} ; } ;
--Regular masculine nouns that do not end with a consonant, drops the vowel in all conjugated forms. --Regular masculine nouns that do not end with a consonant, drops the vowel in all conjugated forms.
@@ -99,8 +123,13 @@ oper
_ + #vowel => let nou = init noun in mascAll noun nou anim ; _ + #vowel => let nou = init noun in mascAll noun nou anim ;
_ => mascAll noun noun anim -- KA: catch all _ => mascAll noun noun anim -- KA: catch all
}; };
ANeut => let nou = init noun in neutAll noun nou ; ANeut => let nou = init noun in neutAll noun nou nou ;
AFem => regFem noun --There are actually no feminine nouns with long stem. AFem => case noun of {
_ + "a" => regFem_a noun ;
_ + ("o"| "e") + "st" => regFem_st noun ;
_ + "ev" => regFem_ev noun ;
_ => regFem_a noun
}
} ; } ;
--Irregular masculine nouns with long stem has no special ending in genitive dual and plural, so need a special paradigm. --Irregular masculine nouns with long stem has no special ending in genitive dual and plural, so need a special paradigm.
@@ -113,6 +142,17 @@ oper
bogovi bogov (bogov + "om") (bogov + "e") (bogov + "ih") (bogov + "i") -- Plural bogovi bogov (bogov + "om") (bogov + "e") (bogov + "ih") (bogov + "i") -- Plural
masculine ; masculine ;
irregFem : (noun,gensg,genpl : Str) -> N = \noun,gensg,genpl ->
let nou = init gensg
in
worstN noun gensg (nou + "i") (nou + "o") (nou + "i") (nou + "o") -- Singular
(nou + "i") genpl (nou + "ama") (nou + "i") (nou + "ah") (nou + "ama") -- Dual
(nou + "e") genpl (nou + "am") (nou + "e") (nou + "ah") (nou + "ami") -- Plural
feminine ;
irregNeut : (noun,gensg,plstem : Str) -> N = \cislo,cisla,cisel ->
neutAll cislo (init cisla) cisel ;
worstN : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> AGender -> N = worstN : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> AGender -> N =
\nomsg,gensg,datsg,accsg,locsg,instrsg,nomdl,gendl,datdl,accdl,locdl,instrdl,nompl,genpl,datpl,accpl,locpl,instrpl,g -> lin N { \nomsg,gensg,datsg,accsg,locsg,instrsg,nomdl,gendl,datdl,accdl,locdl,instrdl,nompl,genpl,datpl,accpl,locpl,instrpl,g -> lin N {
s = table { s = table {
@@ -137,6 +177,12 @@ oper
g = noun.g ; g = noun.g ;
n = nr n = nr
}; };
mkPN : Str -> AGender -> Number -> PN =
\s,g,n -> lin PN {
s = \\_ => s ;
g = g ;
n = n
};
mkPN : (_,_,_,_,_,_ : Str) -> AGender -> Number -> PN = mkPN : (_,_,_,_,_,_ : Str) -> AGender -> Number -> PN =
\nom,gen,dat,acc,loc,instr,g,n -> lin PN { \nom,gen,dat,acc,loc,instr,g,n -> lin PN {
s = table { s = table {
@@ -285,62 +331,101 @@ oper
-- Adjectives -- Adjectives
mkA = overload { mkA = overload {
mkA : (_:Str) -> A = \s -> regA s ("bolj"++s) ; mkA : (_:Str) -> A = \s -> irregA s (looseVowel s+"a") (looseVowel s+"o") ("bolj"++s) ("bolj"++looseVowel s+"a") ("bolj"++looseVowel s+"o") ;
mkA : (_,_:Str) -> A = regA ; mkA : (_,_:Str) -> A = \star,starejsi -> irregA star (looseVowel star+"a") (looseVowel star+"o") starejsi (looseVowel starejsi+"a") (looseVowel starejsi+"e") ;
mkA : (_,_,_:Str) -> A = \m,f,n -> irregA m f n ("bolj"++m) ("bolj"++f) ("bolj"++n);
mkA : (_,_,_,_,_,_:Str) -> A = irregA ;
mkA : (x1,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,x57 : Str) -> A = positA ;
mkA : (x1,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,x166 : Str) -> A = worstA ; mkA : (x1,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,x166 : Str) -> A = worstA ;
} ; } ;
regA : (_,_ :Str) -> A = \star,starejsi -> lin A { irregA : (_,_,_,_,_,_ :Str) -> A = \masc,fem,neut,mascC,femC,neutC -> lin A {
s = let starejs = init starejsi s = table {
in table { APosit gen num c => mkAdjForm masc fem neut ! c ! gen ! num ;
APosit gen num c => mkAdjForm star ! c ! gen ! num ; ACompar gen num c => mkAdjForm mascC femC neutC ! c ! gen ! num ;
ACompar gen num c => mkAdjForm starejs ! c ! gen ! num ; ASuperl gen num c => mkAdjForm ("naj" + mascC) ("naj" + femC) ("naj" + neutC) ! c ! gen ! num ;
ASuperl gen num c => mkAdjForm ("naj" + starejs) ! c ! gen ! num ; APositDefNom => mkAdjForm masc fem neut ! Nom ! Masc ! Pl ;
APositDefNom => mkAdjForm star ! Nom ! Masc ! Pl ; APositIndefAcc => mkAdjForm masc fem neut ! Nom ! Masc ! Sg ;
APositIndefAcc => mkAdjForm star ! Nom ! Masc ! Sg ; APositDefAcc => mkAdjForm masc fem neut ! Nom ! Masc ! Pl ;
APositDefAcc => mkAdjForm star ! Nom ! Masc ! Pl ; AComparDefAcc => mkAdjForm mascC femC neutC ! Nom ! Masc ! Pl ;
AComparDefNom => mkAdjForm starejs ! Nom ! Masc ! Pl ; ASuperlDefAcc => mkAdjForm ("naj" + mascC) ("naj" + femC) ("naj" + neutC) ! Nom ! Masc ! Pl
ASuperlDefNom => mkAdjForm ("naj" + starejs) ! Nom ! Masc ! Pl }
}
} ; } ;
mkAdjForm : Str -> Case => Gender => Number => Str = \lep -> mkAdjForm : (_,_,_ : Str) -> Case => Gender => Number => Str = \lep,lpa,lpo ->
let let lp = init lpa
lp = looseVowel lep --checks for loosewovel in the stem. if there is none, the string comes back the same.
in in
table { table {
Nom => table { Nom => table {
Fem => table {Sg=> (lp + "a"); Dl=>(lp + "i"); Pl=>(lp +"e")}; Masc => table {Sg=> lep; Dl=>(lp + "a"); Pl=>(lp +"i")};
Masc => table {Sg=> lep; Dl=>(lp + "a"); Pl=>(lp +"i")}; Fem => table {Sg=> lpa; Dl=>(lp + "i"); Pl=>(lp +"e")};
Neut => table {Sg=>(lp + "o"); Dl=>(lp + "i"); Pl=>(lp + "a")} Neut => table {Sg=> lpo; Dl=>(lp + "i"); Pl=>(lp + "a")}
}; };
Acc => table { Acc => table {
Fem => table {Sg=>(lp + "o"); Dl=>(lp + "i"); Pl=>(lp + "e")}; Masc => table {Sg=>lp+"ega"; Dl=>(lp + "a"); Pl=>(lp + "e")};
Masc => table {Sg=>lep; Dl=>(lp + "a"); Pl=>(lp + "e")}; Fem => table {Sg=>(lp + "o"); Dl=>(lp + "i"); Pl=>(lp + "e")};
Neut => table {Sg=>(lp + "o"); Dl=>(lp + "i"); Pl=>(lp +"a")} Neut => table {Sg=>lpo; Dl=>(lp + "i"); Pl=>(lp +"a")}
}; };
Gen => table { Gen => table {
Fem => table {Sg=>(lp + "e"); Dl=>(lp +"ih"); Pl=>(lp +"ih")};
Masc => table {Sg=>(lp + "ega"); Dl=>(lp +"ih"); Pl=>(lp +"ih")}; Masc => table {Sg=>(lp + "ega"); Dl=>(lp +"ih"); Pl=>(lp +"ih")};
Neut => table {Sg=>(lp + "ega"); Dl=>(lp +"ih"); Pl=>(lp +"ih")} Fem => table {Sg=>(lp + "e"); Dl=>(lp +"ih"); Pl=>(lp +"ih")};
Neut => table {Sg=>(lp + "ega"); Dl=>(lp +"ih"); Pl=>(lp +"ih")}
}; };
Loc => table { Loc => table {
Fem => table {Sg=>(lp + "i"); Dl=>(lp +"ih"); Pl=>(lp +"ih")}; Masc => table {Sg=>(lp + "em"); Dl=>(lp +"ih"); Pl=>(lp +"ih")};
Masc => table {Sg=>(lp + "em"); Dl=>(lp +"ih"); Pl=>(lp +"ih")}; Fem => table {Sg=>(lp + "i"); Dl=>(lp +"ih"); Pl=>(lp +"ih")};
Neut => table {Sg=>(lp + "em"); Dl=>(lp +"ih"); Pl=>(lp +"ih")} Neut => table {Sg=>(lp + "em"); Dl=>(lp +"ih"); Pl=>(lp +"ih")}
}; };
Dat => table { Dat => table {
Fem => table {Sg=>(lp + "i"); Dl=>(lp +"ima"); Pl=>(lp +"im")}; Masc => table {Sg=>(lp + "emu"); Dl=>(lp +"ima"); Pl=>(lp +"im")};
Masc => table {Sg=>(lp + "emu"); Dl=>(lp +"ima"); Pl=>(lp +"im")}; Fem => table {Sg=>(lp + "i"); Dl=>(lp +"ima"); Pl=>(lp +"im")};
Neut => table {Sg=>(lp + "emu"); Dl=>(lp +"ima"); Pl=>(lp +"im")} Neut => table {Sg=>(lp + "emu"); Dl=>(lp +"ima"); Pl=>(lp +"im")}
}; };
Instr => table { Instr => table {
Fem => table {Sg=>(lp + "o"); Dl=>(lp +"ima"); Pl=>(lp +"imi")}; Masc => table {Sg=>(lp + "im"); Dl=>(lp +"ima"); Pl=>(lp +"imi")};
Masc => table {Sg=>(lp + "im"); Dl=>(lp +"ima"); Pl=>(lp +"imi")}; Fem => table {Sg=>(lp + "o"); Dl=>(lp +"ima"); Pl=>(lp +"imi")};
Neut => table {Sg=>(lp + "im"); Dl=>(lp +"ima"); Pl=>(lp +"imi")} Neut => table {Sg=>(lp + "im"); Dl=>(lp +"ima"); Pl=>(lp +"imi")}
} }
} ; } ;
positA : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> A =
\positMSgNom,positMSgNomDef,positMSgGen,positMSgDat,positMSgAcc,positMSgAccIndef,positMSgAccDef,positMSgLoc,positMSgInstr,
positMDlNom,positMDlGen,positMDlDat,positMDlAcc,positMDlLoc,positMDlInstr,
positMPlNom,positMPlGen,positMPlDat,positMPlAcc,positMPlLoc,positMPlInstr,
positFSgNom,positFSgGen,positFSgDat,positFSgAcc,positFSgLoc,positFSgInstr,
positFDlNom,positFDlGen,positFDlDat,positFDlAcc,positFDlLoc,positFDlInstr,
positFPlNom,positFPlGen,positFPlDat,positFPlAcc,positFPlLoc,positFPlInstr,
positNSgNom,positNSgGen,positNSgDat,positNSgAcc,positNSgLoc,positNSgInstr,
positNDlNom,positNDlGen,positNDlDat,positNDlAcc,positNDlLoc,positNDlInstr,
positNPlNom,positNPlGen,positNPlDat,positNPlAcc,positNPlLoc,positNPlInstr ->
worstA positMSgNom positMSgNomDef positMSgGen positMSgDat positMSgAcc positMSgAccIndef positMSgAccDef positMSgLoc positMSgInstr
positMDlNom positMDlGen positMDlDat positMDlAcc positMDlLoc positMDlInstr
positMPlNom positMPlGen positMPlDat positMPlAcc positMPlLoc positMPlInstr
positFSgNom positFSgGen positFSgDat positFSgAcc positFSgLoc positFSgInstr
positFDlNom positFDlGen positFDlDat positFDlAcc positFDlLoc positFDlInstr
positFPlNom positFPlGen positFPlDat positFPlAcc positFPlLoc positFPlInstr
positNSgNom positNSgGen positNSgDat positNSgAcc positNSgLoc positNSgInstr
positNDlNom positNDlGen positNDlDat positNDlAcc positNDlLoc positNDlInstr
positNPlNom positNPlGen positNPlDat positNPlAcc positNPlLoc positNPlInstr
("boli"++positMSgNom) ("boli"++positMSgGen) ("boli"++positMSgDat) ("boli"++positMSgAcc) ("boli"++positMSgAccDef) ("boli"++positMSgLoc) ("boli"++positMSgInstr)
("boli"++positMDlNom) ("boli"++positMDlGen) ("boli"++positMDlDat) ("boli"++positMDlAcc) ("boli"++positMDlLoc) ("boli"++positMDlInstr)
("boli"++positMPlNom) ("boli"++positMPlGen) ("boli"++positMPlDat) ("boli"++positMPlAcc) ("boli"++positMPlLoc) ("boli"++positMPlInstr)
("boli"++positFSgNom) ("boli"++positFSgGen) ("boli"++positFSgDat) ("boli"++positFSgAcc) ("boli"++positFSgLoc) ("boli"++positFSgInstr)
("boli"++positFDlNom) ("boli"++positFDlGen) ("boli"++positFDlDat) ("boli"++positFDlAcc) ("boli"++positFDlLoc) ("boli"++positFDlInstr)
("boli"++positFPlNom) ("boli"++positFPlGen) ("boli"++positFPlDat) ("boli"++positFPlAcc) ("boli"++positFPlLoc) ("boli"++positFPlInstr)
("boli"++positNSgNom) ("boli"++positNSgGen) ("boli"++positNSgDat) ("boli"++positNSgAcc) ("boli"++positNSgLoc) ("boli"++positNSgInstr)
("boli"++positNDlNom) ("boli"++positNDlGen) ("boli"++positNDlDat) ("boli"++positNDlAcc) ("boli"++positNDlLoc) ("boli"++positNDlInstr)
("boli"++positNPlNom) ("boli"++positNPlGen) ("boli"++positNPlDat) ("boli"++positNPlAcc) ("boli"++positNPlLoc) ("boli"++positNPlInstr)
("najboli"++positMSgNom) ("najboli"++positMSgGen) ("najboli"++positMSgDat) ("najboli"++positMSgAcc) ("najboli"++positMSgAccDef) ("najboli"++positMSgLoc) ("najboli"++positMSgInstr)
("najboli"++positMDlNom) ("najboli"++positMDlGen) ("najboli"++positMDlDat) ("najboli"++positMDlAcc) ("najboli"++positMDlLoc) ("najboli"++positMDlInstr)
("najboli"++positMPlNom) ("najboli"++positMPlGen) ("najboli"++positMPlDat) ("najboli"++positMPlAcc) ("najboli"++positMPlLoc) ("najboli"++positMPlInstr)
("najboli"++positFSgNom) ("najboli"++positFSgGen) ("najboli"++positFSgDat) ("najboli"++positFSgAcc) ("najboli"++positFSgLoc) ("najboli"++positFSgInstr)
("najboli"++positFDlNom) ("najboli"++positFDlGen) ("najboli"++positFDlDat) ("najboli"++positFDlAcc) ("najboli"++positFDlLoc) ("najboli"++positFDlInstr)
("najboli"++positFPlNom) ("najboli"++positFPlGen) ("najboli"++positFPlDat) ("najboli"++positFPlAcc) ("najboli"++positFPlLoc) ("najboli"++positFPlInstr)
("najboli"++positNSgNom) ("najboli"++positNSgGen) ("najboli"++positNSgDat) ("najboli"++positNSgAcc) ("najboli"++positNSgLoc) ("najboli"++positNSgInstr)
("najboli"++positNDlNom) ("najboli"++positNDlGen) ("najboli"++positNDlDat) ("najboli"++positNDlAcc) ("najboli"++positNDlLoc) ("najboli"++positNDlInstr)
("najboli"++positNPlNom) ("najboli"++positNPlGen) ("najboli"++positNPlDat) ("najboli"++positNPlAcc) ("najboli"++positNPlLoc) ("najboli"++positNPlInstr) ;
worstA : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> A = worstA : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> A =
\positMSgNom,positMSgNomDef,positMSgGen,positMSgDat,positMSgAcc,positMSgAccIndef,positMSgAccDef,positMSgLoc,positMSgInstr, \positMSgNom,positMSgNomDef,positMSgGen,positMSgDat,positMSgAcc,positMSgAccIndef,positMSgAccDef,positMSgLoc,positMSgInstr,
positMDlNom,positMDlGen,positMDlDat,positMDlAcc,positMDlLoc,positMDlInstr, positMDlNom,positMDlGen,positMDlDat,positMDlAcc,positMDlLoc,positMDlInstr,
@@ -557,7 +642,7 @@ oper
Loc => loc; Loc => loc;
Instr=>inst Instr=>inst
} ; } ;
poss = \\g,c,nr => mkAdjForm poss ! c ! g ! nr ; poss = \\g,c,nr => mkAdjForm poss (looseVowel poss+"a") (looseVowel poss+"o") ! c ! g ! nr ;
a = {g=g; n=n; p=p} a = {g=g; n=n; p=p}
}; };
@@ -643,7 +728,7 @@ oper
adjDet : Str -> Number -> Species -> Det = adjDet : Str -> Number -> Species -> Det =
\en,nr,sp -> lin Det { \en,nr,sp -> lin Det {
s = \\g,c => mkAdjForm en ! c ! g ! nr ; s = \\g,c => mkAdjForm en (looseVowel en+"a") (looseVowel en+"o") ! c ! g ! nr ;
spec = sp ; spec = sp ;
n = (UseNum nr) n = (UseNum nr)
} ; } ;
@@ -673,7 +758,7 @@ oper
mkComp : Str -> Comp = mkComp : Str -> Comp =
\str -> lin Comp { \str -> lin Comp {
s = \\agr => mkAdjForm str ! Nom ! agr.g ! agr.n s = \\agr => mkAdjForm str (looseVowel str+"a") (looseVowel str+"o") ! Nom ! agr.g ! agr.n
} ; } ;
--Helper function that drops the loose vowel that has to go in many conjugations. --Helper function that drops the loose vowel that has to go in many conjugations.
@@ -687,7 +772,7 @@ oper
--_ + "len" => Predef.tk 2 vowel + "n" ; --_ + "len" => Predef.tk 2 vowel + "n" ;
--_ + "čen" => Predef.tk 2 vowel + "n" ; --_ + "čen" => Predef.tk 2 vowel + "n" ;
--_ + "zen" => Predef.tk 2 vowel + "n" ; --_ + "zen" => Predef.tk 2 vowel + "n" ;
--_ + "ven" => Predef.tk 2 vowel + "n" ; _ + "stven" => vowel ;
--_ + "den" => Predef.tk 2 vowel + "n" ; --_ + "den" => Predef.tk 2 vowel + "n" ;
--_ + "šen" => Predef.tk 2 vowel + "n" ; --_ + "šen" => Predef.tk 2 vowel + "n" ;
_ + "en" => Predef.tk 2 vowel + "n" ; --not yet tested for overgeneration _ + "en" => Predef.tk 2 vowel + "n" ; --not yet tested for overgeneration