gutefrage.net, die Ratgeber Community
version2_beta
Login   |  Forum |  Richtlinien |  FAQ


Wie wird IF/ELSE/END vom Interpreter abgearbeitet bzw. interpretiert?

gefragt von orbitohnezucker2004 am 08.02.2008 um 13:45 Uhr

Wie erkennen Interpreter in der Programmierung if-else-end Blöcke bzw. wie wird hierbei speziell die Zugehörigkeit von else und endif zu einem if ermittelt? Gibt es hierzu gescheite FAQ´s oder Tutorials im Netz, die aufzeigen, wie solch eine Struktur abgearbeitet wird? ...am besten mit Codebeispielen untermalt.

Gruß


Weitere Fragen zu verwandten Themen finden Sie hier:

Computer (13729)
Programmierung (98)
ähnliche Fragen

Reply


anonym
beantwortet von pjakobs am 8. Februar 2008 13:53
2x
Thumb_up

hmm... versteh das Problem nicht.

bei den meisten Sprachen beendest Du doch einen IF Block eindeutig, entweder, in C, mit der Klammer, oder, wie in Perl oder BASH durch ein ENDIF oder FI

Wenn innerhalb dieses Blockes ein neues IF kommt, dann wird der alte quasi auf den Stack geschoben und ein neuer Kontext eröffnet.

pj


anonym
beantwortet von benutzer27 am 8. Februar 2008 13:55
2x
Thumb_up

über welche Programmiersprache redest du?

if (bedingung) then (ja-block) else (nein-block) endif

Die Schlüsselworte sind manchmal von Programmiersprache zu Programmiersprache unterschiedlich, das Verfahren immer gleich: Der Interpreter/Compiler prüft die Bedingung, ist diese wahr (logisch richtig), dann wird der ja-block (kann auch ein einzelnen Kommando sein) abgearbeitet. Im falsch-Fall, wird der nein-block (Kommando) abgearbeitet. Der else- (nein-block) Zweig kann auch entfallen.

Beispiel:

if (Frage gelesen und verstanden)

then

{ Antwort formulieren und einhacken }

else

{ lieber schweigen und nichts sagen }

(end)if


UlfDunkel
beantwortet von UlfDunkel am 8. Februar 2008 14:34
1x
Thumb_up

Ein Interpreter erkennt IF-ELSE-Blöcke gar nicht.

Wenn sie jemand erkennt, dann der Parser, also der Programmteil, der den Quellcode Zeichen für Zeichen "durchliest" und anhand der ihm bekannten (und unbekannten) "Tokens" analysiert.


Cuchulainn
beantwortet von Cuchulainn am 9. Februar 2008 10:34
1x
Thumb_up

Das ist ein großes Thema in der theoretischen Informatik. Ich versuche mal, es ganz grob darzustellen.

Eine Programmiersprache ist eine Sprache mit einer sogenannten kontextfreien Grammatik. Das heißt, die Wörter bedeuten immer das gleiche, vollkommen unabhängig vom Textzusammenhang. Das ist anders als bei natürlichen Sprachen, wo der Kontext immer eine Rolle spielt. Aber um dies auszuwerten, benötigt man eine Intelligenz, die der Rechner nicht hat.

Eine kontextfreie Grammatik ist nach bestimmten Regeln aufgebaut, die der Parser dann einfach durchspielt. Dort ist dann ebenfalls geregelt, welche Anweisungen in den If-Blöcken stehen dürfen. Diese Regeln werden in der Backus-Naur-Form oder in der erweiterten Backus-Naur-Form angegeben.

Sie basiert darauf, dass bestimmte Regeln auf andere Regeln abgeleitet werden können. Das bedeutet, dass eine Regel aus mehreren anderen bestehen kann. So kann die If-Anweisung abgeleitet werden auf if <Bedingung> then <Anweisungen> fi oder auf if <Bedingung> then <Anweisungen> else <Anweisungen> fi.

Der Interpreter kennt diese Regeln und springt dann jeweils in die passende abgeleitete Regel. Wenn diese abgearbeitet ist, springt er wieder zurück in die obere Regel. Und so kann er Anfang und Ende zuordnen.

Die Schlüsselwörter werden dazu wohl in einem Keller abgespeichert. Das heißt, dass neue Elemente von ben drauf gelegt werden. Elemente können nur von oben wieder gelöscht werden, also die neuen Elemente zuerst. Mal angenommen, du hast zwei If-Anweisungen, dann wird erst das erste if gespeichert, dann das zweite if. Wenn der Parser ein fi findet, wird das zweite if gelöscht. Das heißt, er muss noch ein fi finden, sonst liegt ein Fehler vor. Er kann auch wieder ein if finden oder ein else. Dieses Schlüsselwort kommt wieder auf den Keller, bis das entsprechende Ende gefunden wird.

Das ist sehr schwer kurz zusammenzufassen. Such im Internet mal nach kontextfreien Sprachen, Kellerautomaten und Backus-Naur-Form. Vielleicht findest du dort etwas.




Verwandte Fragen

Verwandte Fragen


Mehr verwandte Fragen

Verwandte Fragen
Die unter gutefrage.net angebotenen Dienste und Ratgeber Inhalte werden nicht geprüft. Die Richtigkeit der Inhalte wird nicht gewährleistet. Bitte lesen Sie hierzu auch unsere Rechtlichen Hinweise.