9.3
 compile-replace-Technik

9.3.1
 Sondernotation und der Befehl

Compile-Replace-Befehl 
Reguläre Ausdrücke RA zwischen "^[" RA "^]" auf einer Seite eines Transduktors können sekundär kompiliert und durch ihr Kompilat im Transduktor ersetzt werden.

Beispiel 9.3.1 (Stackbefehl compile-replace lower in xfst).


reg  u:["^[" l "+" "^]"];


compile-replace lower


pict

pict


Abbildung 9.3: Primär und sekundär kompilierter regulärer Ausdruck


Fragen

Wieviele Wörter erkennen die beiden Transduktoren?

9.3.2
 Reduplikation nochmals

Compile-Replace für unbegrenzte Reduplikation 

Reduplikation zur Pluralbildung im Malayischen

Stamm Reduplikation Bedeutung
buku buku-buku Buch
pelabuhan pelabuhan-pelabuhan Hafen
Die Stämme sind unmarkiert bezüglich Numerus. Mit der Reduplikation des ganzen Stammes entsteht eine morphologisch markierte Pluralform.

Abstrakte Pluralbildung für compile-replace-Einsatz ▸▸▸ 

Idee

Im Plural wird der Stamm 2-fach konkateniert auf der unteren Sprache:

{buku}^2

Alignierung

Upper: 0  0 b u k u +Plural   0
       |  | | | | | |         |
Lower: ^[ { b u k u }^2       ^]

define NRoots {buku}|{pelabuhan};  
 
define RDPrefix "^[" "{";  
define RDSuffix "}^2" "^]";  
 
define Num [  
   "+Unmarked":0  
 | "+Plural":RDSuffix  
];  
 
define AbsNoun [  
  ( 0:RDPrefix ) NRoots Num  
];

Problem

Die untere Sprache erlaubt Wörter, welche keine kompilierbaren RA ergeben. Welche? buku}^2^]

Untere Sprache kompilierbar machen und kompilieren 

Ungrammatisches herausfiltern

define BracketFilter [ ~ [       ! Niemals:  
   [ ?* RDPrefix ~$[RDSuffix] ]  ! Ein Prefix ohne nachfolgenden Suffix  
 | [ ~$[RDPrefix] RDSuffix ?* ]  ! oder ein Suffix ohne vorangehendes Prefix  
 ]];

Alles zusammensetzen

read regex AbsNoun .o. BracketFilter;  
 
compile-replace lower  
 
apply up bukubuku  
apply up buku

Vollreduplikation mit Marking und compile-replace ▸▸▸ 

define NRoots {buku}|{pelabuhan};  
 
define Pluralize [  
 NRoots -> "^[" "{" ... "}^2" "^]"  
];  
 
read regex [  
  NRoots "+Unmarked":0  
 | [ NRoots "+Plural":0 .o. Pluralize ]  
];  
 
compile-replace lower