Compilers

Welke vorm van de abstracte syntaxisboom van de expressie 2 + 3 * 4 is juist?

  1. ADe wortel is een +-knoop, waarvan het rechterkind een *-knoop is die 3 * 4 voorstelt
  2. BDe wortel is een *-knoop, waarvan het linkerkind een +-knoop is die 2 + 3 voorstelt
  3. CDe vijf knopen 2, 3, 4, + en * staan allemaal als directe kinderen naast elkaar onder de wortel
Antwoord en toelichting tonen

Antwoord: A. De wortel is een +-knoop, waarvan het rechterkind een *-knoop is die 3 * 4 voorstelt

Vermenigvuldigen heeft een hogere prioriteit dan optellen, zodat de expressie wordt geïnterpreteerd als 2 + (3 * 4). In een abstracte syntaxisboom staat de bewerking die eerst wordt berekend lager, dus de wortel is + met als linkerkind 2 en als rechterkind een *-knoop met 3 en 4 als kinderen. Als de boom van onder af wordt geëvalueerd, wordt eerst 3 * 4 = 12 berekend en daarna 2 + 12 = 14. De wortel is * als het (2 + 3) * 4 zou zijn, en als alles naast elkaar onder de wortel staat, kan de volgorde van berekening niet worden weergegeven.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Compilers

  1. Welke uitspraak over driehoeksadrescode (three-address code), een tussenrepresentatie, is juist?
  2. Wat wordt bepaald bij de levendigheidsanalyse (liveness analysis) die als voorbereiding op registertoewijzing wordt uitgevoerd?
  3. In een functie bedraagt het grootste aantal gelijktijdig levende waarden 5. Als de interferentiegraaf buiten deze 5 geen beperkingen oplegt, hoeveel registers zijn dan minstens nodig om alle waarden zonder spill in registers te plaatsen?
  4. Hoeveel keer worden de iteratietest en sprong uitgevoerd als een lus met 100 iteraties wordt herschreven met loop unrolling waarbij de body viermaal achter elkaar wordt gezet? (100 is deelbaar door 4.)
  5. Welke algemene volgorde waarin uit een C-programma een uitvoerbaar bestand ontstaat is juist?

Vergelijkingen bij dit onderwerp