Syntaxbaum (englisch Parse Tree; die reduzierte Variante heißt Abstrakter Syntaxbaum, AST) ist die Baumstruktur, die die grammatikalische Struktur eines Programms oder Ausdrucks abbildet. Er entsteht beim Parsen und ist die zentrale Datenstruktur, mit der Compiler und Interpreter den Code verstehen.

Konkreter Syntaxbaum (Parse Tree)

Der konkrete Syntaxbaum bildet die Regeln der Grammatik eins zu eins ab: Innere Knoten sind die Nichtterminale (grammatische Phrasen wie Expression oder Statement), Blätter sind die Terminale - die Tokens aus der lexikalischen Analyse. Der Parse Tree enthält alles, was im Quelltext steht, inklusive Klammern, Semikolons und Schlüsselwörter. Für a + b * c sieht er vereinfacht so aus:

      expr
     / |    expr +  expr
   |      / |    a     b  *  c

Die Baumstruktur erzwingt die Prioritäten: * bindet stärker als +, also wird zuerst b * c berechnet.

Abstrakter Syntaxbaum (AST)

Für die weitere Verarbeitung ist der Parse Tree unnötig detailliert. Der abstrakte Syntaxbaum entfernt syntaktisches Beiwerk: Klammern, Semikolons und Zwischen-Knoten, die nur die Ableitung repräsentieren, verschwinden. Übrig bleiben die semantisch relevanten Knoten - BinaryExpr(+) mit den Kindern Var(a) und BinaryExpr(*) mit Var(b), Var(c). Der AST ist die Standard-Repräsentation für Optimierung, Analyse und Codeerzeugung. In der Praxis bauen viele Parser den AST direkt auf, ohne vorher einen vollständigen Parse Tree zu materialisieren.

Wie der Baum entsteht

Grundlage ist eine kontextfreie Grammatik mit Produktionsregeln wie Expression ::= Expression "+" Expression | Number. Der Parser leitet das Token-Programm mit diesen Regeln ab - jeder Regelanwendung entspricht ein Knoten. Mehrdeutige Grammatiken (etwa a - b - c) müssen durch Priorität und Assoziativität oder Klammerung aufgelöst werden; Techniken wie rekursiver Abstieg, Pratt-Parsing oder der Shunting-yard-Algorithmus kümmern sich darum. Geprüft wird dabei die Syntax - die Struktur -, während später die Semantik (Typen, Sichtbarkeit) folgt.

Wozu Syntaxbäume gut sind

Der Syntaxbaum ist die Grundlage fast jeder Code-Verarbeitung:

  • Compiler und Interpreter: AST durchlaufen, optimieren, in Maschinensprache oder Zwischencode übersetzen.
  • Interpretierte Sprachen: Der Interpreter wertet den AST direkt aus, ohne Maschinencode zu erzeugen.
  • Entwicklungswerkzeuge: IDEs nutzen den AST für Autovervollständigung, Refactoring und Markierungen; Linter und statische Analyse prüfen Regeln auf dem Baum.

Einmal geparst, wird der Baum zur gemeinsamen Sprache zwischen Werkzeugen - egal ob der Code von Menschen oder generiert wurde.

Verwandte Grundlagen: Parser, Lexikalische Analyse, Syntax, Compiler, Interpreter, Interpretierte Sprache.