4.2
 Reguläre Ausdrücke in XFST

4.2.2 Operatoren
4.3 Sprachen
4.3.1 Zeichen(ketten)
4.3.2 Konkatenation
4.3.3 Reguläre Sprachen
4.4 Sprachen von EA
4.4.1 DEA
4.4.2 NEA
4.4.3 Äquivalenz
4.5 Vertiefung

Reguläre Ausdrücke (RA) in XFST  

Beispiel 4.2.1 (Einlesen und Kompilieren eines RA mit xfst).
read regex RA ; # EA auf Stack
define varname RA ; # EA als Variable

Beziehung zwischen RA, DEA und formalen Sprachen 
Zu jedem regulären Ausdruck RA existiert mindestens ein EA, der die vom RA bezeichnete reguläre Sprache akzeptiert.


pict

Abbildung 4.3: Beziehung zwischen formalen Sprachen, regulären Ausdrücken und endlichen Automaten (aus [BEESLEY und KARTTUNEN 2003b])


4.2.1
 Zeichensymbole

Normales Zeichensymbol 

Beispiel 4.2.2 (xfst und Zustandsdiagramm).

read regex a ;

pict

Zulässige Einzelsymbole

Jedes der folgenden alphanumerischen Symbole x bezeichnet als regulärer Ausdruck (RA) die Sprache {x}:

%-geschütztes Zeichensymbol (escape symbol

Beispiel 4.2.3 (xfst und Zustandsdiagramm).

read regex %( ;

pict

Spezialsymbole

Das Zeichen % gefolgt von einem der folgenden Symbole x

0 ? + * | . , : ; - / % ~ ( ) [ ] { } " \

bezeichnet als RA die Sprache {x}.

Hinweise

Zitiertes Zeichensymbol 

Beispiel 4.2.4 (xfst und Zustandsdiagramm).

read regex "(" ;

pict

Mehrzeichensymbol

Jedes Zeichen x zwischen doppelten Hochkommata ausser

\, " und getippter Zeilenwechsel

bezeichnet als RA die Sprache {x}.

Hinweis

Zwischen Hochkommata verlieren alle Zeichen ihre Sonderbedeutung.

Backslash-Notation zwischen doppelten Hochkommata 
Backslash-Notation für nicht-druckbare Zeichen und numerische Zeichenkodes sind zwischen doppelten Hochkommata möglich.

Hinweise

Symbole aus mehreren Zeichen (multicharacter symbols

Beispiel 4.2.5 (xfst und Zustandsdiagramm).

read regex Nominativ ;

read regex %+masc%+ ;

pict
pict

Mehrzeichensymbol

Jede Folge von normalen Zeichen oder %-geschützten Zeichen ist ein Mehrzeichensymbol x, das als RA die Sprache {x} bezeichnet.

Hinweis

Mehrzeichensymbole werden von einem endlichen Automaten in einem einzigen Zustandübergang konsumiert.

Zitierte Mehrzeichensymbole  
Auch Mehrzeichensymbole lassen sich mit doppelten Hochkommata zitieren. Es gelten die gleichen Regeln wie bei den Einzelzeichensymbole. In zitierten Symbolen verliert % seine Rolle als Escape-Zeichen.

Beispiel 4.2.6 (xfst und Zustandsdiagramm).

read regex "+Nom";

pict

Guter Programmierstil

Epsilon-Symbol 
Das Ziffern-Zeichen 0 ist ein Spezial-Symbol, das als RA die Sprache {𝜖} bezeichnet.

Beispiel 4.2.7 (xfst und Zustandsdiagramm).

read regex 0 ;

pict

Hinweise

Um die Ziffer 0 als Einzelzeichen zu erhalten, muss sie geschützt oder zitiert werden.

Die Sprache {𝜖} kann auch mit "" oder [] notiert werden.

Any-Symbol 
Das Zeichen ? ist ein Spezial-Symbol, das als RA die Sprache aller Zeichenketten aus 1 Symbol bezeichnet.

Beispiel 4.2.8 (xfst und Zustandsdiagramm).

read regex ? ;

pict

Hinweise

4.2.2
 Operatoren

Reguläre Operatorenausdrücke in xfst

Wenn die beiden RA A und B die Sprachen A bzw. B bezeichnen, dann bezeichnet der RA

Hinweise zur Operator-Syntax  

Beispiel 4.2.9 (Präzedenz von Operatoren). Welcher der beiden RA entspricht dem Zustandsdiagramm?

read regex a | b & c ;  
read regex a | [ b & c ] ;

pict

Hinweise

Klammernotation für Konkatenation 
Jeder RA wie {TEXT} steht für die Konkatenation aller Einzelzeichen, die zwischen den geschweiften Klammern notiert sind: [T E X T].

Beispiel 4.2.10 (xfst und Zustandsdiagramm).

read regex {clear}|{clever}  
           |{ear}|{ever}  
           |{fat}|{father};

pict

Hinweis

Endliche Automaten speichern Lexika kompakter als Suchbäume (Buchstabenbäume, Trie). Grund: Nicht bloss gemeinsame gemeinsamen Präfixe, sondern auch gemeinsame Suffixe sind nur einmal repräsentiert.

Operatoren für Komplemente  
Wenn der RA A die Sprache A über Σ bezeichnet, dann bezeichnet der RA

Universale Sprache, Komplement und Subtraktion

Für das Sprach-Komplement von A gilt die folgende Äquivalenz

[ ˜ A ] = [?* - A ]

Was gilt für das Komplement des Alphabets?

[ \ A ] =

? als RA-Symbol vs. ? als Kantenbeschriftung in EA  
Das ANY-Symbol ? steht als RA für die Sprache aller Zeichenketten der Länge 1.

Beispiel 4.2.11 (Interpretation von ˜ A).

xfst[0]: read regex [~ A] ;  
xfst[1]: print net  
Sigma: ? A  
Size: 2.  
Flags: deterministic, pruned, minimized, epsilon_free  
Arity: 1  
fs0: ? -> fs1, A -> s2.  
fs1: ? -> fs1, A -> fs1.  
s2: ? -> fs1, A -> fs1.

pict

Im regulären Ausdruck ?*, der die universale Sprache bezeichnet, bedeutet das Fragezeichen nicht dasselbe wie als Kantenbeschriftung. Die Verwendung des gleichen Zeichens für unterschiedliche Zwecke mag verwirren. Die Funktion als Kantenbeschriftung und als regulärer Ausdruck lässt sich aber immer leicht unterscheiden.

Definition 4.2.12 (UNKNOWN-Symbol). Das UNKNOWN-Symbol ? steht als Kantenbeschriftung für diejenigen Symbole des Eingabealphabets, welche nicht explizit im Sigma aufgeführt sind (dem Sigma unbekannt). Bei foma wird für das UNKNOWN-Symbol @ verwendet.

Wozu kann es nützlich sein, das Alphabet nicht vollständig aufzählen zu müssen?

Operatoren für Enthalten-Sein 
Wenn der RA A die Sprache A über Σ bezeichnet, dann bezeichnet der RA

Beispiel 4.2.13 (Welches Zustandsdiagramm für welchen Operator?). pict pict pict

Operator für Beschränkung via Kontext 
Der RA [ A => L _ R ] (expression restriction) restringiert alle Vorkommen von Teilzeichenketten a aus A. Jedem a muss eine Zeichenkette aus L vorangehen und eine Zeichenkette aus R nachfolgen.

Beispiel 4.2.14 (Ausdrucksrestriktion). Die Sprache von [ a => b _ c ] umfasst das Wort back-to-back oder bc, aber nicht das Wort cab oder pack.

Schrittweise Definition von [ A => L _ R ]

define Maolv [~[?* L]] A ?* ; # Mindestens ein A ohne L vorher

define Maorn ?* A [~[R ?*]] ; # Mindestens ein A ohne R nachher

define WederMaolvNochMaorn ~Maolv & ~Maorn ;

Hinweis

Die Sprache des Restriktions-Ausdrucks schränkt nur diejenigen Zeichenketten ein, welche als Teilzeichenkette ein Wort a aus A enthalten.

Wortende verankern in der Kontext-Beschränkung  

Die Spezialmarkierung für Wortende

Die Kontexte in [ A => L _ R ] sind gegen Aussen implizit mit der universalen Sprache konkateniert: [ A => ?* L _ R ?*]. Die Spezialmarkierung .#. bedeutet in den Kontexten Verankerung am Wortende und verhindert so die implizite Verkettung. Im EA ist .#. nicht vorhanden, es kann aber wie ein Symbol in die RA eingefügt werden.

Beispiel 4.2.15 (Die Wirkung von .#.).

pict

[ a => l _ r ]

pict

[ a => l _ r .#. ]

Operator für Beschränkung des Kontexts 
Der RA [ A <= L _ R ] (context restriction) erlaubt Kontexte aus L gefolgt von R nur, wenn dazwischen eine Teilzeichenketten a aus A vorkommt.

Beispiel 4.2.16 (Kontextrestriktion). Die Sprache von [ a <= b _ c ] umfasst das Wort back-to-back oder cb, aber nicht das Wort bc oder bxc.

Hinweis zu Restriktion

Der Operator [ A <=> L _ R ] vereinigt die Beschränkungen. A ist ausserhalb von L und R verboten (expression restriction) und der Kontext L _ R ist verboten, ausser ein String aus A steht dazwischen (context restriction).