Generating code for control flow
Generating code for control structures such as conditionals and loops is more challenging than code for arithmetic expressions, as shown in the preceding section. Instead of using synthesized attributes in a single bottom-up pass, code for control flow uses label information that must be moved to where it is needed using inherited attributes. This may involve multiple passes through the syntax tree. We will start with the condition expression logic needed for even the most basic control flow, such as if
statements, and then show you how to apply that to loops, followed by considerations needed for method calls.
Generating label targets for condition expressions
We have already set up for control flow by assigning the first
and follow
attributes, as described in the Annotating syntax trees with labels for control flow section. Consider what role the first
and follow
attributes play, starting with the simplest control flow statement, the if
statement...