Translating Syntax Tree to CFG

Similar to what we had so far, but

  • fresh variable names instead of stack for expressions
  • edges in CFG instead of jump instructions
  • test edges to encode conditional branches

Example of translation

Building a Translator to CFG

Simulating “next” instruction

  • the command to emit next instruction adds a successor edge in the graph
  • makes code generation similar to bytecode generation

Translating Expressions

  • emit instructions, return stored variable name - like stack
  • alternative: passing the destination of assignment


len = (a + b + c) * 2;
len = (a + len + c) * 2;

Number of introduced variables

  • we will worry about this later

Translating Control-Flow

  • what do we need to pass into translation functions?