intro to Lab2 from today's lecture

This commit is contained in:
Aarne Ranta
2024-04-17 13:18:04 +02:00
parent 41536b43a0
commit 2fa44fabae
3 changed files with 59 additions and 0 deletions

View File

@@ -0,0 +1,15 @@
--# -path=.:../abstract
concrete MicroLangEng of MicroLang =
open MicroResEng
in {
lincat
N = Noun ;
lin
animal_N = mkN "animal" ;
apple_N = mkN "apple" ;
baby_N = mkN "baby" ;
woman_N = mkN "woman" "women" ;
}

View File

@@ -0,0 +1,44 @@
-- 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 ;
} ;
}