mirror of
https://github.com/GrammaticalFramework/comp-syntax-gu-mlt.git
synced 2026-05-06 16:12:50 -06:00
lecture 3 live coding
This commit is contained in:
82
lectures/lecture03/MorphologyEng.gf
Normal file
82
lectures/lecture03/MorphologyEng.gf
Normal file
@@ -0,0 +1,82 @@
|
||||
resource MorphologyEng = {
|
||||
|
||||
-- to use:
|
||||
-- i -retain MorphologyEng.gf
|
||||
-- cc -table dog_N
|
||||
|
||||
param
|
||||
Number = Sg | Pl ;
|
||||
|
||||
VerbForm = Inf | Pres3Sg | Past | PastPart | PresPart ;
|
||||
|
||||
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
|
||||
} ;
|
||||
|
||||
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") ;
|
||||
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
|
||||
}
|
||||
} ;
|
||||
|
||||
|
||||
-- lexicon
|
||||
|
||||
dog_N = mkNoun "dog" "dogs" ;
|
||||
girl_N = mkNoun "girl" "girls" ;
|
||||
house_N = regNoun "house" ;
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user