Skript mit Übungen - Hochschule Ravensburg-Weingarten
Skript mit Übungen - Hochschule Ravensburg-Weingarten
Skript mit Übungen - Hochschule Ravensburg-Weingarten
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