EMZETT.
Login

Syntax

Kurz: Die formalen Regeln, nach denen Code in einer Programmiersprache geschrieben sein muss, damit er gültig ist.

Genauer: Legt fest, wie Anweisungen, Klammern, Schlüsselwörter und Strukturen angeordnet werden müssen — unabhängig davon, ob der Code inhaltlich Sinn ergibt (das ist die Semantik). Ein Syntaxfehler (z. B. eine fehlende Klammer) verhindert, dass Code überhaupt kompiliert oder interpretiert wird.

Im Detail

Der Unterschied zwischen Syntax und Semantik lässt sich gut an einem Beispiel zeigen:

# Syntaktisch korrekt, aber semantisch sinnlos:
zahl = "fünf" + 3
 
# Syntaktisch falsch (fehlende Klammer) - läuft gar nicht erst los:
print("Hallo"

Die zweite Zeile wird vom Interpreter/Compiler abgelehnt, BEVOR überhaupt ein einziger Befehl ausgeführt wird — ein Syntaxfehler betrifft die gesamte Datei, nicht nur die fehlerhafte Stelle. Die erste Zeile dagegen ist grammatikalisch einwandfrei (eine Zuweisung, ein +-Operator zwischen zwei Werten), führt aber je nach Sprache entweder zu einem Laufzeitfehler oder einem unerwarteten Ergebnis (z. B. "fünf3" bei automatischer Typumwandlung).

Jede Programmiersprache definiert ihre eigene Syntax formal über eine Grammatik (oft in einer Notation wie BNF beschrieben). Ein Parser prüft eingehenden Code gegen diese Grammatik, bevor ein Compiler oder Interpreter überhaupt mit der eigentlichen Verarbeitung beginnt. IDEs nutzen dieselbe Grammatik, um Syntaxfehler schon während des Tippens rot zu unterstreichen, lange bevor der Code ausgeführt wird.

Syntaxregeln unterscheiden sich stark zwischen Sprachen: Python nutzt Einrückung zur Blockstrukturierung, C-artige Sprachen (Java, C++, JavaScript) geschweifte Klammern { }, Lisp-Dialekte fast ausschließlich Klammern. Wer zwischen mehreren Sprachen wechselt, verwechselt am häufigsten genau diese oberflächlichen syntaktischen Konventionen — die zugrunde liegenden Konzepte (Schleifen, Bedingungen, Funktionen) sind sich meist viel ähnlicher als ihre jeweilige Syntax vermuten lässt.

Syntaktischer Zucker

Ein verwandter Begriff ist “syntaktischer Zucker” — zusätzliche Syntax-Varianten, die keine neue Funktionalität bringen, sondern nur bestehende Konstrukte kompakter/lesbarer ausdrücken. Ein Beispiel: x += 1 ist syntaktischer Zucker für x = x + 1, beide erzeugen exakt denselben Effekt, die kürzere Schreibweise existiert rein aus Bequemlichkeit. Auch moderne Features wie Arrow-Functions in JavaScript (() => {} statt function() {}) oder List-Comprehensions in Python sind größtenteils syntaktischer Zucker über bereits vorhandener Funktionalität.

Syntax-Highlighting und Parser-Wiederverwendung

Editoren und IDEs nutzen dieselbe formale Grammatik einer Sprache gleich zweifach: einmal, um Code farblich hervorzuheben (Schlüsselwörter, Strings, Kommentare in unterschiedlichen Farben), und einmal, um tatsächlich Syntaxfehler zu erkennen. Moderne Werkzeuge wie Tree-sitter erzeugen dabei einen vollständigen Syntaxbaum des Codes in Echtzeit während des Tippens — derselbe Baum, den später auch ein echter Compiler/Interpreter zur Verarbeitung nutzen würde, nur eben schon im Editor verfügbar, lange bevor der Code tatsächlich ausgeführt wird.

Grammatik-Notation

Formale Sprachgrammatiken werden häufig in einer Notation namens BNF (Backus-Naur-Form) oder einer ihrer Erweiterungen (EBNF) beschrieben — eine kompakte, präzise Schreibweise, um festzulegen, welche Zeichenfolgen syntaktisch gültig sind. Diese Notation ist selbst nicht auf eine bestimmte Programmiersprache beschränkt, sondern wird allgemein zur Beschreibung formaler Sprachen genutzt, auch außerhalb der Programmierung (z. B. für Datenformate wie JSON, deren Spezifikation ebenfalls in einer BNF-ähnlichen Notation definiert ist).

Siehe auch: Code, Pseudocode