mirror of
https://github.com/GrammaticalFramework/comp-syntax-gu-mlt.git
synced 2026-04-27 04:22:51 -06:00
131 lines
3.2 KiB
Plaintext
131 lines
3.2 KiB
Plaintext
resource MicroResMyeng = {
|
|
|
|
------------------------------
|
|
-- API: overloaded paradigms
|
|
|
|
oper
|
|
mkN = overload {
|
|
mkN : (baby : Str) -> Noun
|
|
= \baby -> smartNoun baby ;
|
|
mkN : (man, men : Str) -> Noun
|
|
= \man, men -> mkNoun man men ;
|
|
} ;
|
|
|
|
mkA : Str -> Adjective
|
|
= \adj -> {s = adj} ;
|
|
|
|
mkAdv : Str -> Adverb
|
|
= \adv -> {s = adv} ;
|
|
|
|
mkV = overload {
|
|
mkV : (try : Str) -> Verb
|
|
= \try -> smartVerb try ;
|
|
mkV : (go, went, gone : Str) -> Verb
|
|
= \go, went, gone -> irregVerb go went gone ;
|
|
mkV : (sing, sings, sang, sung, singing : Str) -> Verb
|
|
= \sing, sings, sang, sung, singing ->
|
|
mkVerb sing sings sang sung singing ;
|
|
} ;
|
|
|
|
mkV2 = overload {
|
|
mkV2 : (kill : Str) -> Verb2
|
|
= \kill -> mkV kill ** {prep = ""} ;
|
|
mkV2 : (wait, for : Str) -> Verb2
|
|
= \wait, for -> mkV wait ** {prep = for} ;
|
|
mkV2 : Verb -> Verb2
|
|
= \verb -> verb ** {prep = ""} ;
|
|
} ;
|
|
|
|
|
|
|
|
------------------------------
|
|
param
|
|
Number = Sg | Pl ;
|
|
|
|
VerbForm = Inf | Pres3Sg | Past | PastPart | PresPart ;
|
|
|
|
Case = Nom | Acc ;
|
|
|
|
oper
|
|
Noun : Type = {s : Number => Str} ;
|
|
|
|
-- constructor
|
|
mkNoun : (dog, dogs : Str) -> Noun
|
|
= \dog, dogs -> {
|
|
s = table {Sg => dog ; Pl => dogs}
|
|
} ;
|
|
|
|
regNoun : (dog : Str) -> Noun
|
|
= \dog -> mkNoun dog (dog + "s") ;
|
|
|
|
smartNoun : (noun : Str) -> Noun
|
|
= \noun -> case noun of {
|
|
b + ("a" | "e" | "o" | "u") + "y" => regNoun noun ;
|
|
bab + "y" => mkNoun noun (bab + "ies") ;
|
|
_ => regNoun noun
|
|
} ;
|
|
|
|
Adjective : Type = {s : Str} ;
|
|
|
|
Adverb : Type = {s : Str} ;
|
|
|
|
Verb : Type = {s : VerbForm => Str} ;
|
|
|
|
-- constructor; worst case paradigm
|
|
mkVerb : (sing, sings, sang, sung, singing : Str) -> Verb
|
|
= \sing, sings, sang, sung, singing -> {
|
|
s = table {
|
|
Inf => sing ;
|
|
Pres3Sg => sings ;
|
|
Past => sang ;
|
|
PastPart => sung ;
|
|
PresPart => singing
|
|
}
|
|
} ;
|
|
|
|
regVerb : (walk : Str) -> Verb
|
|
= \walk ->
|
|
mkVerb walk (walk + "s") (walk + "ed")
|
|
(walk + "ed") (walk + "ing") ;
|
|
|
|
smartVerb : (verb : Str) -> Verb
|
|
= \verb -> case verb of {
|
|
b + ("a" | "e" | "o" | "u") + "y" => regVerb verb ;
|
|
cr + "y" => mkVerb verb (cr + "ies")
|
|
(cr + "ied") (cr + "ied") (cr + "ying") ;
|
|
refer + "ee" => let refereed = refer + "eed" in
|
|
mkVerb verb (verb + "s") refereed refereed (verb + "ing") ;
|
|
us + "e" => let used = us + "ed" in
|
|
mkVerb verb (verb + "s") used used (us + "ing") ;
|
|
wa + ("ch" | "sh" | "s" | "z" | "x") =>
|
|
mkVerb verb (verb + "es") (verb + "ed") (verb + "ed")
|
|
(verb + "ing") ;
|
|
_ => regVerb verb
|
|
} ;
|
|
|
|
irregVerb : (sing, sang, sung : Str) -> Verb
|
|
= \sing, sang, sung -> {s =
|
|
table {
|
|
Past => sang ;
|
|
PastPart => sung ;
|
|
x => (smartVerb sing).s ! x
|
|
}
|
|
} ;
|
|
|
|
Verb2 : Type = {s : VerbForm => Str ; prep : Str} ;
|
|
|
|
-- auxiliary for syntax
|
|
presentVerb : Verb -> Number -> Str = \verb, n ->
|
|
case n of {
|
|
Sg => verb.s ! Pres3Sg ;
|
|
Pl => verb.s ! Inf
|
|
} ;
|
|
|
|
copula : Number -> Str = \n ->
|
|
case n of {
|
|
Sg => "is" ;
|
|
Pl => "are"
|
|
} ;
|
|
|
|
|
|
} |