From 6af5e20343a95e32b2bec8f1f66ae9943270d4d3 Mon Sep 17 00:00:00 2001 From: krasimir Date: Sun, 28 Aug 2016 23:11:22 +0000 Subject: [PATCH] smart paradigms for adjectives adapted from Anna Ehrlemark. The adaptation is not perfect because it includes syncretic forms --- lib/src/slovenian/ParadigmsSlv.gf | 60 ++++++++++++++++++++++++++++++- lib/src/slovenian/ResSlv.gf | 2 ++ 2 files changed, 61 insertions(+), 1 deletion(-) diff --git a/lib/src/slovenian/ParadigmsSlv.gf b/lib/src/slovenian/ParadigmsSlv.gf index ea28bef77..bb690d9ed 100644 --- a/lib/src/slovenian/ParadigmsSlv.gf +++ b/lib/src/slovenian/ParadigmsSlv.gf @@ -145,7 +145,65 @@ oper mkVV : V -> VV ; mkVV v = v ; - mkA : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> A = +-- Adjectives + + mkA = overload { + mkA : (_,_:Str) -> A = regA ; + mkA : (x1,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,x166 : Str) -> A = worstA ; + } ; + + regA : (_,_ :Str) -> A = \star,starejsi -> lin A { + s = let starejs = init starejsi + in table { + APosit gen num c => mkAdjForm star ! c ! gen ! num ; + ACompar gen num c => mkAdjForm starejs ! c ! gen ! num ; + ASuperl gen num c => mkAdjForm ("naj" + starejs) ! c ! gen ! num ; + APositDefNom => mkAdjForm star ! Nom ! Masc ! Pl ; + APositIndefAcc => mkAdjForm star ! Nom ! Masc ! Sg ; + APositDefAcc => mkAdjForm star ! Nom ! Masc ! Pl ; + AComparDefAcc => mkAdjForm starejs ! Nom ! Masc ! Sg ; + ASuperlDefAcc => mkAdjForm ("naj" + starejs) ! Nom ! Masc ! Sg + } + } ; + + mkAdjForm : Str -> Case => Gender => Number => Str = \lep -> + let + lp = looseVowel lep --checks for loosewovel in the stem. if there is none, the string comes back the same. + in + table { + Nom => table { + Fem => table {Sg=> (lp + "a"); Dl=>(lp + "i"); Pl=>(lp +"e")}; + Masc => table {Sg=> lep; Dl=>(lp + "a"); Pl=>(lp +"i")}; + Neut => table {Sg=>(lp + "o"); Dl=>(lp + "i"); Pl=>(lp + "a")} + }; + Acc => table { + Fem => table {Sg=>(lp + "o"); Dl=>(lp + "i"); Pl=>(lp + "e")}; + Masc => table {Sg=>lep; Dl=>(lp + "a"); Pl=>(lp + "e")}; + Neut => table {Sg=>(lp + "o"); Dl=>(lp + "i"); Pl=>(lp +"a")} + }; + Gen => table { + Fem => table {Sg=>(lp + "e"); 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")} + }; + Loc => table { + Fem => table {Sg=>(lp + "i"); Dl=>(lp +"ih"); Pl=>(lp +"ih")}; + Masc => table {Sg=>(lp + "em"); Dl=>(lp +"ih"); Pl=>(lp +"ih")}; + Neut => table {Sg=>(lp + "em"); Dl=>(lp +"ih"); Pl=>(lp +"ih")} + }; + Dat => table { + Fem => table {Sg=>(lp + "i"); Dl=>(lp +"ima"); Pl=>(lp +"im")}; + Masc => table {Sg=>(lp + "emu"); Dl=>(lp +"ima"); Pl=>(lp +"im")}; + Neut => table {Sg=>(lp + "emu"); Dl=>(lp +"ima"); Pl=>(lp +"im")} + }; + Instr => table { + Fem => table {Sg=>(lp + "o"); Dl=>(lp +"ima"); Pl=>(lp +"imi")}; + Masc => table {Sg=>(lp + "im"); Dl=>(lp +"ima"); Pl=>(lp +"imi")}; + Neut => table {Sg=>(lp + "im"); Dl=>(lp +"ima"); Pl=>(lp +"imi")} + } + } ; + + worstA : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> A = \positMSgNom,positMSgNomDef,positMSgGen,positMSgDat,positMSgAcc,positMSgAccIndef,positMSgAccDef,positMSgLoc,positMSgInstr, positMDlNom,positMDlGen,positMDlDat,positMDlAcc,positMDlLoc,positMDlInstr, positMPlNom,positMPlGen,positMPlDat,positMPlAcc,positMPlLoc,positMPlInstr, diff --git a/lib/src/slovenian/ResSlv.gf b/lib/src/slovenian/ResSlv.gf index 8dcf7894b..f26deebf6 100644 --- a/lib/src/slovenian/ResSlv.gf +++ b/lib/src/slovenian/ResSlv.gf @@ -21,6 +21,8 @@ param AForm = APosit Gender Number Case | ACompar Gender Number Case | ASuperl Gender Number Case + + -- the rest are not really needed because they seem to be syncretic | APositDefNom | APositIndefAcc | APositDefAcc