The implementation of the individual rules follows.
2 states, 10 arcs, Circular.
File length: 278 bytes
This rule was implemented as stated by Kirchhoff.
regex [ "(+voice,+cont,apical)" -> "(-voice,+cont,apical)" || StemInitial_ ];
6 states, 44 arcs, Circular.
File length: 391 bytes
This rule was implemented just as stated by Kirchhoff. It consists of two subrules:
regex [ "(-voice,affr,labial)" -> "(-voice,+cont,labial)" || StemInitial_ ]; 2 states, 10 arcs, Circular. File length: 276 bytes
regex [ "(-voice,affr,apical)" -> "(-voice,+cont,apical)" || StemInitial_ ]; 2 states, 10 arcs, Circular. File length: 276 bytes
2 states, 10 arcs, Circular.
File length: 198 bytes
This rule was implemented as stated by Kirchhoff.
regex [ "?" -> 0 // Onset_ ];
255 states, 5351 arcs, Circular.
File length: 16111 bytes
This rule was implemented just as stated by Kirchhoff. It consists of eight subrules:
regex [ "(+voice,vowel,[long,high,front,-round])" -> "(+voice,vowel,[high,front,-round])" ]; 1 state, 3 arcs, Circular. File length: 317 bytes
regex [ "(+voice,vowel,[long,high,front,+round])" -> "(+voice,vowel,[high,front,+round])" ]; 1 state, 3 arcs, Circular. File length: 317 bytes
regex [ "(+voice,vowel,[long,mid,front,-round])" -> "(+voice,vowel,[mid,front,-round])" ]; 1 state, 3 arcs, Circular. File length: 313 bytes
regex [ "(+voice,vowel,[long,mid,front,+round])" -> "(+voice,vowel,[mid,front,+round])" ]; 1 state, 3 arcs, Circular. File length: 313 bytes
regex [ "(+voice,vowel,[long,low,front,-round])" -> "(+voice,vowel,[low,front,-round])" ]; 1 state, 3 arcs, Circular. File length: 313 bytes
regex [ "(+voice,vowel,[long,high,back,+round])" -> "(+voice,vowel,[high,back,+round])" ]; 1 state, 3 arcs, Circular. File length: 313 bytes
regex [ "(+voice,vowel,[long,mid,back,+round])" -> "(+voice,vowel,[mid,back,+round])" ]; 1 state, 3 arcs, Circular. File length: 309 bytes
regex [ "(+voice,vowel,[long,low,back,-round])" -> "(+voice,vowel,[low,back,-round])" ]; 1 state, 3 arcs, Circular. File length: 309 bytes
rule04.fst was then produced through union building of all eight subrules. It was implemented one-plus (1+rule04.fst):
xfst[0]: load rule04.fst xfst[1]: one-plus 1 state, 25 arcs, Circular. File length: 1379 bytes
1 state, 3 arcs, Circular.
File length: 311 bytes
This rule was implemented only for the substituion /e:/
/E/, the other cases stated by Kirchhoff were not considered.
regex [ "(+voice,vowel,[long,mid,front,-round])" -> "(+voice,vowel,[low,front,-round])" ];
6 states, 124 arcs, Circular.
File length: 2139 bytes
This rule was implemented through the union building of two subrules, r6_1E:.fst and r6_2E.fst. The first one corresponds to the definition of the rule given by Kirchhoff in her rule 6. The second subrule is a completion of it, as stated in the explanatory text of her rule 11. The second subrule does not apply within a diphthong.
regex [ "(+voice,vowel,[long,low,front,-round])" \\ -> "(+voice,vowel,[long,mid,front,-round])" ]; 1 state, 3 arcs, Circular. File length: 323 bytes
regex [ "(+voice,vowel,[low,front,-round])"\\ -> "(+voice,vowel,[mid,front,-round])"\\ || _Vowel ]; 3 states, 50 arcs, Circular.
4 states, 14 arcs, Circular.
File length: 417 bytes
This rule was specified as stated in Kirchhoff's report [Kir95]:
regex [ "(+voice,vowel,[high,front,central,-round])" -> "(+voice,vowel,[high,front,central,+round])" || ?_"(+voice,vowel,[low,central])" ];
4 states, 112 arcs, Circular.
File length: 2176 bytes
This rule was specified as stated in Kirchhoff's report [Kir95]:
regex [ Vowel - Central -> "(+voice,vowel,[mid,central])" || \Stress_\Vowel ];
This rule was implemented one-plus (1+rule08.fst), so that it can change the input string at any potentially possible position:
xfst[0]: load rule08.fst xfst[1]: one-plus 3 states, 72 arcs, Circular. File length: 2112 bytes
4 states, 74 arcs, Circular.
File length: 2061 bytes
This rule was specified as stated in Kirchhoff's report [Kir95]:
regex [ "(+voice,vowel,[low,central])" -> 0 || Vowel_? ];
This rule was implemented one-plus (1+rule09.fst), so that it can change the input string at any potentially possible position:
xfst[0]: load rule09.fst xfst[1]: one-plus 3 states, 74 arcs, Circular. File length: 2061 bytes
4 states, 121 arcs, Circular.
File length: 2213 bytes
This rule was implemented through the composition of two subrules: the first one, r10_16.fst, for the substituion /6/
/@/, and the second one, r10_2del.fst, for the deletion of the vowel.
regex [ "(+voice,vowel,[low,central])" -> "(+voice,vowel,[mid,central])" \\ || \PrimStress Vowel_ ]; 3 states, 75 arcs, Circular. File length: 2069 bytes
regex [ Vowel -> 0 || \PrimStress_"(+voice,vowel,[mid,central])" ]; 4 states, 121 arcs, Circular. File length: 2250 bytes
This rule was implemented one-plus (1+rule10.fst), so that it can process the input string at any potentially possible position:
xfst[0]: load rule10.fst xfst[1]: one-plus 4 states, 123 arcs, Circular. File length: 2213 bytes
4 states, 29 arcs, Circular.
File length: 580 bytes
For the implementation of this rule, a special class was created, ReductionASchwa, which containing exactly those phonemes that are affected by the rule. They are listed in the cited report.
regex [ ReductionASchwa -> 0 // \PrimStress_ASchwa ];
4 states, 24 arcs, Circular.
File length: 698 bytes
This rule was implemented through union building over two subrules: r12_1nm.fst, for the labial nasals and r12_2nN.fst, for the velar nasals.
regex [ "(+voice,nasal,apical)" -> "(+voice,nasal,labial)" // _Labial.#. ]; 5 states, 32 arcs, Circular. File length: 535 bytes
regex [ "(+voice,nasal,apical)" -> "(+voice,nasal,velar)" || _Back.#. ]; 5 states, 28 arcs, Circular. File length: 474 bytes
6 states, 61 arcs, Circular.
File length: 780 bytes
This rule was implemented through union building of three subrules: the first one, r13_1mpf.fst, for the labial plosives, the second one, r13_2nts.fst, for the apical plosives and the third one, r13_3Nks.fst, for the velar plosives .
regex [ 0 -> "(-voice,-cont,labial)" // m_MinusVoiPlusCont.#. ]; 4 states, 25 arcs, Circular. File length: 571 bytes
regex [ 0 -> "(-voice,-cont,apical)" // n_MinusVoiPlusCont.#. ]; 4 states, 25 arcs, Circular. File length: 569 bytes
regex [ 0 -> "(-voice,-cont,velar)" // N_MinusVoiPlusCont.#. ]; 4 states, 25 arcs, Circular. File length: 565 bytes
5 states, 90 arcs, Circular.
File length: 1282 bytes
Rule 14 was implemented through union building of two subrules. The
first one, r14_1all.fst, the most general one, stands for the
deletion of all plosives between a nasal and a continuant
consonant. The second one, r14_2nts.fst, is for the specific
case /nts/
/ns/. The extra specification of this
particular case was necessary, as /ts/ is declared as one phoneme and
is therefore recognized by the XFST system as an atom. However,
the union of both these rules is equivalent to the declaration of the
rule in the report [Kir95]
regex [ ContMinus -> 0 // Nasal_ContPlus.#. ]; 6 states, 101 arcs, Circular. File length: 1292 bytes
regex [ "(-voice,affr,apical)" -> "(-voice,+cont,apical)" || "(+voice,nasal,apical)"_.#. ]; 4 states, 13 arcs, Circular. File length: 316 bytes
Rule 15 was not implemented in the final version of the automaton.
6 states, 104 arcs, Circular.
File length: 2176 bytes
regex [ "(+voice,vowel,[low,central])" -> "(+voice,+cont,uvular)" // Vowel_\Vowel.#. ];
7 states, 137 arcs, Circular.
File length: 2302 bytes
regex [ "(-voice,+cont,velar)" -> "(-voice,+cont,glottal)" // ?_\Vowel.#. ];
4 states, 25 arcs, Circular.
File length: 669 bytes
regex [ "(+voice,lateral,apical)" -> "(+voice,vowel,[high,front,central,-round])" || PlusLowPlusFront_FrontPlus ];
6 states, 130 arcs, Circular.
File length: 3251 bytes
This rule was implemented stem-final, as stated in Kirchhoff's report [Kir95].
regex [ "(+voice,vowel,[mid,central])" -> 0 || Consonant_Nasal.#. | Lateral.#. ];
12 states, 333 arcs, Circular.
File length: 3251 bytes
Rule 20 was implemented through composition of two subrules: r20_1Schwa.fst for the Schwa-deletion and r20_2Assim.fst for the progressive place assimilation.
regex [ "(+voice,vowel,[mid,central])" -> 0 || Consonant_Nasal.#. ]; 6 states, 125 arcs, Circular. File length: 2341 bytes
4 states, 41 arcs, Circular.
File length: 732 bytes
r20_2Assim.fst was produced through union building over two subrules:
regex [ "(+voice,nasal,apical)" -> "(+voice,nasal,labial)" || Labial_.#. ]; 4 states, 25 arcs, Circular. File length: 520 bytes
regex [ "(+voice,nasal,apical)" -> "(+voice,nasal,velar)" || Velar_.#. ]; 4 states, 22 arcs, Circular. File length: 463 bytes
Rule 21 was implemented through composition of two subrules: r21_1Schwa.fst for the Schwa-deletion and r21_2Assim.fst for the regressive place assimilation.
regex [ "(+voice,vowel,[mid,central])" -> 0 || Nasal_Nasal.#. ]; 6 states, 25 arcs, Circular. File length: 397 bytes
regex [ "(+voice,nasal,apical)" -> "(+voice,nasal,labial)" || _"(+voice,nasal,labial)".#. ]; 5 states, 13 arcs, Circular. File length: 272 bytes
rule21.fst was then produced through composition over the two subrules.
12 states, 87 arcs, Circular.
File length: 949 bytes
Rule 22 was implemented with the union building of two rules, rule22a.fst and rule22b.fst, as stated in Kirchhoff's report [Kir95]. The first rule is for the deletion of one [+voi,-cont] consonant, the second one for the deletion of the /n/. The rule was implemented stem-final.
15 states, 173 arcs, Circular.
File length: 1125 bytes
Rule 22(a) was implemented through composition of three subrules: r22a_1Schwa.fst, r22a_2Assim.fst and r22a_3Consonant.fst.
regex [ "(+voice,vowel,[mid,central])" -> 0 || PlusVoiMinusCont_Nasal.#. ]; 6 states, 36 arcs, Circular. File length: 552 bytes
4 states, 41 arcs, Circular.
File length: 732 bytes
This subrule was implemented through union bulding of two subrules: r22a_2Labial.fst and r22a_2Velar.fst.
regex [ "(+voice,nasal,apical)" -> "(+voice,nasal,labial)" || Labial_.#. ]; 4 states, 25 arcs, Circular. File length: 520 bytes
regex [ "(+voice,nasal,apical)" -> "(+voice,nasal,velar)" || Velar_.#. ]; 4 states, 22 arcs, Circular. File length: 520 bytes
Through union building r22_2Assim was created.
regex [ PlusVoiMinusCont -> 0 || _Nasal.#. ]; 5 states, 33 arcs, Circular. File length: 492 bytes
Through composition of the three subrules rule22a.fst was produced.
rule 22(b) was produced through the compostion of two subrules: r22b_1Schwa.fst for the Schwa-deletion and r22b_2n.fst for the deletion of the /n/ before a /m/.
regex [ "(+voice,vowel,[mid,central])" -> 0 || "(+voice,nasal,apical)"_"(+voice,nasal,labial)".#. ]; 6 states, 18 arcs, Circular. File length: 340 bytes
regex [ "(+voice,nasal,apical)" -> 0 || _"(+voice,nasal,labial)".#. ]; 5 states, 13 arcs, Circular. File length: 272 bytes
Through composition of the two subrules rule22b.fst was produced.
rule22.fst was then produced through union building of rule22a.fst and rule22b.fst.
16 states, 147 arcs, Circular.
File length: 919 bytes
Rule 23 was implemented with the composition of three subrules: the first one for the schwa-deletion, the second one for the assimilation of the nasal and the third one for the nasalisation of the consonant.
regex [ "(+voice,vowel,[mid,central])" -> 0 || ContMinus_Nasal.#. ]; 6 states, 48 arcs, Circular. File length: 709 bytes
5 states, 46 arcs, Circular.
File length: 618 bytes
This subrule was built through union building over three subrules:
regex [ Nasal -> "(+voice,nasal,velar)" || MinusContPlusVel_.#. ]; 4 states, 20 arcs, Circular. File length: 418 bytes
regex [ Nasal -> "(+voice,nasal,apical)" || MinusContPlusApi_.#. ]; 4 states, 20 arcs, Circular. File length: 422 bytes
regex [ Nasal -> "(+voice,nasal,labial)" || MinusContPlusLab_.#. ]; 4 states, 20 arcs, Circular. File length: 422 bytes
5 states, 19 arcs, Circular. File length: 564 bytes
This subrule was built through union building over three subrules:
regex [ MinusContPlusLab -> "(+voice,nasal,labial)" || _"(+voice,nasal,labial)".#. ]; 5 states, 19 arcs, Circular. File length: 331 bytes
regex [ MinusContPlusApi -> "(+voice,nasal,apical)" || _"(+voice,nasal,apical)".#. ]; 5 states, 19 arcs, Circular. File length: 331 bytes
regex [ MinusContPlusVel -> "(+voice,nasal,velar)" || _"(+voice,nasal,velar)".#. ]; 5 states, 19 arcs, Circular. File length: 325 bytes
The subrules r23_2Assim.fst and r23_3Nasal.fst were each built through union building of the corresponding subrules listed above. rule23.fst was then implemented with composition of the three subrules, r23_1Schwa.fst, r23_2Assim.fst and r23_3Nasal.fst in this order.
709 states, 30634 arcs, Circular.
File length: 107534 bytes
Rule 24 was implemented through union building of seven subrules, which follow:
regex [ "(-voice,-cont,labial)" -> "(+voice,-cont,labial)" || PlusVoi_PlusVoi ]; 4 states, 112 arcs, Circular. File length: 2761 bytes
regex ["(-voice,-cont,apical)" -> "(+voice,-cont,apical)" || PlusVoi_PlusVoi ]; 4 states, 112 arcs, Circular. File length: 2761 bytes
regex [ "(-voice,-cont,velar)" -> "(+voice,-cont,velar)" || PlusVoi_PlusVoi ]; 4 states, 112 arcs, Circular. File length: 2759 bytes
regex [ "(-voice,+cont,labial)" -> "(+voice,+cont,labial)" || PlusVoi_PlusVoi ]; 4 states, 112 arcs, Circular. File length: 2761 bytes
regex [ "(-voice,+cont,apical)" -> "(+voice,+cont,apical)" || PlusVoi_PlusVoi ]; 4 states, 112 arcs, Circular. File length: 2761 bytes
regex [ "(-voice,+cont,palato)" -> "(+voice,+cont,palato)" || PlusVoi_PlusVoi ]; 4 states, 112 arcs, Circular. File length: 2761 bytes
regex ["(-voice,+cont,palatal)" -> "(+voice,+cont,palatal)" || PlusVoi_PlusVoi ]; 4 states, 112 arcs, Circular. File length: 2763 bytes
Rule24.fst was then built through union buiding over all seven subrules.
Rule 25 (Laxing of Constriction: labials) and rule 26 (Laxing of Constriction: velars) were not implemented.
4 states, 69 arcs, Circular.
File length: 1224 bytes
From rule 27 only the subrule (c) (as described in [Kir95]) was implemented (Deletion before fricatives). This subrule is described below:
regex [ ContMinus -> 0 || Nasal_ContPlus ];
Rule 28 (Cluster simplification) was not implemented.
4 states, 85 arcs, Circular.
File length: 2153 bytes
regex [ "(+voice,vowel,[mid,central])" -> "(+voice,vowel,[low,central])" || Consonant_"(+voice,+cont,uvular)" ];
891 states, 24845 arcs, Circular.
File length: 83721 bytes
This rule was implemented here consisting of three subrules, which were then composed: the first rule is the /r/ deletion, the second rule is the substitution of /@/ into /6/ an the third is the substitution of the long vowels by central ones. This last subrule is itself built through union building of five subrules.
regex [ "(+voice,+cont,uvular)" -> 0 // LongVowel_Schwa "(+voice,nasal,apical)" .#. ]; 8 states, 63 arcs, Circular. File length: 1060 bytes
regex [ "(+voice,vowel,[mid,central])" -> "(+voice,vowel,[low,central])" || LongVowel_"(+voice,nasal,apical)" ]; 4 states, 37 arcs, Circular. File length: 1025 bytes
regex [ "(+voice,vowel,[long,high,front,-round])" -> "(+voice,vowel,[high,front,central,-round])" || Consonant_"(+voice,vowel,[low,central])" "(+voice,nasal,apical)" ]; 6 states, 114 arcs, Circular. File length: 2221 bytes
regex [ "(+voice,vowel,[long,high,front,+round])" -> "(+voice,vowel,[high,front,central,+round])" || Consonant_"(+voice,vowel,[low,central])" "(+voice,nasal,apical)" ]; 6 states, 114 arcs, Circular. File length: 2221 bytes
regex [ "(+voice,vowel,[long,high,back,+round])" -> "(+voice,vowel,[high,back,central,+round])" || Consonant_"(+voice,vowel,[low,central])" "(+voice,nasal,apical)" ]; 6 states, 114 arcs, Circular. File length: 2221 bytes
regex [ "(+voice,vowel,[long,mid,back,+round])" -> "(+voice,vowel,[mid,back,central,+round])" || Consonant_"(+voice,vowel,[low,central])" "(+voice,nasal,apical)" ]; 6 states, 114 arcs, Circular. File length: 2221 bytes
regex [ "(+voice,vowel,[long,low,front,-round])" -> "(+voice,vowel,[low,front,-round])" || Consonant_"(+voice,vowel,[low,central])" "(+voice,nasal,apical)" ]; 6 states, 114 arcs, Circular. File length: 2221 bytes
regex [ "(+voice,vowel,[long,mid,front,+round])" -> "(+voice,vowel,[mid,front,central,+round])" || Consonant_"(+voice,vowel,[low,central])" "(+voice,nasal,apical)" ]; 6 states, 114 arcs, Circular. File length: 2221 bytes
The rule r30_3central.fst was generated through union building of the rules r30_3(...).fst defined above.
522 states, 14478 arcs, Circular.
File length: 48258 bytes
rule30.fst was then implemented composing the rules r30_1r.fst, r30_2@.fst and r30_3central.fst.
9 states, 43 arcs, Circular.
File length: 360 bytes
In Kirchhoff's report, this rule serves the schwa-deletion and cluster reduction taking place in one pass. It was implemented there like that because the Two-Level formalism does not permit rules to apply sequentially. But working with finite state transducers permits us to compose two defined rules, forcing them to apply sequentially. This is the reason why rule31.fst was implemented here consisting of two subrules: the first one for the cluster reduction and the second one for the schwa-deletion. The order of application of the subrules doesn't actually matter in this case.
regex [ "(-voice,-cont,apical)" -> 0 || "(-voice,+cont,apical)"_"(+voice,vowel,[mid,central])" ]; 6 states, 29 arcs, Circular. File length: 371 bytes
regex [ "(+voice,vowel,[mid,central])" -> 0 || "(-voice,+cont,apical)"_? ]; 5 states, 21 arcs, Circular. File length: 312 bytes
rule31.fst was then implemented composing both subrules defined above.
Rule 32 (Velar reinforcement) was not implemented because of its strong dialectal character.
13 states, 301 arcs, Circular. \newline File length: 2592 bytes
This rule was implemented stem-final, as stated. It consists of two subrules: the first one for the back vowels, the second one for the front vowels. The subrules were implemented as follows:
regex [ "(-voice,-cont,velar)" -> "(-voice,+cont,velar)" || BackVowel_StemInitial ]; 4 states, 40 arcs, Circular. File length: 936 bytes
regex [ "(-voice,-cont,velar)" -> "(-voice,+cont,palatal)" || FrontVowel_StemInitial ]; 4 states, 55 arcs, Circular. File length: 1380 bytes
rule33.fst was implemented through union building over both subrules.
This rule was implemented stem-final, as required by Kirchhoff. In order to avoid overgeneration of forms like
?'E:n.+lIk(for ähnlich), it was restricted to the suffix +ig/+IC
regex [ "(-voice,+cont,palatal)" -> "(-voice,-cont,velar)" || "+" "(+voice,vowel,[high,front,central,-round])"_StemInitial+ ]; 5 states, 25 arcs, Circular. File length: 383 bytes
Rule 35 (assimilation of voicelessness) was left out when building of the final version of x-vario.
13 states, 155 arcs, Circular.
File length: 967 bytes
This rule was implemented consisting of two subrules: the first one for the labial nasals, the second one for the velar nasals. The apical nasal could be omitted here, as no substitution takes place for it. The subrules were implemented as follows:
regex [ "(+voice,nasal,apical)" -> "(+voice,nasal,labial)" || _StemBoundary Labial ]; 5 states, 37 arcs, Circular. File length: 552 bytes
regex [ "(+voice,nasal,apical)" -> "(+voice,nasal,velar)" || _StemBoundary Velar ]; 5 states, 34 arcs, Circular. File length: 495 bytes
rule36.fst was then implemented through union building of the two subrules.
Rules 37 (Geminate simplification) was not implemented, because it applies over words boundaries and is therefore irrelevant for the purposes of processing lexical representations. Rule 38 (place assimilation of /t/) was not implemented because it seems to occur only seldom.
Thorsten Trippel Mon Mar 20 14:35:50 MET 2000