Compiler

Welche Gestalt des abstrakten Syntaxbaums für den Ausdruck 2 + 3 * 4 ist richtig?

  1. ADie Wurzel ist ein +-Knoten, dessen rechtes Kind ein *-Knoten für 3 * 4 ist
  2. BDie Wurzel ist ein *-Knoten, dessen linkes Kind ein +-Knoten für 2 + 3 ist
  3. CDie fünf Knoten 2, 3, 4, + und * stehen alle als direkte Kinder der Wurzel nebeneinander
Antwort und Erläuterung anzeigen

Antwort: A. Die Wurzel ist ein +-Knoten, dessen rechtes Kind ein *-Knoten für 3 * 4 ist

Die Multiplikation hat höhere Priorität als die Addition, daher wird der Ausdruck als 2 + (3 * 4) interpretiert. Im abstrakten Syntaxbaum liegen zuerst zu berechnende Operationen weiter unten, die Wurzel ist also +, dessen linkes Kind 2 und dessen rechtes Kind ein *-Knoten mit den Kindern 3 und 4 ist. Wird der Baum von unten ausgewertet, wird zuerst 3 * 4 = 12 berechnet und dann 2 + 12 = 14 erhalten. Die Wurzel wäre * bei der Schreibweise (2 + 3) * 4, und bei Nebeneinanderstellen aller Elemente unter der Wurzel ließe sich die Berechnungsreihenfolge nicht ausdrücken.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Compiler

  1. Welche Eigenschaft des Dreiadresscodes (Three-Address Code), einer Form der Zwischendarstellung, ist richtig?
  2. Was wird bei der Lebendigkeitsanalyse (Liveness Analysis), die als Vorbereitung der Registerzuteilung durchgeführt wird, ermittelt?
  3. In einer Funktion ist die Zahl gleichzeitig lebendiger Werte an der ungünstigsten Stelle 5. Wie viele Register werden mindestens benötigt, um alle Werte ohne Spill in Registern zu halten, wenn der Interferenzgraph in einem einfachen Fall keine weiteren Einschränkungen außer diesen 5 erzeugt?
  4. Wie oft werden Zählerprüfung und Verzweigung ausgeführt, wenn eine Schleife mit 100 Iterationen durch Loop Unrolling mit viermal aneinandergereihtem Rumpf umgeschrieben wird? (100 sei durch 4 teilbar.)
  5. Welcher allgemeine Ablauf von einem C-Programm bis zur ausführbaren Datei ist richtig?

Vergleiche zu diesem Thema