2x2 - Theoretische Informatik - Universität Duisburg-Essen
2x2 - Theoretische Informatik - Universität Duisburg-Essen
2x2 - Theoretische Informatik - Universität Duisburg-Essen
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Kontextsensitive und Typ-0-Sprachen<br />
Berechenbarkeitstheorie<br />
Komplexitätstheorie<br />
Berechnungsmodelle<br />
Unentscheidbarkeit<br />
Unentscheidbare Probleme<br />
Kontextsensitive und Typ-0-Sprachen<br />
Berechenbarkeitstheorie<br />
Komplexitätstheorie<br />
Berechnungsmodelle<br />
Unentscheidbarkeit<br />
Unentscheidbare Probleme<br />
Goto-Programme<br />
Goto-Programme<br />
Semantik von Goto-Programmen<br />
If-Anweisungen werden wie üblich interpretiert.<br />
Goto M springt an die entsprechende Marke des Programms.<br />
Halt-Anweisungen beenden Goto-Programme. (Die letzte<br />
Anweisung eines Programms sollte ein Halt oder ein<br />
unbedingter Sprung sein.)<br />
Wie While-Programme können auch Goto-Programme in<br />
unendliche Schleifen geraten.<br />
Goto-berechenbare Funktionen sind analog zu<br />
While-berechenbaren Funktionen definiert.<br />
While-Programme → Goto-Programme<br />
Jedes While-Programm kann durch ein Goto-Programm<br />
simuliert werden. Das heißt, jede While-berechenbare Funktion<br />
ist Goto-berechenbar.<br />
Eine While-Schleife<br />
While x ≠ 0 Do P End<br />
kann simuliert werden durch<br />
M 1 : If x = 0 Then Goto M 2 ;<br />
P;<br />
Goto M 1 ;<br />
M 2 : . . .<br />
Goto-Programme<br />
Kontextsensitive und Typ-0-Sprachen<br />
Berechenbarkeitstheorie<br />
Komplexitätstheorie<br />
Barbara König BeKo/TI 99<br />
Berechnungsmodelle<br />
Unentscheidbarkeit<br />
Unentscheidbare Probleme<br />
Goto-Programme<br />
Kontextsensitive und Typ-0-Sprachen<br />
Berechenbarkeitstheorie<br />
Komplexitätstheorie<br />
Barbara König BeKo/TI 100<br />
Berechnungsmodelle<br />
Unentscheidbarkeit<br />
Unentscheidbare Probleme<br />
Auch die – nicht ganz so offensichtliche – Umkehrung gilt:<br />
Goto-Programme → While-Programme<br />
Jedes Goto-Programm kann durch ein While-Programm<br />
simuliert werden. Das heißt, jede Goto-berechenbare Funktion ist<br />
While-berechenbar.<br />
Das ist einer der Gründe dafür, warum in modernen<br />
Programmiersprachen im allgemeinen keine Gotos verwendet<br />
werden.<br />
Weitere Gründe:<br />
Edsger W. Dijkstra: “Go To Statement Considered Harmful”<br />
(1968)<br />
(siehe http://www.acm.org/classics/oct95/)<br />
Spaghetti-Code bei Verwendung von Gotos<br />
Barbara König BeKo/TI 101<br />
Die Simulation von Goto-Programmen durch While-Programme<br />
verwendet nur eine While-Schleife.<br />
Das bedeutet: ein While-Programm kann durch Umwandlung in<br />
ein Goto-Programm und Zurückumwandlung in ein äquivalentes<br />
While-Programm mit einer While-Schleife umgewandelt werden.<br />
Dabei muss man allerdings annehmen, dass die Sprache auch<br />
If-Anweisungen zur Verfügung stellt.<br />
(Kleenesche Normalform für While-Programme)<br />
Barbara König BeKo/TI 102