Ausdruck → AST → TAC
Einen arithmetischen oder booleschen Ausdruck in einen AST parsen, Drei-Adress-Code mit optionaler Konstantenfaltung erzeugen und das äquivalente Stackmaschinen-Programm zeigen.
Über dieses Tool
Ein Miniatur-Compiler-Frontend für Ausdrücke. Etwas wie (a + b) * c eingeben, Kompilieren drücken und die Pipeline lesen: Tokens → AST → Drei-Adress-Code → Stackmaschine.
Grammatik. Zahlen, Bezeichner, unär +/-/!, binär + - * / %, Vergleiche == != < > <= >= und boolesch && ||, mit der üblichen Präzedenz (|| niedrigste, * / % höchste). Klammern überschreiben die Präzedenz. true/false sind 1 und 0.
Drei-Adress-Code ist die klassische Zwischenform: jede Anweisung ist t := a op b (oder unär). Temporaries sind frische t1, t2, …. Konstantenfaltung wertet bei Aktivierung reine Zahlen-Teilbäume vor der Ausgabe aus — (2 + 3) * x + 4 * 5 mit Faltung an und aus ausprobieren.
Stackmaschine ist das, was eine Bytecode-VM oder ein Postfix-Rechner ausführt: LOAD/PUSH, dann Operatoren, die Operanden vom Stack nehmen und das Ergebnis darauf legen. Der AST wird in Postorder durchlaufen, daher ist das Stackprogramm genau die umgekehrte polnische Notation des Ausdrucks.
Warum das zählt. Echte Compiler (LLVM, GCC, JVM javac) gehen alle durch irgendeine AST-Form und dann durch ein lineares IR vor der Registerzuteilung. Baum und TAC nebeneinander machen Präzedenz, Assoziativität und Temporary-Namen konkret.
Grenzen. Nur Ausdrücke — keine Anweisungen, Zuweisungen, Aufrufe, Arrays oder Short-Circuit-Absenkung des Kontrollflusses. Division durch null bei der Faltung ergibt keine Faltung für diesen Knoten. Das AST-Layout ist eine einfache Inorder-Platzierung, geeignet bis zu einigen Dutzend Knoten.
Baumknoten oder Codeanweisung anklicken, um ihre Zuordnung hervorzuheben. Tokens und Anzahlen sind optionale Details. Bearbeiten des Ausdrucks oder der Faltung löscht alte Ergebnisse. Dezimalzahlen verwenden einen Punkt; gerechnet wird mit JavaScript-Binary64, nicht exakten Ganzzahlen. Boolesche Anweisungen werten beide Operanden aus und liefern 0 oder 1; dies ist kein C-/Java-Kurzschlusscode. Temporärnamen überspringen bereits im ausgegebenen Baum vorhandene Namen. Der Baum behält lesbare Knotengrößen und scrollt bei großen Ausdrücken lokal.
Enter erhält Zeilenumbrüche; Strg/Meta+Enter kompiliert. Ausdruckstext, Faltung und Beispielwahl werden lokal gespeichert, auch ungültige Eingaben. Der Parser erlaubt 2.000 Zeichen und 128 Tokens; die Eingabe wird beim Bearbeiten nicht still gekürzt. Negative Null bleibt im gefalteten Baum und in erzeugten Zahlenliteralen als -0 erhalten.