Syntax und SemantikUnter dem Syntax versteht man die Grammatik einer Sprache. Welche Zeichen- und Ziffernfolgen ein korrektes Element der Sprache bilden, welche Kombinationen von Elementen ein Befehls-Elemente: StatementsStatement bilden, welche Sprachstrukturen es gibt und wie sie gebildet werden. Die Semantik beschreibt den Sinn-Inhalt eines Befehls, was sich der Programmierer dabei gedacht hat. Nur syntaktisch korrekt gebildete Befehle sind auch semantisch 'sinnvoll'. Umgekehrt trifft aber der Schluss "alle syntaktisch korrekten Befehle ergeben auch (semantisch) einen Sinn" nicht zu: "Alle Neger sind Menschen" Ist sowohl semantisch als auch syntaktisch korrekt. Demgegenüber ist der Satz "Alle Menschen sind Neger" zwar syntaktisch richtig, inhaltlich ist er aber falsch. Hier liegt ein Sinn-oder eben semantischer Der Linien-Algorithmus: Fehler 3Fehler vor. Für den Parser einer Programmiersprache ist es vergleichsweise einfach, Syntax-Fehler zu erkennen. Deswegen ist diese Fehlermeldung wohl auch die häufigste, die der Basic-Interpreter im Schneider CPC von sich gibt: PRNT Operationen: BD5B / 349A / 349A: FLO SUBa*2 [ENTER] Syntax error Erklärung zu den Bezeichnungen: READY Semantische Der Linien-Algorithmus: Fehler 3Fehler sind meist erst im Programmlauf erkennbar: 10 DIM Operationen: BD5B / 349A / 349A: FLO SUBa(10) 20 FOR i=9 TO 99:PRINT Operationen: BD5B / 349A / 349A: FLO SUBa(i):NEXT RUN [ENTER] 0 0 Subscript out of range Erklärung zu den Bezeichnungen: READY In diesem Beispiel waren alle Befehle korrekt gebildet. Trotztdem enthalten sie in ihrer Gesamtheit einen Der Linien-Algorithmus: Fehler 3Fehler. Dieser steckte im Sinn, so wie auch der Satz "Jeder Mensch ist ein Neger." grammatikalisch richtig gebildet ist, aber trotzdem nicht stimmt. In der Regel bereiten Syntax-Fehler dem Programmierer keine großen Probleme, weil sie recht schnell vom Basic-Interpreter selbst erkannt werden. Auch der Schaden, den semantische Der Linien-Algorithmus: Fehler 3Fehler anrichten können, hält sich in Einleitung: BASIC Im Bezug auf syntaktische und semantische Der Linien-Algorithmus: Fehler 3Fehler gibt es gerade zwischen Interpretern und Compilern große Unterschiede: Ein Interpreter bemerkt einen Syntax-Error erst, wenn er den entsprechenden Befehl auch tatsächlich abarbeiten will. Ist er in einem Programmpfad versteckt, der nur ganz selten benutzt wird, so kann es sein, dass ein Programm, das man schon lange Fehlerfrei glaubte, plötzlich mit 'Syntax error' stehen bleibt (Es gibt aber auch ruehmliche Ausnahmen, wie beispielsweise den Sinclair Spectrum und die Atari-Computer, die bei jeder Eingabe sofort eine Syntax-Analyse vornehmen.). Das selbe gilt natürlich auch für die semantischen Der Linien-Algorithmus: Fehler 3Fehler. Bei Compilern liegt die Sache anders: Der übersetzt den Programmtext ja in einem Rutsch in Maschinensprache, also auch die selten abgearbeiteten Programmpfade. Ein Compiler findet also auf jeden Fall jeden Syntax-Fehler im Programm. Demgegenüber kann es einem bei der Sinn-Kontrolle während des Programmlaufs meist nur kalt den Rücken runter laufen: Die vielen Plausibilitäts-Kontrollen, die der Basic-Interpreter ständig vornimmt, fallen meist zum größten Teil unter den Tisch. Das obige Beispiel wäre, compiliert, möglicherweise lauffähig, würde natürlich ab dem Erklärungen zu den Anschlussbezeichnungen: INDEXIndex 11 nur noch Unsinn liefern. Schuld daran ist, dass jede Fehlerkontrolle unweigerlich Zeit kostet und, was meist noch viel schwerer wiegt, auch mehr Speicherplatz für den zusätzlichen Programm-Code beansprucht. |