Compiler Construction

Compiler Construction

Compiler Construction Lecture 15: Code Generation I (Intermediate Code) Winter Semester 2018/19 Thomas Noll Software Modeling and Verification Group RWTH Aachen University https://moves.rwth-aachen.de/teaching/ws-1819/cc/ Generation of Intermediate Code Outline of Lecture 15 Generation of Intermediate Code The Example Programming Language EPL Semantics of EPL Intermediate Code for EPL 2 of 20 Compiler Construction Winter Semester 2018/19 Lecture 15: Code Generation I (Intermediate Code) Generation of Intermediate Code Conceptual Structure of a Compiler Source code Lexical analysis (Scanner) Asg ok Syntax analysis (Parser) int Var Exp int Semantic analysis Sum int int Var Con int Generation of intermediate code tree translations LOAD y2; LIT 1; ADD; STO x1 Code optimisation Generation of target code Target code 3 of 20 Compiler Construction Winter Semester 2018/19 Lecture 15: Code Generation I (Intermediate Code) Advantages: IC machine independent =) Portability: much easier to write IC compiler/interpreter for a new machine (as opposed to rewriting the whole compiler) Fast compiler implementation: generating IC much easier than generating MC Code size: IC programs usually smaller than corresponding MC programs Code optimisation: division into machine-independent and machine-dependent parts Generation of Intermediate Code Modularisation of Code Generation I Splitting of code generation for programming language PL: trans code PL −!IC −!MC Frontend: trans generates machine-independent intermediate code (IC) for abstract (stack) machine Backend: code generates actual machine code (MC) 4 of 20 Compiler Construction Winter Semester 2018/19 Lecture 15: Code Generation I (Intermediate Code) Generation of Intermediate Code Modularisation of Code Generation I Splitting of code generation for programming language PL: trans code PL −!IC −!MC Frontend: trans generates machine-independent intermediate code (IC) for abstract (stack) machine Backend: code generates actual machine code (MC) Advantages: IC machine independent =) Portability: much easier to write IC compiler/interpreter for a new machine (as opposed to rewriting the whole compiler) Fast compiler implementation: generating IC much easier than generating MC Code size: IC programs usually smaller than corresponding MC programs Code optimisation: division into machine-independent and machine-dependent parts 4 of 20 Compiler Construction Winter Semester 2018/19 Lecture 15: Code Generation I (Intermediate Code) 2. Pascal’s portable code (P-code; ≈ 1970; https://en.wikipedia.org/wiki/P-Code_machine) 3. Java Virtual Machine bytecode (JVM; Sun; ≈ 1995; https://en.wikipedia.org/wiki/Java_Virtual_Machine) 4. Intermediate Representation code in LLVM framework (IR; U Illinois; ≈ 2000; https://llvm.org/) 5. Common Intermediate Language (CIL; Microsoft .NET; ≈ 2002; https://en.wikipedia.org/wiki/Common_Intermediate_Language) Generation of Intermediate Code Modularisation of Code Generation II Example 15.1 1. UNiversal Computer-Oriented Language (UNCOL; ≈ 1960; https://en.wikipedia.org/wiki/UNCOL): universal intermediate language for compilers (never fully specified or implemented; too ambitious) PL MC 1 1 only n + m translations . UNCOL . (in place of n · m) PLm MCn 5 of 20 Compiler Construction Winter Semester 2018/19 Lecture 15: Code Generation I (Intermediate Code) 3. Java Virtual Machine bytecode (JVM; Sun; ≈ 1995; https://en.wikipedia.org/wiki/Java_Virtual_Machine) 4. Intermediate Representation code in LLVM framework (IR; U Illinois; ≈ 2000; https://llvm.org/) 5. Common Intermediate Language (CIL; Microsoft .NET; ≈ 2002; https://en.wikipedia.org/wiki/Common_Intermediate_Language) Generation of Intermediate Code Modularisation of Code Generation II Example 15.1 1. UNiversal Computer-Oriented Language (UNCOL; ≈ 1960; https://en.wikipedia.org/wiki/UNCOL): universal intermediate language for compilers (never fully specified or implemented; too ambitious) PL MC 1 1 only n + m translations . UNCOL . (in place of n · m) PLm MCn 2. Pascal’s portable code (P-code; ≈ 1970; https://en.wikipedia.org/wiki/P-Code_machine) 5 of 20 Compiler Construction Winter Semester 2018/19 Lecture 15: Code Generation I (Intermediate Code) 4. Intermediate Representation code in LLVM framework (IR; U Illinois; ≈ 2000; https://llvm.org/) 5. Common Intermediate Language (CIL; Microsoft .NET; ≈ 2002; https://en.wikipedia.org/wiki/Common_Intermediate_Language) Generation of Intermediate Code Modularisation of Code Generation II Example 15.1 1. UNiversal Computer-Oriented Language (UNCOL; ≈ 1960; https://en.wikipedia.org/wiki/UNCOL): universal intermediate language for compilers (never fully specified or implemented; too ambitious) PL MC 1 1 only n + m translations . UNCOL . (in place of n · m) PLm MCn 2. Pascal’s portable code (P-code; ≈ 1970; https://en.wikipedia.org/wiki/P-Code_machine) 3. Java Virtual Machine bytecode (JVM; Sun; ≈ 1995; https://en.wikipedia.org/wiki/Java_Virtual_Machine) 5 of 20 Compiler Construction Winter Semester 2018/19 Lecture 15: Code Generation I (Intermediate Code) 5. Common Intermediate Language (CIL; Microsoft .NET; ≈ 2002; https://en.wikipedia.org/wiki/Common_Intermediate_Language) Generation of Intermediate Code Modularisation of Code Generation II Example 15.1 1. UNiversal Computer-Oriented Language (UNCOL; ≈ 1960; https://en.wikipedia.org/wiki/UNCOL): universal intermediate language for compilers (never fully specified or implemented; too ambitious) PL MC 1 1 only n + m translations . UNCOL . (in place of n · m) PLm MCn 2. Pascal’s portable code (P-code; ≈ 1970; https://en.wikipedia.org/wiki/P-Code_machine) 3. Java Virtual Machine bytecode (JVM; Sun; ≈ 1995; https://en.wikipedia.org/wiki/Java_Virtual_Machine) 4. Intermediate Representation code in LLVM framework (IR; U Illinois; ≈ 2000; https://llvm.org/) 5 of 20 Compiler Construction Winter Semester 2018/19 Lecture 15: Code Generation I (Intermediate Code) Generation of Intermediate Code Modularisation of Code Generation II Example 15.1 1. UNiversal Computer-Oriented Language (UNCOL; ≈ 1960; https://en.wikipedia.org/wiki/UNCOL): universal intermediate language for compilers (never fully specified or implemented; too ambitious) PL MC 1 1 only n + m translations . UNCOL . (in place of n · m) PLm MCn 2. Pascal’s portable code (P-code; ≈ 1970; https://en.wikipedia.org/wiki/P-Code_machine) 3. Java Virtual Machine bytecode (JVM; Sun; ≈ 1995; https://en.wikipedia.org/wiki/Java_Virtual_Machine) 4. Intermediate Representation code in LLVM framework (IR; U Illinois; ≈ 2000; https://llvm.org/) 5. Common Intermediate Language (CIL; Microsoft .NET; ≈ 2002; https://en.wikipedia.org/wiki/Common_Intermediate_Language) 5 of 20 Compiler Construction Winter Semester 2018/19 Lecture 15: Code Generation I (Intermediate Code) Stack-based memory allocation for procedures • FORTRAN: non-recursive and non-nested procedures (requirements statically determined) ) static memory management • C: recursive and non-nested procedures (requirements only known at runtime) ) dynamic memory management using runtime stack, no static links • Algol-like languages (Pascal, Modula): recursive and nested procedures ) dynamic memory management using runtime stack with static links Heap-based memory allocation for dynamic data structures • Imperative languages (Pascal, C): dynamic memory allocation • Object-oriented languages (C++, Java): object creation and removal Generation of Intermediate Code Language Structures I Structures in high-level (imperative) programming languages • Basic data types and basic operations • Control structures (branching, loops, ...) • Static and dynamic data structures • Procedures and functions • Expressions and assignments • Modularity: blocks, modules, and classes 6 of 20 Compiler Construction Winter Semester 2018/19 Lecture 15: Code Generation I (Intermediate Code) Heap-based memory allocation for dynamic data structures • Imperative languages (Pascal, C): dynamic memory allocation • Object-oriented languages (C++, Java): object creation and removal Generation of Intermediate Code Language Structures I Structures in high-level (imperative) programming languages • Basic data types and basic operations • Control structures (branching, loops, ...) • Static and dynamic data structures • Procedures and functions • Expressions and assignments • Modularity: blocks, modules, and classes Stack-based memory allocation for procedures • FORTRAN: non-recursive and non-nested procedures (requirements statically determined) ) static memory management • C: recursive and non-nested procedures (requirements only known at runtime) ) dynamic memory management using runtime stack, no static links • Algol-like languages (Pascal, Modula): recursive and nested procedures ) dynamic memory management using runtime stack with static links 6 of 20 Compiler Construction Winter Semester 2018/19 Lecture 15: Code Generation I (Intermediate Code) Generation of Intermediate Code Language Structures I Structures in high-level (imperative) programming languages • Basic data types and basic operations • Control structures (branching, loops, ...) • Static and dynamic data structures • Procedures and functions • Expressions and assignments • Modularity: blocks, modules, and classes Stack-based memory allocation for procedures • FORTRAN: non-recursive and non-nested procedures (requirements statically determined) ) static memory management • C: recursive and non-nested procedures (requirements only known at runtime) ) dynamic memory management using runtime stack, no static links • Algol-like

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    42 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us