From efcfb3cefa7ca962564ed413bb14ac1712256d8e Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Fri, 24 Apr 2020 07:39:21 +0200 Subject: [PATCH] (Hun) Use the separate pstems in caseFromPossStem --- src/hungarian/NounHun.gf | 1 + src/hungarian/ResHun.gf | 37 +++++++++++++++++++++---------------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/src/hungarian/NounHun.gf b/src/hungarian/NounHun.gf index 6c3ec0d33..6682c325c 100644 --- a/src/hungarian/NounHun.gf +++ b/src/hungarian/NounHun.gf @@ -192,6 +192,7 @@ concrete NounHun of Noun = CatHun ** open ResHun, Prelude, Coordination in { -- : AP -> CN -> CN AdjCN ap cn = cn ** { s = \\nc => ap.s ! Sg ++ cn.s ! nc ; + pstems = \\cs => ap.s ! Sg ++ cn.pstems ! cs ; compl = \\n,c => ap.compar ++ cn.compl ! n ! c ; } ; diff --git a/src/hungarian/ResHun.gf b/src/hungarian/ResHun.gf index 0c1a14c68..0863b8fa4 100644 --- a/src/hungarian/ResHun.gf +++ b/src/hungarian/ResHun.gf @@ -37,22 +37,27 @@ oper => applyCase' PlStem } ; - caseFromPossStem : Noun -> Determiner -> Case -> Str = \cn,det,cas -> - let stem_casetable : NumCaseStem*(Case->HarmForms) = case of { - => case st of { - dSg_rSg1P2 => ; - dSg_rP3 Sg => ; - dSg_rP3 Pl => ; - dSg_rPl1 => } ; - => ; - _ => Predef.error "caseFromPossStem: Trying to apply to non-possessive Det" } ; - stem = stem_casetable.p1 ; - casetable = stem_casetable.p2 ; + caseFromPossStem : CNoun -> Determiner -> Case -> Str = \cn,det,cas -> + let casetable : Case->HarmForms = case of { + -- P3 Sg possessive suffix ends in vowel, others in consonant. + => endCasePossVow ; + _ => endCase + } ; + stem : CNPossStem = case det.n of { + Sg => PossSg + (case det.dt of { + DetPoss x => x ; + _ => Predef.error "caseFromPossStem: Not possessive Det"}) ; + Pl => PossPl + } ; + + -- possessive suffix e.g. "their cats-3pl" is just k. not uk/ük suf = case of { - => "k" ; - _ => det.poss ! cn.h } ; + => "k" ; + _ => det.poss ! cn.h + } ; in case cas of { - Nom => glue (cn.s ! stem) suf ; -- don't use applyCaseSuf, it adds BIND + Nom => glue (cn.pstems ! stem) suf ; -- don't use applyCaseSuf, it adds BIND _ => applyCaseSuf suf cas cn stem casetable } ; BaseNP : Type = { @@ -201,9 +206,9 @@ oper applyCase : (Str->Str->Str) -> Case -> Noun -> NumCaseStem -> Str = \bind,cas,cn,stem -> bind (cn.s ! stem) (endCase cas ! cn.h) ; - applyCaseSuf : Str -> Case -> Noun -> NumCaseStem -> (Case -> HarmForms) -> Str = + applyCaseSuf : Str -> Case -> CNoun -> CNPossStem -> (Case -> HarmForms) -> Str = \suf,cas,cn,stem,casetable -> - glue (glue (cn.s ! stem) suf) (casetable cas ! cn.h) ; + glue (glue (cn.pstems ! stem) suf) (casetable cas ! cn.h) ; ------------------