In der Informatik , insbesondere in der Theorie formaler Sprachen , werden häufig verschiedene Stringfunktionen verwendet . Die verwendete Notation unterscheidet sich jedoch von der in der Programmierung üblichen , und einige in der Theorie gebräuchliche Funktionen finden in der Praxis selten Anwendung. Dieser Artikel definiert einige dieser grundlegenden Begriffe.

Zeichenketten und Sprachen

Eine Zeichenkette ist eine endliche Folge von Zeichen. Die leere Zeichenkette wird mit 0 bezeichnet . Die Verkettung zweier Zeichenketten und wird mit 1/2 oder kürzer mit 1/2 bezeichnet . Die Verkettung mit der leeren Zeichenkette ändert nichts: 1/2 = 1/2 . Die Verkettung von Zeichenketten ist assoziativ : 1/2 = 1/2.

Zum Beispiel, .

Eine Sprache ist eine endliche oder unendliche Menge von Zeichenketten. Neben den üblichen Mengenoperationen wie Vereinigung, Schnittmenge usw. kann die Verkettung auf Sprachen angewendet werden: Sind sowohl A als auch B Sprachen, so ist ihre Verkettung definiert als die Menge der Verkettungen beliebiger Zeichenketten aus A und B , formal ℝ = Aℝ . Der Verkettungspunkt wird der Kürze halber oft weggelassen.

Die Sprache, die nur aus dem leeren String besteht, ist von der leeren Sprache zu unterscheiden . Die Verkettung einer beliebigen Sprache mit ersterer ergibt keine Änderung: , während die Verkettung mit letzterer immer die leere Sprache ergibt: . Die Verkettung von Sprachen ist assoziativ: .

Beispielsweise erhält man durch Abkürzen von die Menge aller dreistelligen Dezimalzahlen als . Die Menge aller Dezimalzahlen beliebiger Länge ist ein Beispiel für eine unendliche Sprache.

Alphabet einer Zeichenkette

Das Alphabet einer Zeichenkette ist die Menge aller Zeichen, die in dieser Zeichenkette vorkommen. Wenn s eine Zeichenkette ist, wird ihr Alphabet mit bezeichnet.

Das Alphabet einer Sprache ist die Menge aller Zeichen, die in jeder beliebigen Zeichenkette vorkommen , formal: .

Zum Beispiel ist die Menge das Alphabet der Zeichenkette , und das Obige ist das Alphabet der oben genannten Sprache sowie der Sprache aller Dezimalzahlen.

Zeichenkettenersetzung

Sei L eine Sprache und Σ ihr Alphabet. Eine Zeichenkettensubstitution oder kurz Substitution ist eine Abbildung f , die Zeichen aus Σ auf Sprachen (möglicherweise mit einem anderen Alphabet) abbildet. So gilt beispielsweise für ein gegebenes Zeichen a ∈ Σ: f ( a ) = L a, wobei L a ⊆ Δ * eine Sprache mit dem Alphabet Δ ist. Diese Abbildung lässt sich auf Zeichenketten erweitern als

f (ε)=ε

für die leere Zeichenkette ε, und

f ( sa )= f ( s ) f ( a )

für Zeichenketten s ∈ L und Zeichen a ∈ Σ. Zeichenkettenersetzungen können auf ganze Sprachen erweitert werden, wie [ 1 ]

Reguläre Sprachen sind unter Zeichenkettensubstitution abgeschlossen. Das heißt, wenn jedes Zeichen des Alphabets einer regulären Sprache durch ein Zeichen einer anderen regulären Sprache ersetzt wird, ist das Ergebnis immer noch eine reguläre Sprache. [ 2 ] Analog dazu sind kontextfreie Sprachen unter Zeichenkettensubstitution abgeschlossen. [ 3 ] [ Anmerkung 1 ]

Ein einfaches Beispiel ist die Umwandlung von f uc (.) in einen Großbuchstaben, die beispielsweise wie folgt definiert werden kann:

Charakterder Sprache zugeordnetBemerkung
Xf uc ( x )
< A >{ < A > }Ordne Kleinbuchstaben dem entsprechenden Großbuchstaben zu.
< A >{ < A > }Bilde Großbuchstaben auf sich selbst ab
‹ ß ›{ ‹ SS › }Kein Großbuchstabe verfügbar, weise auf eine zweistellige Zeichenkette zu.
‹0›{ ε }Ziffer auf leeren String abbilden
‹!›{ }verbieten Interpunktion, Abbildung auf leere Sprache
...Ähnliches gilt für andere Charaktere.

Für die Erweiterung von f uc auf Zeichenketten haben wir z.B.

  • f uc (‹Straße›) = {‹S›} ⋅ {‹T›} ⋅ {‹R›} ⋅ {‹A›} ⋅ {‹SS›} ⋅ {‹E›} = {‹STRASSE›},
  • f uc (‹u2›) = {‹U›} ⋅ {ε} = {‹U›}, und
  • f uc (‹Go!›) = {‹G›} ⋅ {‹O›} ⋅ {} = {}.

Für die Erweiterung von f uc auf Sprachen haben wir z.B.

  • f uc ({ ‹Straße›, ‹u2›, ‹Go!› }) = { ‹STRASSE› } ∪ { ‹U› } ∪ { } = { ‹STRASSE›, ‹U› }.

Stringhomomorphismus

Ein Stringhomomorphismus ( in der formalen Sprachtheorie oft einfach als Homomorphismus bezeichnet ) ist eine Stringsubstitution, bei der jedes Zeichen durch einen einzelnen String ersetzt wird. Das heißt, , wobei ein String ist, für jedes Zeichen . [ Anmerkung 2 ] [ 4 ]

Stringhomomorphismen sind Monoidmorphismen auf dem freien Monoid , die den leeren String und die binäre Operation der Stringverkettung erhalten . Gegeben eine Sprache , heißt die Menge das homomorphe Bild von . Das inverse homomorphe Bild eines Strings ist definiert als

Das inverse homomorphe Bild einer Sprache ist definiert als

Im Allgemeinen gilt: , obwohl man hat

Und

für jede Sprache .

Die Klasse der regulären Sprachen ist abgeschlossen unter Homomorphismen und inversen Homomorphismen. [ 5 ] Ebenso sind die kontextfreien Sprachen abgeschlossen unter Homomorphismen [ Anmerkung 3 ] und inversen Homomorphismen. [ 6 ]

Ein Stringhomomorphismus heißt ε-frei (oder e-frei), wenn für alle a im Alphabet gilt : . Einfache Einbuchstaben- Substitutionschiffren sind Beispiele für (ε-freie) Stringhomomorphismen.

Ein Beispiel für einen Stringhomomorphismus g uc lässt sich auch durch eine ähnliche Definition wie die obige Substitution erhalten: g uc (‹a›) = ‹A›, ..., g uc (‹0›) = ε, wobei g uc jedoch für Satzzeichen undefiniert ist. Beispiele für inverse homomorphe Bilder sind

  • g uc −1 ({ ‹SSS› }) = { ‹sss›, ‹sß›, ‹ßs› }, da g uc (‹sss›) = g uc (‹sß›) = g uc (‹ßs›) = ‹SSS›, und
  • g uc −1 ({ ‹A›, ‹bb› }) = { ‹a› }, da g uc (‹a›) = ‹A›, während ‹bb› von g uc nicht erreicht werden kann .

Für die letztgenannte Sprache gilt: g uc ( g uc −1 ({ ‹A›, ‹bb› })) = g uc ({ ‹a› }) = { ‹A› } ≠ { ‹A›, ‹bb› }. Der Homomorphismus g uc ist nicht ε-frei, da er z. B. ‹0› auf ε abbildet.

Ein sehr einfaches Beispiel für einen String-Homomorphismus, bei dem jedes Zeichen genau einem anderen Zeichen zugeordnet wird, ist die Umwandlung eines EBCDIC -kodierten Strings in ASCII .

Stringprojektion

Wenn s eine Zeichenkette und a ein Alphabet ist, dann ist die Zeichenkettenprojektion von s die Zeichenkette, die entsteht, indem man alle Zeichen entfernt, die nicht in a enthalten sind . Sie wird als s = s⁻¹ geschrieben . Formal ist sie definiert durch das Entfernen von Zeichen von der rechten Seite:

Hier bezeichnet das leere Zeichen . Die Projektion eines Zeichens ist im Wesentlichen dasselbe wie eine Projektion in der relationalen Algebra .

Die Stringprojektion kann zur Projektion einer Sprache erweitert werden . Gegeben sei eine formale Sprache L , so ist ihre Projektion gegeben durch

Rechts- und Linksquotient

Der Rechtsquotient eines Zeichens a aus einer Zeichenkette s ist die Kürzung des Zeichens a in der Zeichenkette s von rechts. Er wird mit bezeichnet . Falls die Zeichenkette kein a auf der rechten Seite enthält , ist das Ergebnis die leere Zeichenkette.

Man kann den Quotienten der leeren Zeichenkette nehmen:

Analog dazu kann man, gegeben eine Teilmenge eines Monoids , die Quotiententeilmenge wie folgt definieren:

Linksquotienten können auf ähnliche Weise definiert werden, wobei die Operationen links von einer Zeichenkette stattfinden.

Hopcroft und Ullman (1979) definieren den Quotienten L₁ / L₂ der Sprachen L₁ und L₂ über demselben Alphabet als L₁ / L₂ = { s | ∃ t ∈ L₂ . st ∈ L₁ } . [ 7 ] Dies ist keine Verallgemeinerung der obigen Definition, da die Definition von Hopcroft und Ullman für eine Zeichenkette s und verschiedene Zeichen a , b impliziert , dass …ergibt {}, anstatt { ε }.

Der linke Quotient (definiert analog zu Hopcroft und Ullman 1979) einer einelementigen Sprache L₁ und einer beliebigen Sprache L₂ wird als Brzozowski-Ableitung bezeichnet ; wenn L₂ durch einen regulären Ausdruck dargestellt wird , kann auch der linke Quotient durch einen regulären Ausdruck dargestellt werden. [ 8 ]

Syntaktische Beziehung

Der rechte Quotient einer Teilmenge eines Monoids definiert eine Äquivalenzrelation , die als rechte syntaktische Relation von S bezeichnet wird . Sie ist gegeben durch

Die Relation ist offensichtlich von endlichem Index (hat eine endliche Anzahl von Äquivalenzklassen) genau dann, wenn die Familie der Rechtsquotienten endlich ist; das heißt, wenn

ist endlich. Falls M das Monoid der Wörter über einem Alphabet ist, dann ist S eine reguläre Sprache , d. h. eine Sprache, die von einem endlichen Automaten erkannt werden kann. Dies wird im Artikel über syntaktische Monoide ausführlicher behandelt .

Rechtsstreichung

Die Rechtskürzung eines Zeichens a aus einer Zeichenkette s ist das Entfernen des ersten Vorkommens des Zeichens a in der Zeichenkette s , beginnend von rechts. Sie wird mit bezeichnet und rekursiv definiert als

Der leere String kann immer abgebrochen werden:

Offensichtlich handelt es sich um eine Pendelstrecke zwischen Rechtsaufhebung und Projektion :

Präfixe

Die Präfixe einer Zeichenkette sind die Menge aller Präfixe einer Zeichenkette in Bezug auf eine gegebene Sprache:

Wo .

Der Präfixabschluss einer Sprache ist

Beispiel:

Eine Sprache heißt präfixabgeschlossen, wenn .

Der Präfix-Abschlussoperator ist idempotent :

Die Präfixrelation ist eine binäre Relation, die genau dann gilt, wenn . Diese Relation ist ein Spezialfall einer Präfixreihenfolge .

Siehe auch

Anmerkungen

  1. ^ Obwohl jede reguläre Sprache auch kontextfrei ist, folgt aus dem aktuellen Satz nicht der vorherige, da der erstere ein Shaper-Ergebnis für reguläre Sprachen liefert.
  2. Streng formal ergibt ein Homomorphismus eine Sprache, die nur aus einer einzigen Zeichenkette besteht,d.h.
  3. ^ Dies folgt aus dem oben erwähnten Abschluss unter beliebigen Substitutionen.

Referenzen

  1. ^ Hopcroft, Ullman (1979), Abschnitt 3.2, S. 60
  2. ^ Hopcroft, Ullman (1979), Abschnitt 3.2, Satz 3.4, S. 60
  3. ^ Hopcroft, Ullman (1979), Abschnitt 6.2, Satz 6.2, S. 131
  4. ^ Hopcroft, Ullman (1979), Abschnitt 3.2, S. 60-61
  5. ^ Hopcroft, Ullman (1979), Abschnitt 3.2, Satz 3.5, S. 61
  6. ^ Hopcroft, Ullman (1979), Abschnitt 6.2, Satz 6.3, S. 132
  7. ^ Hopcroft, Ullman (1979), Abschnitt 3.2, S. 62
  8. ^ Janusz A. Brzozowski (1964). „Ableitungen regulärer Ausdrücke“ . J ACM . 11 (4): 481–494 . doi : 10.1145/321239.321249 . S2CID 14126942 .