Presentation is loading. Please wait.

Presentation is loading. Please wait.

COP 4620 / 5625 Programming Language Translation / Compiler Writing Fall 2003 Lecture 10, 10/30/2003 Prof. Roy Levow.

Similar presentations


Presentation on theme: "COP 4620 / 5625 Programming Language Translation / Compiler Writing Fall 2003 Lecture 10, 10/30/2003 Prof. Roy Levow."— Presentation transcript:

1 COP 4620 / 5625 Programming Language Translation / Compiler Writing Fall 2003 Lecture 10, 10/30/2003 Prof. Roy Levow

2 Attribute Grammars: Manual Methods Attribute grammars and evaluators provide a useful framework for providing context to a program But the technology is not yet well developed And it can be difficult to use Thus, manual methods are frequently used

3 Manual Methods.2 Symbolic Interpretation –Uses interpreter approach on AST to compute attributes Data-flow Equations –More general technique based on set equations to reveal relationships among attributes

4 Symbolic Interpretation Control flow graph can be constructed by threading nodes of AST –Possibly adding nodes for simplicity –A threading rule is provided for each kind of node Then simulate run-time behavior of program Requires wide compiler

5 Flow Control & Threading

6 Flow Control & Threading.2

7 Flow Control & Threading.3

8 Flow Control & Threading.4

9 Symbolic Interpretation Attach a stack representation to each arrow in the control flow graph indicating the items that might be on the stack at that time in program execution with relevant attributes Cal also identify features such as uninitialized variables

10 Stack Representation of If

11 Symbolic Interpretation of If

12 Data Flow Equations –Used on well-structured programs –Used to evaluate properties of data values across a program Liveness (accessed later) Initialized before use –Describe condition leaving block in terms of condition on entry and effects of block

13 Data Flow Equations.2 Example –Can be used to check for uninitialized variables –Solve by setting conditions for entry to initial block and compute closure

14 Intermediate Code Intermediate Code is usually tree structured like the AST –But may be linear or have other forms Intermediate Code features –Expressions, including assignment –Routine class, Procedure headings, Returns –Conditional and unconditional jumps –Administrative activities

15 Intermediate Code.2 Assume wide compiler Traverse AST replacing language context structures with intermediate code instructions Produce is Intermediate Code Tree but is often still referred to as AST (Skipping 4.1 on Interpretation)

16 Code Generation Can be viewed as tree rewriting –In which tree branches are replaced by linear code –Working through threaded AST

17 Simple Code Generation Stack Machine Identify code for each node Replace node with corresponding code Emit code in bottom-up order

18 Example for Stack Machine

19 Example for Stack Machine.2

20 Example for Stack Machine.3

21 Emit Code for Stack Machine

22 Emitted Stack Machine Code Push_Local #b Mult_Top2 Push_Cosnt4 Push_Local #a Push_Local #c Mult_Top2 Subtr_Top2

23 Execution Profile for Stack Machine

24 Simple Code Generation Register Machine Need to assign computational values to registers –Normally start with unlimited number of registers in intermediate code and then handle actual limitations –Follow machine architecture for one or both operands in registers –May specify target register for result or not

25 Register Code for AST Nodes

26 Register Code Generation with Register Numbering

27 Generated Register Code

28

29 Register Code Generation When the number of registers is limited and more are needed than are available Spill values from registers to memory See example with 2 registers on next slide

30


Download ppt "COP 4620 / 5625 Programming Language Translation / Compiler Writing Fall 2003 Lecture 10, 10/30/2003 Prof. Roy Levow."

Similar presentations


Ads by Google