From ebd250e0633953bed2a3c627b4bd9d4965c10480 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Tue, 24 Mar 2020 13:40:21 +0100 Subject: [PATCH] (Kor) Add present tense in 3 politeness forms, subj+obj cases in V* --- src/korean/ParadigmsKor.gf | 6 +-- src/korean/ParamKor.gf | Bin 2993 -> 4482 bytes src/korean/ResKor.gf | 73 ++++++++++++++++++++++++------------- src/korean/VerbKor.gf | 19 +++++----- 4 files changed, 60 insertions(+), 38 deletions(-) diff --git a/src/korean/ParadigmsKor.gf b/src/korean/ParadigmsKor.gf index 1825b1e24..083513fdf 100644 --- a/src/korean/ParadigmsKor.gf +++ b/src/korean/ParadigmsKor.gf @@ -35,7 +35,7 @@ oper copula : V ; -- The copula verb '' mkV2 : overload { - mkV2 : (inf : Str) -> V2 ; + mkV2 : (inf : Str) -> V2 ; } ; -- mkV3 : overload { @@ -102,7 +102,7 @@ oper } ; mkV = overload { - mkV : (inf : Str) -> V = \v -> lin V (mkVerb v) ; + mkV : (inf : Str) -> V = \v -> lin V (mkVerb v Active) ; } ; copula = ResKor.copula ; @@ -111,7 +111,7 @@ oper -- } ; mkV2 = overload { - mkV2 : (inf : Str) -> V2 = \v2 -> lin V2 (mkVerb v2) ; + mkV2 : (inf : Str) -> V2 = \v2 -> lin V2 (mkVerb2 v2) ; } ; -- -- mkV3 = overload { diff --git a/src/korean/ParamKor.gf b/src/korean/ParamKor.gf index ba92398af2b607c8d46ac3deadf461eb83e2d1d0..0eea49fd88b5a300eade5af5fc506f347a1bbcb2 100644 GIT binary patch delta 1634 zcmdle-lV)?8dp7+0tmRL=A{;8CWDv?3c9)qRjEb!3c2}31sSQisURga3Lc3`nI)x( zIbb!qx(ctmra&YDit>vKQj<$E%TmF5Uu{|dl}Ig0OHD2TYXBMgW_pMIo2fHElGa>Y z3JSp`l{xjP3br5t1qB7S{Gwct@w&PSZ>P?9)4ldh_nbE~mb}@t1+1V(As{~|vjk$t z+o@aL%$kBEm6Mp6rvS2^fkENz)GZ9J=k9^YLhMS-D@n~uP7SFnK-lP#np~fgSd<8I zI@Au&ypq(SqWp9evD|`G6h#3=`33pKnILTn)?6U3=;|tj_`CR9DP-m)=aiJxKv6kwqbQtgtO4094laTq966l@j3+`z$= z3JQe8qRf&?kj2%y3Z8jsnRyVGX!s@;m1O2A7+P8y=_nNFDHxd=7He`TfNWFn&M!($ z%u~ojD9b1` zwA@@z!Bi7uT1mb_PG(-VLP>ePLVi(7W*$scF~|pr3fY+uw<#5+rkCa<7AYj>=N9Cb z=A|gf83mgp*|m*%CU78REy=B23XC_HLdreMvbVXO%av(yw&K!L)r02BksIjIW8 zsZcK^<(EQ2t~fC_6&ysM5Kb&s&@j~0QAjGSF9BtlzfHE5>0h$u15{axE?hu0)-|xyizL)ic*V2&rg3?=lX?ljjqlQKGc&sbQS4hs!IJ8zlJt(=$pGz$Rp- zDQM*9r7EQ4rxt61J(ZhSsi2XPuc-s_Xl5~z291(@g_L}d7d6b#om-!(0FSgBQ0OV- zCT6FC(`jxlC@n*CM`>PRX?{s+ib4Unq$w_`%t^K8(lE!DM~a~tACx&jL7AFYqL8Ri zT#{Ilnwy$eqN7k)np$66l9`{U14^tQ>vTXVy|^?zJryht3LH>Gd-{cV`Z|WVDuC?; zWeYv`Yq=)RX9=5}$Q=Lx DXCx3OBlwXiqq>z(YT%wSlrjV9jlv~WDpb+MkUzDq0%cTGYVV-$uU}lX%m|JF^f+N^i bg@F8=#G=fSN|2FUx==8AC5z8wBf$Uw&)O>H diff --git a/src/korean/ResKor.gf b/src/korean/ResKor.gf index 8c3f6c977..03381d102 100644 --- a/src/korean/ResKor.gf +++ b/src/korean/ResKor.gf @@ -105,15 +105,13 @@ oper Adjective : Type = {s : AForm => Str} ; Adjective2 : Type = Adjective ; - mkAdj : Str -> Adjective = \inf -> let stem = init inf in { - s = table { - AAttr => add_N stem ; - APred VInf => inf ; - APred (VFin Gnomic Pos) => add_B stem + "니다" ; - APred (VFin Gnomic Neg) => "안" ++ add_B stem + "니다" ; -- TODO check - APred _ => stem ++ "TODO: proper adjective inflection" - } - } ; + mkAdj : Str -> Adjective = \plain -> + let stem = init plain ; + verb = mkVerb stem Stative ; + in { + s = table { AAttr => add_N stem ; + APred vf => verb.s ! vf } + } ; AdjPhrase : Type = Adjective ** {compar : Str} ; -------------------------------------------------------------------------------- @@ -121,29 +119,54 @@ oper BaseVerb : Type = { type : VerbType ; + sc : NForm ; -- subject case } ; Verb : Type = BaseVerb ** { s : VForm => Str ; } ; - Verb2 : Type = Verb ; -- ** {c2 : Postposition} ; - Verb3 : Type = Verb ; -- ** {c3 : Postposition} ; + Verb2 : Type = Verb ** {c2 : NForm ; p2 : Postposition} ; + Verb3 : Type = Verb2 ** {c3 : NForm ; p3 : Postposition} ; -- VV : Type = Verb ** {vvtype : VVForm} ; - copula : Verb = { - s = table { - VInf => "이다" ; - VFin Gnomic Pos => "입니다" ; - VFin Gnomic Neg => "아닙니다" ; - _ => "TODO:copula" } ; - type = Copula ; + mkVerb : (plain : Str) -> VerbType -> Verb = \plain,vt -> + mkVerbFull plain plain plain plain plain plain vt ; -- TODO proper forms + + mkVerb2 : (plain : Str) -> Verb2 = \plain -> + let v = mkVerb plain Active + in v ** {c2 = Object ; p2 = mkPrep []} ; + + mkVerbFull : (x1,_,_,_,_,x6 : Str) -> VerbType -> Verb = + \plain,polite,formal,planeg,polneg,formneg,vt -> { + s = table { + VF Plain Pos => plain ; + VF Plain Neg => planeg ; + VF Polite Pos => polite ; + VF Polite Neg => polneg ; + VF Formal Pos => formal ; + VF Formal Neg => formneg + } ; + type = vt ; + sc = Subject } ; - mkVerb : Str -> Verb = \str -> { - s = \\_ => str ; - type = Active + copula : Verb = mkVerbFull + "이다" + "이에요" -- or "이세요" ? + "입니다" + "아니다" + "아니에요" + "아닙니다" + Copula ; + + copulaAfterConsonant : Verb = copula ** { + s = \\vf => case vf of { + VF Plain Pos => "다" ; + VF Polite Pos => "예요" ; + _ => copula.s ! vf } } ; + ------------------ -- Adv @@ -154,13 +177,11 @@ oper Complement : Type = { s : VForm => Str ; - nComp : Str ; -- compar : Str ; -- comparative is discontinuous } ; emptyComp : Complement = { s = \\_ => [] ; - nComp = [] ; -- compar : Str ; } ; @@ -177,6 +198,7 @@ oper vComp, nComp = [] ; } ; + -------------------------------------------------------------------------------- -- Cl, S @@ -196,9 +218,8 @@ oper predVPslash = predVP ; -- VP==VPSlash, Cl==ClSlash predVP : NounPhrase -> VerbPhrase -> ClSlash = \np,vp -> vp ** { - s = \\t,a,p => np.s ! Topic - ++ vp.nComp -- TODO: embed copula into complement - ++ vp.s ! VFin Gnomic Pos -- TODO: actual forms + s = \\t,a,p => np.s ! vp.sc + ++ vp.s ! VF Polite p -- TODO: more tenses } ; -------------------------------------------------------------------------------- diff --git a/src/korean/VerbKor.gf b/src/korean/VerbKor.gf index 60f6966e3..ca846ec89 100644 --- a/src/korean/VerbKor.gf +++ b/src/korean/VerbKor.gf @@ -114,22 +114,23 @@ lin -- : AP -> Comp ; CompAP ap = emptyComp ** { - s = \\vf => ap.s ! APred vf ; + s = \\vf => ap.s ! APred vf } ; -- : CN -> Comp ; - CompCN cn = emptyComp ** { - nComp = cn.s ! Bare ; -- TODO: num. I am [a house that sleeps here] vs. we are [houses that sleep here] - } ; - - -- NP -> Comp ; - CompNP np = emptyComp ** { - nComp = np.s ! Bare ; + -- : NP -> Comp ; + CompCN, + CompNP = \n -> emptyComp ** { + s = \\vf => + let cop = case n.p of { + Vowel => copula.s ; + Consonant => copulaAfterConsonant.s } + in glue (n.s ! Bare) (cop ! vf) } ; -- : Adv -> Comp ; CompAdv adv = emptyComp ** { - nComp = adv.s ; + s = \\vf => adv.s ++ copula.s ! vf ; } ; -- : VP -- Copula alone;