Skip to content

Theoretische Info.

Der nicht-spaßige Teil der theoretischen Informatik.

Eine formale Sprache LΣL \subseteq \Sigma^* ist eine Menge an Wörtern eines Alphabets. Alle Sprachen haben ein Alphabet, also eine endliche, nichtleere Menge an Zeichen, welches mit einem großenSigma Σ\Sigma dargestellt wird.

Σ={a,b,n,s,o,w}\Sigma = \{a, b, n, s, o, w\}

Eine Grammatik wird wie folgt beschrieben:

G=(N,T,P,S)G = (N, T, P, S)

Sie besteht aus den folgenden Bestandteilen:

  1. Einer Menge an Nicht-Terminalen NN.
  2. Einer Menge an Terminalen TT. Das sind die Zeichen des Alphabets.
  3. Einer Menge an Produktionen PP
  4. Und einem Startsymbol SS.

Beispiel:

Nicht-Terminale N = {S, U} Terminale T = {a, b, n, s, o, w} Produktionen P = {S → aU, U → nUs | sUn | oUw | wUo | b} Startsymbol S

Auch bekannt als Variablen, werden durch die Regeln der Produktionen in einem Ableitungsschritt ersetzt.

Eine Produktion besteht jeweils aus einem Produktionskopf (ein Nicht-Terminal), einem Ableitungspfeil und einem Produktionsrumpf. Sie gibt an, durch welche Nicht-Terminale und Terminale der Produktionskopf ersetzt werden kann.

Beispiel: Die folgende Produktion gibt an, dass ein U Nicht-Terminales entweder durch ein aU oder ein b ersetzt werden kann.

UaUbU → aU | b

Als Ableitung beschreibt man die schrittweise Bildung eines Wortes aus Terminalzeichen, ausgehend von einem Startsymbol. In jedem Schritt wird eine Produktion angewendet, bis nur noch Terminale überbleiben. Für die obere Grammatik wäre dies eine mögliche Ableitung.

SaUasUnaswUonaswbonS \rightarrow aU \rightarrow asUn \rightarrow aswUon \rightarrow aswbon

Eine Ableitung kann auch als Baum dargestellt werden. Die Wurzel dieses Baumes ist bei diesem das Startsymbol. Inneren Knoten stellen Nicht-Terminale, Blätter die Terminale dar. Hier ist der Ableitungsbaum für die oben gezeigte Ableitung.

Diagram

Ein Akzeptor ist ein deterministisch endlicher Automat, welcher entscheidet, ob eine Zeichenkette ein Wort einer Sprache ist. Akzeptoren sind wie folgt definiert:

A=(Z,Σ,δ,z0,F)A = (Z, \Sigma, \delta, z_0, F)

Die einzelnen Bestandteile sind:

  1. Eine Menge an möglichen Zuständen ZZ.
  2. Das Alphabet der Sprache: Σ\Sigma.
  3. Die Übergangsfunktion δ:Z×ΣZ\delta: Z \times \Sigma \rightarrow Z, welche für Paare aus Zustand und Zeichen festlegt, in welchen Folgezustand der Akzeptor übergeht.
  4. Der Startzustand z0z_0, ein Element aus ZZ.
  5. Eine Menge an Endzuständen FF aus ZZ.

Ein Wort wird akzeptiert, wenn ausgehend vom Startzustand z0z_0 schrittweise für jedes Zeichen des Wortes ein Übergang gefunden werden kann und der berechnete Endzustand in ZZ liegt.

Übergangsfunktionen werden oft als Tabelle dargestellt. Diese Tabelle heißt Übergangstabelle. Diese beinhaltet alle Zustände und ihre Folgezustände. Der Aufbau der Tabelle sieht wie folgt aus:

  1. Die Zeilenköpfe beinhalten alle Zustände aus ZZ.
  2. Die Spaltenköpfe beinhalten die Symbole des Eingabealphabets.
  3. Jede Tabellenzelle beschreibt den Folgezustand δ(z,x)\delta(z, x).
Aktueller ZustandEingabe aEingabe b
z0\rightarrow z_0 (Start)z0z_0z1z_1
z1*z_1 (Ende)z1z_1z0z_0

Diese Tabelle würde die Wörter aaaba und bbba akzeptieren, aber nicht aabb, weil der Zustand nach dem Wort nicht auf einem Endzustand landet.

Mit Syntaxdiagrammen lässt sich die Grammatik einer formalen Sprache grafisch darstellen. Die folgenden Regeln werden angewandt:

  • Terminale werden in Ovalen dargestellt.
  • Nicht-Terminale werden in Rechtecken dargestellt.

Eine Registermaschine besteht aus unendlich vielen Registern R1,R2,R3,...,RNR1, R2, R3, ..., RN, in welchen natürliche Zahlen gespeichert werden. Die Eingabe wird in die ersten kk register gespeichert, während alle anderen Register anfänglich mit 00 befüllt werden. Zusätzlich die Registermaschine einen Akkumulator, in welchem Operationsergebnisse temporär gespeichert werden. Das Program der Registermaschine besteht aus Instruktionen, wobei eine Instruktion jeweils auf eine Zeile geschrieben wird.

BezeichnungOperandBedeutung
Konstant#iDer Operand ist die Zahl i.
Direkte AddressierungiDer Operand ist die Zahl im Register i.
Indirekte Addressierung*iDer Operand ist die Zahl im Register, dessen Index im Register i steht.
BefehlBeschreibungLimitationen
LOAD xLädt x in der Akkumulator.
STORE xSpeichert den Wert des Akkumulators in x.x darf keine Konstante sein.
ADD xAddiert x zum Akkumulator.
SUB xSubtrahiert x vom Akkumulator.
MUL xMultipliziert x mit dem Akkumulator.
DIV xDividiert den Akkumulator durch x.x darf nicht 0 sein.
GOTO MSpringt zur Marke M.
JZERO MSpringt zur Marke M.Der Akkumulator muss 0 haben.
JNZERO MSpringt zur Marke M.Der Akkumulator darf nicht 0 haben.
ENDBeendet das Program.

Hier ist ein einfaches Program zur Berechnung der n-ten Fakultät. n wird im ersten Register eingeladen, das Ergebnis landet im zweiten Register.

Factorial.rasm
START:
LOAD 1
STORE 10 ; parameter n für STEP
GOTO STEP
; Register:
; 10 - Fakultätswert n (n!)
; 11 - Derzeitiger Wert (v)
STEP:
LOAD 11
; Erste iteration, v ist 0
JZERO INIT
LOAD 10
; Falls n gleich null 0, kopiere v nach reg(2)
JZERO EXIT
; v = n * v
LOAD 10
MUL 11
STORE 11
; n = n - 1
LOAD 10
SUB #1
STORE 10
; Wiederhole
GOTO STEP
; v = n
; n = n - 1
INIT:
LOAD 10
STORE 11
SUB #1
STORE 10
GOTO STEP
EXIT:
LOAD 11
STORE 2
END