17.11.2013 Aufrufe

Skript mit Übungen - Hochschule Ravensburg-Weingarten

Skript mit Übungen - Hochschule Ravensburg-Weingarten

Skript mit Übungen - Hochschule Ravensburg-Weingarten

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Kapitel 3<br />

Formale Sprachen und<br />

Maschinenmodelle<br />

3.1 Grundlagen<br />

Man muss sich Sprachen vorstellen wie einen Legobaukasten. Die Buchstaben des Alphabets<br />

entsprechen elementaren Bausteinen und die Worte, beziehungsweise Sätze entsprechen gebauten<br />

Objekten. Solche Mengen lassen sich mehr oder weniger einfach beschreiben. Zum<br />

Beispiel die Menge der Objekte, die nur aus roten Steinen gebaut sind. Oder die Menge der<br />

Objekte bei denen auf einem Basisstein nur Steine oben draufgesetzt werden dürfen, aber<br />

nicht daneben. Was ist, wenn ich das fertige Objekt auf den Kopf stelle? Muß dann die<br />

Forderung immer noch erfüllt sein?<br />

Um solche Unklarheiten auszuschließen, werden wir bei den Sprachen ganz formal vorgehen.<br />

Wir werden Spielgregeln in Form von Grammatiken zum Aufbau von Sprachen angeben.<br />

Mit diesen Spielregeln können dann nur noch Worte aus einer bestimmten Sprache erzeugt<br />

(abgeleitet) werden.<br />

Hier stellen sich sofort einige für den Informatiker sehr wichtige und interessante Fragen:<br />

• Läßt sich jede formale Sprache durch eine Grammatik beschreiben?<br />

• Wenn ich eine Grammatik G habe, die eine Sprache L definiert, wie kann ich erkennen,<br />

ob ein Wort zu dieser Sprache gehört oder nicht?<br />

• Etwas konkreter: Ist es möglich, für eine konkrete Programmiersprache L in endlicher<br />

Zeit zu entscheiden, ob ein vorgegebener Text ein Programm dieser Sprache darstellt<br />

oder nicht. Diese Aufgabe ist der Syntaxcheck des Compliers.<br />

• Ist diese Entscheidung vielleicht sogar effizient möglich, das heißt, auch für große Programme<br />

in kurzer Zeit?<br />

• Wenn ja, wie macht man das?<br />

• Kann man vielleicht sogar automatisch Fehler in Programmen erkennen, wie zum Beispiel<br />

Endlosschleifen?<br />

• Kann man überprüfen, ob ein Programm korrekt ist?<br />

Die Beantwortung dieser Fragen ist Bestandteil des Gebiets der formalen Sprachen und<br />

Automaten. Um es vorweg zu nehmen, wir werden bis auf die erste und die letzten beiden<br />

Fragen teilweise oder ganz positive Antworten liefern.<br />

55

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!