Alphabet a b c d e f g h i ï j k l m n o p q r s t u v w x y z æ ä ø ö å á é í Å Ä Ö Ø Æ Á Á É Ó Ú Í À È Ò Ù Ì Ë Ü Ï Â Ê Ô Û Î Ã Ý þ Ñ Ð á é ó ú í à è ò ù ì ë ü ï â ê ô û î ã ý þ ñ ð ß ª ß ç 0:a 0:e 0:ö 0:å A1:a A1:e ! A2:a A2:a A2:e A2:0 A3:a A3:o A3:e A4:a A4:e A4:i A4:o E1:i E1:e E1:y I1:i I1:e I2:i I2:e I2:0 I3:i I3:j I4:e I4:i I4:0 O1:o ! O2:o O2:o O2:0 ! U1:u U1:ö U1:u U1:ö U1:å U2:e Æ:æ Æ:i Æ:y Å1:å Å1:u Å1:o ! Å2:a Å2:e Å2:a Å2:e Å2:å Å3:å Å3:ö Å4:å D1:0 %#:0 %>:0 %+:0 X2:0 ; Sets Letter = a b c d e f g h i ï j k l m n o p q r s t u v w x y z æ ä ø ö å ; C = b c d f g h j k l m n p q r s t v w x z ; CJV = b c d f g h k l m n p q r s t w x z ; V = a e i ï o u y æ ä ø ö å A1 A2 A3 A4 E1 I1 I2 I3 I4 O1 O2 U1 U2 Æ Å1 Å2 Å3 Å4 ; DobCons = s m ; Bound = # %> ; WordBound = # ; DomainBound = %# %+ ; Definitions Vowel = [ :V ] ; Nucleus = [ Vowel (Vowel)] ; Cons = [ C [ :C* | D1:*]] ; ConsJV = [CJV [ :C* | D1:*]]; AccGenSg = [ %>: [m | n ]] ; Onset = DomainBound: C*; Syllable = Onset Nucleus Cons; OpenFinal = Cons Nucleus DomainBound: ; OpenOrClosedFinal = [Cons (Nucleus) DomainBound:]; Rules ! Bisyllabic stems ! ================ ! Rules for ie nouns ! ------------------ ! Final vowel is ie "I2 as ie" I2:i <=> Syllable _ 0:e (%>: [ I3:j | Cons ]) DomainBound:; ! Final vowel is e "I2 as e" I2:e <=> Syllable _ %>: OpenFinal; Syllable _ %>: d h ; ! Final vowels is 0, suffix is vowel-initial "I2 as 0" I2:0 <=> Syllable _ %>: Nucleus (Cons) (Nucleus) DomainBound: ; ! Rules for oe nouns ! ------------------ "O2 as oe and o" O2:o <=> Syllable _ 0:e (%>: [ I3:j | Cons ]) DomainBound: ; Syllable _ %>: OpenFinal ; "O2 as 0" O2:0 <=> Syllable _ %>: A1: OpenFinal ; ! Rules for a-nouns ! ----------------- ! A2 as e, as in three-syllabic forms "A2 as e" A2:e <=> Syllable _ %>: OpenFinal ; ! A2 not realised, followed by a nucleus-initial affix "A2 as 0" A2:0 <=> Syllable _ %>: Nucleus (Cons) (Nucleus) (:0) DomainBound: ; ! Rules for e-nouns ! ----------------- ! Rules for two-syllable contexts ! =============================== "I1 as ie" I1:i <=> Syllable _ 0:e Cons [Nucleus %>: | V:0 %>: Nucleus] OpenFinal ; Syllable Nucleus Cons [Nucleus %>: | (V:0) %>: Nucleus] Cons _ 0:e DomainBound:; "O1 as oe" O1:o <=> Syllable _ 0:e Cons [Nucleus %>: | (V:0) %>: Nucleus] OpenFinal ; "A3, I1, O1 when preceding v" Cx:Cy <=> Syllable _ v (Cons) [ Nucleus (AccGenSg) | V:0 %>: [h | :i ]] DomainBound: ; where Cx in (A3 I1 O1) Cy in (o u o) matched; ! The rules for a preceding j (A-j, C-j) are strictly parallel. "I1, O1 when preceding j" Cx:Cy <=> Syllable _ j (Cons) [ Nucleus (AccGenSg) | V:0 %>: [h | :i ]] DomainBound: ; where Cx in (I1 O1) Cy in (i o) matched; ! The B-x and C-x cases are covered by the following rules ! The second context specifies two-syllabic stems, where the stem vowel is reduced ! to 'e' when inflected. 'maana' words were missing, added A2:e to cover Ine and ! Ela Sg of this noun class as well. SNM 13.5.2002 "I1 as e" I1:e <=> Syllable _ ConsJV [ Nucleus (AccGenSg) | V:0 %>: [h | :i ]] DomainBound: ; Syllable [ [I2:e | O2:o | A2:e | U2:e ] %>: | V:0 %>: [:e | :i]] Cons _ DomainBound: ; "O1 as o, A3 as e" Cx:Cy <=> Syllable _ ConsJV [Nucleus (AccGenSg) | V:0 %>: [h | :i]] DomainBound: ; where Cx in (A3 O1) Cy in (e o) matched; ! Rules for I4: "I4 as e" I4:e <=> Syllable Nucleus Cons _ (AccGenSg) DomainBound: ; "I4 as i" I4:i <=> Syllable Nucleus Cons _ %>: OpenFinal ; "I4 as 0" I4:0 <=> Syllable Nucleus Cons _ %>: [Nucleus (Cons Nucleus) | h] DomainBound: ; ! Rule for U2 "U2 as 0" U2:0 <=> DomainBound: C* Nucleus Cons _ %>: [ h | Nucleus ( Cons ) ( Nucleus ) ] DomainBound: ; "Consonant doubling" D1:X <=> A1:a X: _ ; X: _ I1:i 0:e ; where X in DobCons; ! Umlaut rules ! ============ ! Monophtongs ! ----------- ! Umlaut in row A in the umlaut table "Umlaut in ie-context, monopthongs" Cx:Cy <=> Onset _ Cons [I2:i | I2:e] ; where Cx in (Æ A4 Å1) Cy in (i e u ) matched ; ! Umlaut in row B in the umlaut table "Umlaut in a-context, monopthongs" Cx:Cy <=> Onset _ Cons I2:0 %>: A1:a ; where Cx in (Æ A4 Å1) Cy in (æ a å ) matched ; ! Umlaut in row C in the umlaut table "Umlaut in oe-context, monopthongs" Cx:Cy <=> Onset _ Cons O2:o ; where Cx in (Æ A4 Å1) Cy in (æ a å ) matched ; ! Umlaut in row E in the umlaut table "Umlaut before affixes on A1:e, row E, monophtongs" Cx:Cy <=> Onset _ Cons [I2:0|O2:0] %>: A1:e OpenOrClosedFinal ; where Cx in (Æ A4 Å1) Cy in (y o o ) matched ; ! Umlaut in row F in the umlaut table "Umlaut before affixes on -i, row F, monopthongs" Cx:Cy <=> Onset _ Cons I2:0 %>: :i (Cons Nucleus) DomainBound: ; where Cx in (Æ A4 Å1) Cy in (i i u ) matched ; ! Dipthongs ! --------- ! Umlaut in row A in the umlaut table "Umlaut in ie-context, diphthongs" Cx:Cy <=> Onset _ 0:e Cons [ I2:i | I2:e ] ; where Cx in (E1 Å2 Å3 U1) Cy in (i a å u ) matched; ! Umlaut in row B in the umlaut table "Umlaut in a-context, diphthongs" Cx:Cy <=> Onset _ 0:a Cons I2: %>: A1:a ; where Cx in (E1 Å2 Å3 U1) Cy in (e a å u ) matched; ! Umlaut in row C in the umlaut table "Umlaut in oe-context, diphthongs" Cx:Cy <=> Onset _ 0:a Cons O2:o ; where Cx in (E1 Å2 Å3 U1) Cy in (e a å å ) matched; "Å4 to åe and åa" Å4:å <=> Onset _ 0:a C+ I2: %>: A1: ; Onset _ 0:e C+ [I2:i |I2:e | I2:0 %>: Nucleus] ; ! Umlaut in row E in the umlaut table "Umlaut before affixes with A1:e, row E, diphthongs" Cx:Cy <=> Onset _ 0:Cy Cons [I2:0 | O2:0] %>: A1:e OpenOrClosedFinal ; where Cx in (Å2 Å3 U1) Cy in (å å å ) matched; ! Umlaut in row E in the umlaut table ie->yö "Umlaut before affixes with A1, row E, ie->yö" E1:y <=> Onset _ 0:ö Cons [I2:0 | O2:0] %>: [A1:a | A1:e] OpenOrClosedFinal ; ! Umlaut in row F in the umlaut table "Umlaut before affixes on -i, row F, diphthongs" Cx:Cy <=> Onset _ 0:Cy Cons I2:0 %>: :i (Cons Nucleus) DomainBound: ; where Cx in (E1 Å2 Å3 U1) Cy in (e e ö ö ) matched; ! Other rules ! =========== ! Rules for I3 (genitive plural): "I3 as j" I3:j <=> [I2:i 0:e | A2: | O2:o 0:e] %>: _ DomainBound: ; "I2 not as 0" I2:0 /<= Onset Å4:å 0:e Cons _ %>: I3: DomainBound: ; ! Rules for surface dipthtongs ! ============================ "Inserted a" 0:a <=> Onset [E1:| Å2: | Å3: | U1:] _ Cons I2: %>: A1:a ; Onset [E1:| Å2: | Å3:| U1:] _ Cons O2:o ; Onset Å4: _ C+ I2: %>: A1: ; "Inserted e" 0:e <=> Syllable [I2:|O2:] _ (%>: [ I3:j | Cons ]) DomainBound:; Syllable I1: _ Cons [Nucleus %>: | V:0 %>: Nucleus] OpenFinal ; Syllable Nucleus Cons [Nucleus %>: | (V:0) %>: Nucleus] Cons I1: _ DomainBound:; Syllable O1: _ Cons [Nucleus %>: | (V:0) %>: Nucleus] OpenFinal ; Onset [E1:| Å2:| Å3:| U1:] _ Cons [ I2:i | I2:e ] ; Onset Å4: _ C+ [I2:i |I2:e | I2:0 %>: Nucleus] ; [I2: | O2:] _ %>: I3: DomainBound: ; Onset [E1:|Å2:] _ Cons I2:0 %>: :i (Cons Nucleus) DomainBound: ; "Inserted ö" 0:ö <=> Onset E1: _ Cons [I2:0 | O2:0] %>: [A1:a | A1:e] OpenOrClosedFinal ; Onset [Å3:|U1:] _ Cons I2:0 %>: :i (Cons Nucleus) DomainBound: ; "Inserted å" 0:å <=> Onset [Å2:| Å3:| U1:] _ Cons [I2:0 | O2:0] %>: A1:e OpenOrClosedFinal ; ! New-style stem vowel alternations ! ================================= "e deletion before i-initial suffix" e:0 <=> _ X2:0 i: ; ! Blocking rules to prevent overgeneration ! ======================================== "Berre 0:e etter leksikalsk vokal" 0:e => E1:i _ ; E1:e _ ; I1:i _ ; I2:i _ ; O1:o _ ; O2:o _ ; U1:u _ ; Å2:a _ ; Å2:e _ ; Å3:å _ ; Å4:å _ ; "Berre 0:a etter leksikalsk vokal" 0:a => E1:e _ ; U1:u _ ; Å2:a _ ; Å3:å _ ; Å4:å _ ; "Berre 0:ö etter leksikalsk vokal" 0:ö => E1:y _ ; U1:ö _ ; Å3:ö _ ; "Berre 0:å etter leksikalsk vokal" 0:å => U1:å _ ; Å2:å _ ; Å3:å _ ;