intermediate language array and
play

Intermediate language, array and subprograms Lecture 11 Formal - PowerPoint PPT Presentation

1 Intermediate language, array and subprograms Lecture 11 Formal Languages and Compilers 2011 Nataliia Bielova 2 Compiler for crme CAraMeL Compiler syntax IC tree tokens Source Parser IC generator C Lexer C generator code


  1. 1 Intermediate language, array and subprograms Lecture 11 Formal Languages and Compilers 2011 Nataliia Bielova

  2. 2 Compiler for crème CAraMeL Compiler syntax IC tree tokens Source Parser IC generator C Lexer C generator code Front-end Back-end Formal languages and compilers 2011

  3. 3 Intermediate language ADD val 1 val 2 dest - sum CPY src NULL dest - copy CGE val 1 val 2 dest - copy greater or equal GOTO label NULL NULL - unconditional jump JNE val 1 val 2 label - conditional jump OUT val NULL NUL - print AGET addr idx dest - read array ASET addr idx src - write array PARAM val NULL NULL - add a parameter on the stack CALL id NULL NULL - call a procedure CALL id NULL dest - call a function Formal languages and compilers 2011

  4. 4 Implementation details  Memory cells: union of int and float  Two different vectors: stack and “registers”  Allocation of variables: assignment of offset in the stack  Allocation of temporal values: assignment of a new register Formal languages and compilers 2011

  5. 5 Example CPY Val INT: 1 NULL offset 0 CPY Val INT: 5 NULL offset 2 CPY Val INT: 1 NULL offset 1 Label2: CGE offset 2 offset 1 reg[1].i JNE reg[1].i Val INT: 1 Label nr. 1 OUT offset 1 NULL NULL MUL offset 0 offset 1 reg[2].i CPY reg[2].i NULL offset 0 ADD offset 1 Val INT: 1 reg[3].i CPY reg[3].i NULL offset 1 NOP NULL NULL NULL GOTO Label nr. 2 NULL NULL Label1: OUT offset 0 NULL NULL NOP NULL NULL NULL HALT NULL NULL NULL Formal languages and compilers 2011

  6. 6 Intermediate.ml  Define the instructions of intermediate code and all types of operands:  inst_type: ADD, MUL, CPY, …  label, offset for variables, register for temporal values  class intermediateCode  dec_table - declaration table binds ide with (int, int, element) Formal languages and compilers 2011

  7. 7 Exercise  Note: we do not allow arithmetical operations of mixed types  But so far write(…) command can contain any expression: write(2 + 5.2) which should not be allowed  How to fix it? Formal languages and compilers 2011

  8. Vectors and matrices in crème 8 CAraMeL: compilation var var m : array array[5] of int of int; var var v : array array[3,2] of int of int ... for i := 0 to for to 2 do begin do begin for for j := 0 to to 1 do begin do begin v[i,j] := i + j end end end end Formal languages and compilers 2011

  9. Vectors and matrices in the 9 compiler  Declaration in style of C: var var v : array array[4,2] of int of int  Access like before: v[2,1] := 45;  No V.O. (or better, V.O.= α )  Simplifies the multiplies Formal languages and compilers 2011

  10. Vectors and matrices in the 10 compiler  Declaration: add dimensions to the declaration table  Semantic control : v[i,j] is OK  i and j are integers and within the bounds  Evaluate expression : calculate the position + AGET  Assignment : calculate the position + ASET Formal languages and compilers 2011

  11. Subprograms in crème 11 CAraMeL: compilation program program var var x : int int function function fact(a: int): int int): int var var b : int int begin begin 479001600 if if (a = 0) then then fact := 1 ⇒ else begin else begin b := call call fact(a - 1); fact := a * b end end end end begin begin x := call call fact(12); write write(x) end end Formal languages and compilers 2011

  12. 12 Subprograms in the compiler  Syntax: the same as in the interpreter  Table of subprograms  Managing stack pointer and base pointer  Call: push on the stack (param) + call  Using one register for the return of the functions Formal languages and compilers 2011

  13. 13 Subprograms in the compiler  Declaration: Building and Subroutine (return type of the functions)  Generation of the code: subroutines.ml  Parameters and local variables: stack!  Call: commands.ml and expressions.ml Formal languages and compilers 2011

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend