10.3.  compile-replace-Technik

10.3.1.  Sondernotation und der Befehl

Compile-Replace-Befehl
Das XFST-Werkzeug erlaubt es, Ausdrücke der Form "^[" RA "^]" auf einer Seite eines Transduktors sekundär zu kompilieren und den Ausdruck durch sein Kompilat im Transduktor zu ersetzen.

Beispiel 10.3.1 (compile-replace in xfst).

reg  u:["^[" l "+" "^]"];  
 
compile-replace lower


pict

pict


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


Fragen

Wieviele Wörter erkennen die beiden Transduktoren?

10.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