1
0
forked from GitHub/gf-rgl

(Dut) Improve smart paradigms

This commit is contained in:
Inari Listenmaa
2018-06-05 11:35:32 +02:00
parent fad7cf0c6f
commit b9c81ed83f

View File

@@ -19,7 +19,14 @@ resource ResDut = ParamX ** open Prelude, Predef in {
NPCase = NPNom | NPAcc ; NPCase = NPNom | NPAcc ;
oper oper
consonant : pattern Str = #("b"|"c"|"d"|"f"|"g"|"h"|"j"|"k"|"l"|"m"|"n"|"p"|"q"|"r"|"s"|"t"|"v"|"w"|"x"|"y"|"z") ;
vowel : pattern Str = #("a"|"e"|"i"|"o"|"u") ;
dupCons : pattern Str = #("b"|"d"|"f"|"g"|"k"|"l"|"m"|"n"|"p"|"r"|"s"|"t") ; -- duplicable consonant
dupVow : pattern Str = #("aa"|"ee"|"oo"|"uu") ; -- actually duplicated vowel
diphthong : pattern Str = #("ei"|"eu"|"oe"|"ou"|"ie"|"ij"|"ui") ;
Noun = {s : NForm => Str ; g : Gender} ; Noun = {s : NForm => Str ; g : Gender} ;
mkNoun : (_,_ : Str) -> Gender -> Noun = \sg,pl,g -> { mkNoun : (_,_ : Str) -> Gender -> Noun = \sg,pl,g -> {
@@ -33,17 +40,16 @@ resource ResDut = ParamX ** open Prelude, Predef in {
} ; } ;
regNoun : Str -> Noun = \s -> case s of { regNoun : Str -> Noun = \s -> case s of {
_ + ("a" | "o" | "y" | "u" | "oe" | "é") => mkNoun s (s + "'s") Utr ; _ + ("a"|"o"|"y"|"u"|"oe"|"é") => mkNoun s (s + "'s") Utr ;
_ + ("oir" | "ion" | "je" | "c") => mkNoun s (s + "s") Neutr ; _ + ("oir"|"ion"|"je"|"c") => mkNoun s (s + "s") Neutr ;
? + ? + ? + _ + ? + ? + ? + _ + ("el" | "em" | "en" | "er" | "erd" | "aar" | "aard" | "ie") -- unstressed
("el" | "em" | "en" | "er" | "erd" | "aar" | "aard" | "ie") => -- unstressed => mkNoun s (s + "s") Utr ;
mkNoun s (s + "s") Utr ;
_ + ("i"|"u") => mkNoun s (endCons s + "en") Utr ;
b + v@("aa"|"ee"|"oo"|"uu") + c@? => mkNoun s (b + shortVoc v c + "en") Utr ;
b + ("ei"|"eu"|"oe"|"ou"|"ie"|"ij"|"ui") + ? => mkNoun s (endCons s + "en") Utr ;
_ + ("ie"|"ee") => mkNoun s (s + "ën") Utr ; -- zee→zeeën, knie→knieën. _ + ("ie"|"ee") => mkNoun s (s + "ën") Utr ; -- zee→zeeën, knie→knieën.
-- olie→oliën, industrie→industrieën with 2-arg constructor. -- olie→oliën, industrie→industrieën with 2-arg constructor.
b + v@("a"|"e"|"i"|"o"|"u") + c@? => mkNoun s (b + v + c + c + "en") Utr ; _ + ("i"|"u") => mkNoun s (endCons s + "en") Utr ;
b + v@#vowel + c@#dupCons => mkNoun s (b + v + c + c + "en") Utr ;
b + v@#dupVow + c@? => mkNoun s (b + shortVoc v c + "en") Utr ;
b + #diphthong + ? => mkNoun s (endCons s + "en") Utr ;
_ + "e" => mkNoun s (s + "s") Utr ; -- vrede→vredes. Might not be a good generalisation though. /IL2018 _ + "e" => mkNoun s (s + "s") Utr ; -- vrede→vredes. Might not be a good generalisation though. /IL2018
_ => mkNoun s (endCons s + "en") Utr _ => mkNoun s (endCons s + "en") Utr
} ; } ;
@@ -62,7 +68,6 @@ resource ResDut = ParamX ** open Prelude, Predef in {
_ => s _ => s
} ; } ;
dupCons : pattern Str = #("b"|"d"|"f"|"g"|"k"|"l"|"m"|"n"|"p"|"r"|"s"|"t") ;
add_s : Str -> Str = \s -> case s of { add_s : Str -> Str = \s -> case s of {
_ + "s" => s ; _ + "s" => s ;
@@ -99,12 +104,13 @@ resource ResDut = ParamX ** open Prelude, Predef in {
regAdjective : Str -> Adjective = \s -> regAdjective : Str -> Adjective = \s ->
let let
se : Str = case s of { se : Str = case s of {
_ + ("er"|"en"|"ig") => s + "e" ; --- for unstressed adjective suffixes _ + ("er"|"en"|"ig") => s + "e" ; --- for unstressed adjective suffixes
_ + ("i"|"u"|"ij") => endCons s + "e" ; _ + ("i"|"u"|"ij") => endCons s + "e" ; -- ambigu-ambigue
b + v@("aa"|"ee"|"oo"|"uu") + c@? => b + shortVoc v c + "e" ; _ + ("a"|"e"|"o") => s ; -- no e: lila-lila ; beige-beige ; indigo-indigo
b + ("ei"|"eu"|"oe"|"ou"|"ie"|"ij"|"ui") + ? => endCons s + "e" ;
b + v@("a"|"e"|"i"|"o"|"u" ) + "w" => s + "e" ; -- to prevent *blauwwe -- does this happen to other end consonants? b + v@#dupVow + c@? => b + shortVoc v c + "e" ;
b + v@("a"|"e"|"i"|"o"|"u" ) + c@? => b + v + c + c + "e" ; b + #diphthong + ? => endCons s + "e" ;
b + v@#vowel + c@dupCons => b + v + c + c + "e" ;
_ => endCons s + "e" _ => endCons s + "e"
} ; } ;
in reg2Adjective s se ; in reg2Adjective s se ;
@@ -215,8 +221,6 @@ param
_ => d_regVerb vergeten vergeet _ => d_regVerb vergeten vergeet
}; };
consonant : pattern Str = #("b"|"c"|"d"|"f"|"g"|"h"|"j"|"k"|"l"|"m"|"n"|"p"|"q"|"r"|"s"|"t"|"v"|"w"|"x"|"y"|"z") ;
vowel : pattern Str = #("a"|"e"|"i"|"o"|"u") ;
-- To make a stem out of a verb -- To make a stem out of a verb
-- If a stem ends in a 'v' then the 'v' changes into a 'f' -- If a stem ends in a 'v' then the 'v' changes into a 'f'
-- If a stem ends in a 'z' then the 'z' changes into an 's' -- If a stem ends in a 'z' then the 'z' changes into an 's'
@@ -243,7 +247,7 @@ param
-- Penultimate is vowel, but it doesn't double: either because -- Penultimate is vowel, but it doesn't double: either because
_+ #vowel + _ + #vowel + #consonant => kerf ; -- a) ≥2 syllables, e.g. ademen, rekenen, schakelen _+ #vowel + _ + #vowel + #consonant => kerf ; -- a) ≥2 syllables, e.g. ademen, rekenen, schakelen
-- b) diphthong, e.g. vriezen (ij + #consonant falls into the default case!) -- b) diphthong, e.g. vriezen (ij + #consonant falls into the default case!)
-- OBS. will do the wrong thing, if you use it on prefix verbs -- NB. this will do the wrong thing, if you use it on prefix verbs
_ + #vowel + ("w"|"j") => werk ; -- Don't double a vowel before a w or j (are there other consonants?) _ + #vowel + ("w"|"j") => werk ; -- Don't double a vowel before a w or j (are there other consonants?)