Formale Sprache

Formale Sprachen sind mathematische Objekte, die besonders in der theoretischen Informatik, bei Berechenbarkeits- und Komplexitätstheorie, sowie beim Compilerbau Anwendung finden.

Inhaltsverzeichnis

Definitionen

Eine formale Sprache \mathbf{\mathit{L}} ist eine Menge von Wörtern über einem Alphabet \mathbf{\mathit{\Sigma}}. Welche der möglichen Wörter über dem Alphabet zu der Sprache gehören und welche nicht, wird meist durch die Regeln einer formalen Grammatik bestimmt. Dabei ist ein Alphabet einfach eine endliche, nichtleere Menge von Objekten, die man wiederum Symbole oder Zeichen nennt.


Ein Wort der Sprache ist eine Folge solcher Symbole (Programmierer sagen String oder Zeichenkette dazu). Die Länge eines Wortes ist die Anzahl der Folgenglieder, z.B. w = hallo \implies |w| = 5.

Zwei Wörter \mathbf{\mathit{u}} und \mathbf{\mathit{v}} kann man zu einem neuen Wort \mathbf{\mathit{w}} aneinanderreihen, man bezeichnet diese Operation als Konkatenation und schreibt w = u \cdot v oder kürzer \mathbf{\mathit{w = uv}}. Es gibt auch ein leeres Wort \mathbf{\mathit{\varepsilon}}, welches das neutrale Element bezüglich der Konkatenation darstellt, denn für jedes Wort \mathbf{\mathit{u}} gilt u \varepsilon = \varepsilon u = u.

Man sieht, man betreibt in der theoretischen Informatik Algebra mit Wörtern und Zeichen, statt wie gewohnt mit Zahlen.

Die Konkatenation zweier Sprachen \mathbf{\mathit{L_a}} und \mathbf{\mathit{L_b}} ist L_a \cdot L_b = \{ uv | u\in L_a, v\in L_b \}. Also alle Wörter, die man bilden kann, indem ein Wort aus \mathbf{\mathit{L_a}} und ein Wort aus \mathbf{\mathit{L_b}} aneinandergereiht werden.

Man kann durch L^{n+1} = L^n \cdot L induktiv die Potenz \mathbf{\mathit{L^n}} einer Sprache \mathbf{\mathit{L}} für n \in \mathbb{N} mit \mathbb{N} = \{ 0, 1, 2, \ldots \} definieren, dabei wird \mathbf{\mathit{L^1 = L}} und L^0 = \{ \varepsilon \} definiert (beachte: die Menge, die nur das leere Wort enthält, ist selbst nicht leer!)

Jetzt können wir die Menge aller endlichen Wörter über dem Alphabet \mathbf{\mathit{\Sigma}} hinschreiben: \mathbf{\mathit{L = \Sigma^*}}, wobei M^*=\bigcup_{i\in\mathbb{N}} M^i und wir hier die Symbole \mathbf{\mathit{a}} aus \mathbf{\mathit{\Sigma}} mit den Wörtern \mathbf{\mathit{a}} der Länge 1 identifizieren.

Die Operation \mathbf{\mathit{{~}^{*}}} wird auch als endlicher (oder kleenescher) Abschluss bezeichnet, der Operator selbst als Kleene-Stern (siehe Kleenesche Hülle).

Die Menge dieser Wörter kann endlich oder unendlich sein. Man spricht dann auch von einer endlichen bzw. unendlichen Sprache.

Klassifikation von Grammatiken formaler Sprachen

Noam Chomsky hat eine Hierarchie von formalen Grammatiken aufgestellt, die verschiedene Typen von formalen Sprachen erzeugen. Diese ist heute unter dem Namen Chomsky-Hierarchie bekannt.

Während Grammatiken Wörter einer Sprache produzieren, werden Automaten verwendet, um Sprachen zu akzeptieren, das heißt zu entscheiden, ob ein Wort zu einer Grammatik passt. Siehe dazu auch Parser.

Formaler ausgedrückt: eine gegebene Grammatik (zum Beispiel ein regulärer Ausdruck oder eine EBNF-Grammatik) ist als konstruktive Definition für eine formale Sprache \mathbf{\mathit{L}} aufzufassen, also als ein Regelsatz zur Erzeugung von Wörtern der Sprache. Dagegen sind die äquivalenten Automaten (zum Beispiel ein endlicher Automat oder Kellerautomat) mathematische Modelle für Maschinen oder Programme, die genau die Wörter dieser formalen Sprachen erkennen. Aus einer gegebenen Grammatik lässt sich auch automatisch ein Automat erzeugen, der Wörter dieser Grammatik erkennt (siehe Parser-Generator).

Beispiele

Wir betrachten das Alphabet \mathbf{\mathit{\Sigma = \{a,b,c\}}}. Dann sind \mathbf{\mathit{u = abcab}} und \mathbf{\mathit{v = aaabbb}} zum Beispiel Wörter über diesem Alphabet. \mathbf{\mathit{w = abcdef}} ist kein Wort über diesem Alphabet, da \mathbf{\mathit{d}}, \mathbf{\mathit{e}} und \mathbf{\mathit{f}} nicht im Alphabet \mathbf{\mathit{\Sigma}} vorkommen.

Die Verkettung der Wörter \mathbf{\mathit{aaa}} und \mathbf{\mathit{bbbcc}} (in dieser Reihenfolge) ergibt dann das Wort \mathbf{\mathit{aaabbbcc}}. Die Verkettung von \mathbf{\mathit{aaabb}} mit dem "leeren Wort" \mathbf{\mathit{\varepsilon}} ergibt erneut \mathbf{\mathit{aaabb}}.

Eine formale Sprache über dem Alphabet \mathbf{\mathit{\{a,b,c\}}} könnte zum Beispiel die Menge aller Wörter sein, die erst mit einer Folge von \mathbf{\mathit{a}} beginnt, dann mit einer Folge von \mathbf{\mathit{b}} weitergeht und zuletzt mit einer Folge von \mathbf{\mathit{c}} endet. Diese Sprache könnte formal als L = \{ a^ib^jc^k | i,j,k \in \mathbb{N} \} beschrieben werden.

Natürliche Sprachen

Natürliche Sprachen basieren auf endlichen Alphabeten, deshalb sind sie als Teilmenge in der Menge aller Wörter über dem betreffenden Alphabet enthalten und somit auch formale Sprachen. Wissenschaftliche Fachrichtungen wie die Computerlinguistik beschäftigen sich mit der algorithmischen Bearbeitung von natürlichen Sprachen, zum Beispiel um maschinelle Übersetzung zu ermöglichen. Inwiefern dies effizient möglich ist, hängt von der bisher ungeklärten Einstufung der natürlichen Sprachen in die Chomsky-Hierarchie ab.

Siehe auch

Lindenmayer-Systeme
Chomsky-Hierarchie
Formale Grammatik


Kategorie:Compilerbau Kategorie:Theoretische Informatik

See also: Formale Sprache, Algebra, Algorithmus, Alphabet (Informatik), Automat (Informatik), Berechenbarkeitstheorie, Chomsky-Hierarchie, Compilerbau, Computerlinguistik, EBNF