Files
comp-syntax-gu-mlt/lab1/grammar/korean/HangulJamo.gf
2026-02-12 16:19:46 -07:00

73 lines
2.6 KiB
Plaintext

resource HangulJamo = open Prelude in {
flags coding=utf8 ;
oper
lemmaToStem : (lemma : Str) -> Str
= \lemma -> case lemma of {
stem + "다" => stem ;
_ => Predef.error ("lemmaToStem was applied to a non-lemma," ++ lemma)
} ;
infinitive : (stem : Str) -> Str
= \stem -> case stem of {
-- 하다 ⇒ 해
init + #ha => init + "해" ;
-- 찾다 ⇒ 찾아, 좁다 ⇒ 좁아
_ + #a_o + #batchim => stem + "아" ;
-- 가다 ⇒ 가,
_ + (#a | #eo) => stem ;
-- 오다 ⇒ 와
init + #o => init + "ᅪ" ;
-- 따르다 ⇒ 따러
init + #eu => init + "ᅥ" ;
-- 기다리다 ⇒ 기다려
init + #i => init + "ᅧ" ;
--
init + #u => init + "ᅯ" ;
-- 맛있다 ⇒ 맛있어
_ => stem + "어"
} ;
present_haeyo : (stem : Str) -> Str
= \stem -> infinitive stem + "요" ;
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 = #"ᅡ" ;
o : pattern Str = #"ᅩ" ;
eo : pattern Str = #"ᅥ" ;
eu : pattern Str = #"ᅳ" ;
i : pattern Str = #"ᅵ" ;
u : pattern Str = #"ᅮ" ;
ha : pattern Str = #"하" ;
oper
consonant : pattern Str =
#("ᄀ" | "ᄁ" | "ᄂ" | "ᄃ" | "ᄄ" | "ᄅ" | "ᄆ" | "ᄇ"
| "ᄈ" | "ᄉ" | "ᄊ" | "ᄋ" | "ᄌ" | "ᄍ" | "ᄎ" | "ᄏ"
| "ᄐ" | "ᄑ" | "ᄒ" | "ᆨ" | "ᆩ" | "ᆪ" | "ᆫ" | "ᆬ"
| "ᆭ" | "ᆮ" | "ᆯ" | "ᆰ" | "ᆱ" | "ᆲ" | "ᆳ" | "ᆴ"
| "ᆵ" | "ᆶ" | "ᆷ" | "ᆸ" | "ᆹ" | "ᆺ" | "ᆻ" | "ᆼ"
| "ᆽ" | "ᆾ" | "ᆿ" | "ᇀ" | "ᇁ" | "ᇂ") ;
batchim : pattern Str =
#("ᆨ" | "ᆩ" | "ᆪ" | "ᆫ" | "ᆬ" | "ᆭ" | "ᆮ" | "ᆯ" | "ᆰ"
| "ᆱ" | "ᆲ" | "ᆳ" | "ᆴ" | "ᆵ" | "ᆶ" | "ᆷ" | "ᆸ" | "ᆹ"
| "ᆺ" | "ᆻ" | "ᆼ" | "ᆽ" | "ᆾ" | "ᆿ" | "ᇀ" | "ᇁ" | "ᇂ") ;
choseong : pattern Str =
#("ᄀ" | "ᄁ" | "ᄂ" | "ᄃ" | "ᄄ" | "ᄅ" | "ᄆ" | "ᄇ" | "ᄈ"
| "ᄉ" | "ᄊ" | "ᄋ" | "ᄌ" | "ᄍ" | "ᄎ" | "ᄏ" | "ᄐ" | "ᄑ"
| "ᄒ") ;
vowel : pattern Str =
#("ᅡ" | "ᅢ" | "ᅣ" | "ᅤ" | "ᅥ" | "ᅦ" | "ᅧ" | "ᅨ" | "ᅩ"
| "ᅪ" | "ᅫ" | "ᅬ" | "ᅭ" | "ᅮ" | "ᅯ" | "ᅰ" | "ᅱ" | "ᅲ"
| "ᅳ" | "ᅴ" | "ᅵ") ;
}