diff --git a/lab1/grammar/korean/HangulJamo.gf b/lab1/grammar/korean/HangulJamo.gf index a9eb9e7..7af82fa 100644 --- a/lab1/grammar/korean/HangulJamo.gf +++ b/lab1/grammar/korean/HangulJamo.gf @@ -33,6 +33,12 @@ resource HangulJamo = open Prelude in { past_haeyo : (stem : Str) -> Str = \stem -> infinitive stem + "ᆻ어요" ; + vc_allomorph : (s,vowel,consonant : Str) -> Str + = \s,v,c -> case s of { + _ + #vowel => v ; + _ => c + } ; + oper a_o : pattern Str = #("ᅡ" | "ᅩ") ; a : pattern Str = #"ᅡ" ; diff --git a/lab1/grammar/korean/MicroLangKor.gf b/lab1/grammar/korean/MicroLangKor.gf index 0d3d3cc..b8a73a4 100644 --- a/lab1/grammar/korean/MicroLangKor.gf +++ b/lab1/grammar/korean/MicroLangKor.gf @@ -41,6 +41,8 @@ concrete MicroLangKor of MicroLang = open MicroResKor, Prelude in { thisPl_Det = {s = "이"} ; that_Det = {s = "그"} ; thatPl_Det = {s = "그"} ; + PositA a = a ; + AdjCN ap cn = {s = ap.s ! VAdnomial ++ cn.s} ; ----------------------------------------------------- ---------------- Lexicon part ----------------------- @@ -50,9 +52,9 @@ concrete MicroLangKor of MicroLang = open MicroResKor, Prelude in { lin animal_N = mkN "동물" ; lin apple_N = mkN "사과" ; lin baby_N = mkN "아기" ; --- lin bad_A = mkA "나쁜" ; +lin bad_A = mkA "나쁘다" ; -- lin beer_N = mkN "beer" ; --- lin big_A = mkA "큰" ; +lin big_A = mkA "크다" ; -- lin bike_N = mkN "bike" ; -- lin bird_N = mkN "bird" ; -- lin black_A = mkA "black" ; @@ -63,13 +65,13 @@ lin book_N = mkN "책" ; lin boy_N = mkN "소녁" ; lin bread_N = mkN "빵" ; -- lin break_V2 = mkV2 (mkV "break" "broke" "broken") ; --- lin buy_V2 = mkV2 (mkV "buy" "bought" "bought") ; +lin buy_V2 = mkV2 "사다" ; lin car_N = mkN "자동차" ; lin cat_N = mkN "고양이" ; lin child_N = mkN "어린이" ; -- lin city_N = mkN "city" ; --- lin clean_A = mkA "정소한" ; --- lin clever_A = mkA "똑똑한" ; +lin clean_A = mkA "정소하다" ; +lin clever_A = mkA "똑똑하다" ; -- lin cloud_N = mkN "cloud" ; -- lin cold_A = mkA "차가운" ; lin come_V = mkV "오다" ; @@ -114,7 +116,7 @@ lin read_V2 = mkV2 "읽다" ; lin river_N = mkN "강" ; -- lin run_V = mkV "run" "ran" "run" ; lin sea_N = mkN "바다" ; --- lin see_V2 = mkV2 (mkV "see" "saw" "seen") ; +lin see_V2 = mkV2 "보다" ; -- lin ship_N = mkN "ship" ; lin sleep_V = mkV "자다" ; -- lin small_A = mkA "작은" ; @@ -157,4 +159,7 @@ oper mkPrep : Str -> Prep = \s -> lin Prep {s = s} ; + + mkA : Str -> A + = \lemma -> lin A (regAdjective lemma) ; } diff --git a/lab1/grammar/korean/MicroResKor.gf b/lab1/grammar/korean/MicroResKor.gf index 0f6cf98..f0a2ee7 100644 --- a/lab1/grammar/korean/MicroResKor.gf +++ b/lab1/grammar/korean/MicroResKor.gf @@ -1,6 +1,6 @@ resource MicroResKor = open Prelude, HangulJamo in { param - VForm = Lemma | VPresent | VPast ; + VForm = VLemma | VPresent | VPast | VAdnomial ; oper Noun : Type = {s : Str} ; @@ -14,14 +14,21 @@ resource MicroResKor = open Prelude, HangulJamo in { _ => Predef.error ("lemmaToStem was applied to a non-lemma," ++ lemma) } ; - regVerb : (lemma : Str) -> Verb - = \lemma -> + reg : (descriptive : Bool) -> (lemma : Str) -> Verb + = \descriptive,lemma -> let stem = lemmaToStem lemma ; in { s = table { - Lemma => lemma ; + VLemma => lemma ; VPresent => present_haeyo stem ; - VPast => past_haeyo stem + VPast => past_haeyo stem ; + VAdnomial => + if_then_else Str descriptive + (stem + vc_allomorph stem "ᆫ" "은") + (stem + "는") } } ; + + regVerb : (lemma : Str) -> Verb = reg False ; + regAdjective : (lemma : Str) -> Adjective = reg True ; }