Files
comp-syntax-gu-mlt/old-labs/lab2/grammar/intro/MicroResEng.gf
2025-03-17 18:09:48 +01:00

44 lines
914 B
Plaintext

-- live-coded MicroResEng for Lab 2
resource MicroResEng = {
param
Number = Sg | Pl ;
oper
-- phonological patterns
sibilant : pattern Str
= #("s" | "x" | "ch" | "sh" | "z") ;
vowel : pattern Str
= #("a" | "e" | "i" | "o" | "u") ;
-- the type of nouns
Noun : Type = {s : Number => Str} ;
-- worst-case paradigm
mkNoun : (sg, pl : Str) -> Noun
= \sg, pl -> {s = table {Sg => sg ; Pl => pl}} ;
-- regular paradigm
regNoun : (sg : Str) -> Noun
= \sg -> mkNoun sg (sg + "s") ;
-- smart paradigm
smartNoun : (sg : Str) -> Noun
= \sg -> case sg of {
x + #vowel + "y" => regNoun sg ;
x + "y" => mkNoun sg (x + "ies") ;
x + #sibilant => mkNoun sg (sg + "es") ;
_ => regNoun sg
} ;
-- overloaded paradigm for lexicographers
mkN = overload {
mkN : (sg : Str) -> Noun = smartNoun ;
mkN : (sg, pl : Str) -> Noun = mkNoun ;
} ;
}