[ Inhalt ] [ Index ]

Next: Die Sprache OBERON-0 Up: Einleitung Previous: Compiler im Überblick

Grundlagen

In diesem Abschnitt werden wir einige Grundlagen, die Ihnen aus früheren Semestern bekannt sind, kurz auffrischen, um sicherzustellen, daß wir eine gemeinsame Sprache sprechen.

Algorithmen

 

Ein Algorithmus beschreibt ein Verfahren, um ein Problem oder eine ganze Klasse von Problemen zu lösen.

Der Begriff Algorithmus beruht auf dem Namen des mittelalterlichen Mathematikers Abu Ja'far Mohammed ibn Musa al-Khowarizm  , der um 825 das mathematische Lehrbuch Kitab al-jabr w'al-muqabala   verfasst hat.

Anforderungen an einen Algorithmus

Entwicklung der Programmiersprachen

1. Generation



2. Generation



3. Generation



4. Generation

Zeichen, Zeichenketten, Alphabete

Ein Symbol   oder Zeichen   ist eine elementare Einheit:

a A @ :-) ;-)


Eine Zeichenkette   ist eine Folge von Symbolen:

''emil'' ''123'' ''@+-''


Häufig wird eine Zeichenkette durch '' begrenzt. Die '' bezeichnet man als Delimiter  , die nicht zur Zeichenkette gehören.

Die   Länge einer Zeichenkette ist die Anzahl der Symbole:

displaymath1827

Die   leere Zeichenkette tex2html_wrap_inline1843 : tex2html_wrap_inline1845

  Präfix einer Zeichenkette z:
beliebige Anzahl führender Symbole von z:

z = ''emil'': tex2html_wrap_inline1843 , e, em, emi, emil


Suffix   einer Zeichenkette z:
beliebige Anzahl von Symbolen am Ende von z:

z = ''emil'': tex2html_wrap_inline1843 , l, il, mil, emil


Konkatenation   k zweier Zeichenketten tex2html_wrap_inline1865 : tex2html_wrap_inline1867

tex2html_wrap_inline1869 = ''em'', tex2html_wrap_inline1871 = ''il'': tex2html_wrap_inline1873 = ''emil''

displaymath1828

Ein Alphabet   ist eine endliche Menge von Symbolen.

displaymath1829

displaymath1830

Eine Sprache   tex2html_wrap_inline1875 über einem Alphabet tex2html_wrap_inline1877 :

Menge von Zeichenketten aus Symbolen aus tex2html_wrap_inline1877 :

displaymath1831

Auch die leere Menge { } und tex2html_wrap_inline1881 sind Sprachen!

Beispiel:

displaymath1832

Die folgende Menge hat unendlich viele Elemente:

displaymath1833

Diese Sprache besteht nur aus endlich vielen Elementen:

displaymath1834

Graphen

Ein Graph   ist ein Paar (V,E)

tex2html_wrap1922

E ist eine Menge geordneter Paare:

G1 = (V,E)

tex2html_wrap_inline1904

tex2html_wrap_inline1906


Ein Pfad   in einem gerichteten Graphen ist eine Folge von Kanten tex2html_wrap_inline1908 , so daß

tex2html_wrap_inline1910


tex2html_wrap_inline1912 :

v ist Vorgänger   von w und w ist Nachfolger   von v

Bäume

G = (V, E) ist ein (geordneter, gerichteter) Baum  , wenn

  1. es genau einen Knoten r gibt, der keinen Vorgänger hat
  2. jeder Knoten außer der Wurzel r genau einen Vorgänger hat
  3. die Knoten von links nach rechts geordnet sind

Beispiel:

tex2html_wrap1934

Weitere Begriffe:

tex2html_wrap1936

Endliche Automaten

Ein endlicher Automat   ist ein Fünftupel

tex2html_wrap_inline1946

Z = Menge der Zustände  

E = Menge der Eingabesymbole  

tex2html_wrap_inline1952 Zustandsübergangsfunktion  

tex2html_wrap_inline1954 Anfangszustand  

tex2html_wrap_inline1956 Menge der Endzustände

Da die Zustandsübergangsfunktion tex2html_wrap_inline1958 ein Paar (z,a) auf genau einen Folgezustand abbildet, sprechen wir auch von einem endlichen deterministischen Automaten, abgekürzt DEA  .

Nichtdeterministische endliche Automaten

Wenn wir in der Zustandsübergangsfunktion tex2html_wrap_inline1958 vorsehen, daß für ein Eingabesymbol a mehr als ein Folgezustand möglich ist, so sprechen wir von einem nichtdeterministischen endlichen Automaten NEA  .  

tex2html_wrap_inline1958 ist dann eine Abbildung auf Mengen von Zuständen.

Bei einer bestimmten Eingabe wird zufällig einer der möglichen Folgezustände ausgewählt.

Eine Zeichenkette tex2html_wrap_inline1974 wird akzeptiert, wenn es eine mögliche Transitionsfolge vom Startzustand gibt, die in einem Endzustand endet.

Formal ist ein NEA ein Quintupel tex2html_wrap_inline1976 das genauso wie beim DEA definiert ist, nur für tex2html_wrap_inline1958 gilt tex2html_wrap_inline1980

Reguläre Ausdrücke

   

Sei A ein Alphabet. Die regulären Ausdrücke über A (r.A.) sind wie folgt definiert

  1. tex2html_wrap_inline1988 ist ein r.A und bezeichnet die leere Menge tex2html_wrap_inline1990
  2. tex2html_wrap_inline1843 ist ein r.A und bezeichnet tex2html_wrap_inline1881
  3. tex2html_wrap_inline1996 a ist ein regulärer Ausdruck und bezeichnet die Menge tex2html_wrap_inline1998
  4. wenn r und s reguläre Ausdrücke sind, die die Sprachen R und S beschreiben, dann sind auch tex2html_wrap_inline2008 reguläre Ausdrücke, die für die Sprachen tex2html_wrap_inline2010 stehen

Statt + schreibt man häufig auch | (Alternative  ).

Wir legen fest, daß der Operator * eine höhere Priorität   hat als die Konkatenation. Der Operator + (|) hat die niedrigste Priorität.

Beispiele:

tex2html_wrap_inline2020

tex2html_wrap_inline2022

tex2html_wrap_inline2024 { tex2html_wrap_inline1843 , a, b, c, ab, ac, abc, abbccc, ...}

tex2html_wrap_inline2028 {a, tex2html_wrap_inline1843 , b, bb, bbb, bbbbbbb, ...}

tex2html_wrap_inline2032 {abc, aabc, abbc, abbccc, ...}

Kontextfreie Grammatiken

Eine kontextfreie Grammatik (kfG  )     ist ein Viertupel (V, T, P, S):

V = endliche Menge von Variablen  

T = endliche Menge von Terminalsymbolen  

P = endliche Menge von Produktionen  

S = Startsymbol, S tex2html_wrap_inline2038 V

Eine Produktion definiert eine Ersetzungsregel  
und ist ein Paar tex2html_wrap_inline2040 , wobei A eine Variable, tex2html_wrap_inline2044 ist.

Man beachte, daß tex2html_wrap_inline2046 auch die leere Zeichenkette sein kann!

Häufig schreibt man die Elemente von P in der Form tex2html_wrap_inline2048 .

Definition:

Eine Zeichenkette tex2html_wrap_inline2046 aus tex2html_wrap_inline2052 ist eine Satzform  ,
wenn gilt: tex2html_wrap_inline2054 tex2html_wrap_inline2056 tex2html_wrap_inline2046 .

Enthält eine Zeichenkette, die aus S abgeleitet werden kann,
nur Terminalsymbole, so bezeichnen wir sie als Satz  .

Definition:
Die von einer Grammatik G erzeugte Sprache ist
tex2html_wrap_inline2064 tex2html_wrap_inline2056 tex2html_wrap_inline2068

Zwei Grammatiken tex2html_wrap_inline2070 sind äquivalent,   wenn gilt tex2html_wrap_inline2072 .

Ableitungsbäume

 

Ableitungen eines Satzes einer kfS lassen sich übersichtlich als Bäume darstellen. Wie in der Informatik üblich, wachsen diese Bäume von oben nach unten, Wurzel ist das Startsymbol der Grammatik. Die Knoten sind mit Variablen und Terminalen markiert. Die Blätter eines Ableitungsbaumes eines Satzes bestehen nur aus Terminalen.

Wenn A ein innerer Knoten mit den Söhnen tex2html_wrap_inline2086 ist,
so ist tex2html_wrap_inline2088 eine Produktion der Grammatik.

Beispiel:

tex2html_wrap2090

Links- und Rechtsableitungen

   

Wenn bei jedem Ableitungsschritt immer die am weitesten links stehende Variable ersetzt wird, sprechen wir von einer Linksableitung.

Analog wird bei einer Rechtsableitung immer die am weitesten rechts stehende Variable ersetzt.

Beispiel:

E -> E + E | E * E | id

Linksableitung:

E -> E + E -> E * E + E -> E + E * E + E -> 
     ^        ^            ^
id + E * E + E -> id + id * E + E ->
     ^                      ^
id + id * id + E -> id + id * id + id

Rechtsableitung:

E -> E + E -> E + E + E -> E + E + id ->
         ^            ^        ^
E + E * E + id -> E + E * id + id ->
        ^             ^
E + id * id + id -> id + id * id + id

Mehrdeutigkeit

 

Mit der Grammatik aus dem letzten Beispiel ist es offenbar möglich, verschiedene Links- oder Rechtsableitungen für einen Satz anzugeben:

1: E -> E + E -> E * E + E -> ... -> id * id + id

2: E -> E * E -> E * E + E -> ... -> id * id + id

Zu id * id + id existieren damit zwei verschiedene Ableitungsbäume:

tex2html_wrap2095

Eine kfG, die mehr als einen Ableitungsbaum für einen Satz erlaubt, bezeichnen wir als mehrdeutig  .

Eine Sprache ist mehrdeutig, wenn alle Grammatiken, die die Sprache erzeugen, mehrdeutig sind.

Man beachte, daß zu einem gegebenen Ableitungsbaum immer
genau eine Links- bzw. Rechtsableitung existiert.

Die Chomsky-Hierarchie

 

Definition: (Typ-3-Grammatik)
Eine Grammatik G = (V,T,P,S) ist eine Typ-3-Grammatik, wenn alle Produktionen von der Form

tex2html_wrap_inline2101

( tex2html_wrap_inline2103 ) sind.

Definition: (Typ-2-Grammatik  )
Eine Grammatik G = (V,T,P,S) ist eine Typ-2-Grammatik oder kontextfreie Grammatik, wenn alle Produktionen von der Form

tex2html_wrap_inline2107 sind.

Definition: (Typ-1-Grammatik  )
Eine Grammatik G = (V,T,P,S) ist eine Typ-1-Grammatik oder kontextsensitive Grammatik, wenn alle Produktionen von der Form

tex2html_wrap_inline2111 sind.

Durch den Ersetzungsprozeß darf die Zeichenkette also nicht verkürzt werden.

Definition: (Typ-0-Grammatik  )
Eine Grammatik G = (V,T,P,S) ist eine Typ-0-Grammatik, wenn alle Produktionen von der Form

tex2html_wrap_inline2115 sind.

Der Erzeugungsprozeß muß mit dem Startsymbol beginnen.

Diese Grammatiken werden auch als Semi-Thue-Systeme   bezeichnet.

Beispiel:
Die folgende Grammatik erzeugt die Sprache tex2html_wrap_inline2117

tex2html_wrap_inline2119

tex2html_wrap_inline2121
tex2html_wrap_inline2123 tex2html_wrap_inline2125
tex2html_wrap_inline2127 tex2html_wrap_inline2129
tex2html_wrap_inline2131 tex2html_wrap_inline2133
tex2html_wrap_inline2135 tex2html_wrap_inline2137

tex2html_wrap_inline2139

Kellerautomaten

Definition: (Kellerautomat  )
Ein Kellerautomat ist ein Siebentupel tex2html_wrap_inline2146

  1. Z endliche Menge von Zuständen
  2. E Eingabealphabet
  3. tex2html_wrap_inline2152 Kelleralphabet
  4. tex2html_wrap_inline2154 Startzustand
  5. tex2html_wrap_inline2156 Kelleranfangssymbol
  6. tex2html_wrap_inline2158 Endzustände
  7. Zustandsübergangsfunktion tex2html_wrap_inline2160
    tex2html_wrap_inline1958 ist nichtdeterministisch

Akzeptierte Sprache eines Kellerautomaten:

  1. Menge aller Eingaben, die zu einem leeren Keller führen.
  2. Auszeichnung von Endzuständen: Menge aller Eingaben, die den Automaten in einen Endzustand überführen.

Deterministische Kellerautomaten

 

Ein tex2html_wrap_inline2165 ist deterministisch wenn

  1. für alle Zustände tex2html_wrap_inline2167 und alle Kellersymbole tex2html_wrap_inline2169 gilt: wenn tex2html_wrap_inline2171 ) nicht leer ist, dann ist tex2html_wrap_inline2173 für alle tex2html_wrap_inline2175 leer.
  2. tex2html_wrap_inline2173 enthält für alle tex2html_wrap_inline2179 höchstens ein Element.

Wegen (1) besteht keine Wahl zwischen Verarbeitung eines Symbols und einer tex2html_wrap_inline1843 -Bewegung.

Wegen (2) gibt es für jedes Tripel aus Zustand, Eingabe und Kellersymbol keine Wahl zwischen verschiedenen Folgekonfigurationen.

Kellerautomaten gelten als nichtdeterministisch, falls nicht explizit etwas anderes vereinbart wird!!

Deterministische und nichtdeterministische Kellerautomaten sind nicht äquivalent!

Die Sprache tex2html_wrap_inline2183 wird zwar von einem nichtdeterministischen KA erkannt, aber nicht von einem deterministischen.

 



Next: Die Sprache OBERON-0 Up: Einleitung Previous: Compiler im Überblick

Prof. Dr. Reinhard Völler