Top Banner

Click here to load reader

Compiler Construction 1. Introduction - · PDF fileCompiler Construction ... > Example: compiler and interpreter for a toy language 4 See Modern compiler implementation in Java (Second

Oct 31, 2019

ReportDownload

Documents

others

  • Oscar Nierstrasz

    Compiler Construction 1. Introduction

  • Compiler Construction

    Lecturers Prof. Oscar Nierstrasz, Dr. Mircea Lungu Assistants Jan Kurš, Boris Spasojević Lectures E8 001, Fridays @ 10h15-12h00 Exercises E8 001, Fridays @ 12h00-13h00 WWW scg.unibe.ch/teaching/cc

    2

  • MSc registration Spring 2015

    JMCS students

    • Register on Academia for teaching units by March 13, 2015 • Register on Academia for exams by May 15, 2015 • Request reimbursement of travel expenses by June 30, 2015

    NB: Hosted JMCS students (e.g. CS bachelor students etc.) must additionally:

    • Request for Academia access by February 28, 2015

    http://mcs.unibnf.ch/admin http://mcs.unibnf.ch/admin http://www.unifr.ch/benefri http://mcs.unibnf.ch/node/535

  • Roadmap

    > Overview > Front end > Back end > Multi-pass compilers > Example: compiler and interpreter for a toy language

    4

    See Modern compiler implementation in Java (Second edition), chapter 1.

  • Roadmap

    > Overview > Front end > Back end > Multi-pass compilers > Example: compiler and interpreter for a toy language

    5

  • Textbook

    > Andrew W. Appel, Modern compiler implementation in Java (Second edition), Cambridge University Press, New York, NY, USA, 2002, with Jens Palsberg.

    Thanks to Jens Palsberg and Tony Hosking for their kind permission to reuse and adapt the CS132 and CS502 lecture notes. http://www.cs.ucla.edu/~palsberg/ http://www.cs.purdue.edu/homes/hosking/

    6

    http://www.cs.ucla.edu/~palsberg/ http://www.cs.purdue.edu/homes/hosking/

  • Other recommended sources

    > Compilers: Principles, Techniques, and Tools, Aho, Sethi and Ullman —http://dragonbook.stanford.edu/

    > Parsing Techniques, Grune and Jacobs —http://www.cs.vu.nl/~dick/PT2Ed.html

    > Advanced Compiler Design and Implementation, Muchnik

    7

    http://dragonbook.stanford.edu/ http://www.cs.vu.nl/~dick/PT2Ed.html

  • Schedule

    8

    1 20-Feb-15 Introduction 2 27-Feb-15 Lexical Analysis 3 06-Mar-15 Parsing 4 13-Mar-15 Parsing in Practice 5 20-Mar-15 Semantic Analysis 6 27-Mar-15 Intermediate Representation

    03-Apr-15 Good Friday 10-Apr-15 Spring break

    7 17-Apr-15 Optimization 8 24-Apr-15 Code Generation 9 01-May-15 Bytecode and Virtual Machines

    10 08-May-15 PEGs, Packrats and Parser Combinators 11 15-May-15 Program Transformation 12 22-May-15 Project Presentations 13 29-May-15 Final Exam

  • CompilerSource code Target code

    errors

    What is a compiler?

    a program that translates an executable program in one language into an executable program in another language

    9

  • What is an interpreter?

    a program that reads an executable program and produces the results of running that program

    10

    InterpreterSource code Output

    errors

  • Pre-processor

    Program

    Parser Code Generator Assembler

    Parse tree / IR Machine codeAssembly code

    InterpreterTranslator Bytecode Generator

    Program ... Bytecode

    Bytecode Interpreter

    JIT Compiler

    Implementing Compilers, Interpreters …

    11

  • Why do we care?

    artificial intelligence

    greedy algorithms learning algorithms

    algorithms graph algorithms union-find dynamic programming

    theory DFAs for scanning parser generators lattice theory for analysis

    systems allocation and naming locality synchronization

    architecture pipeline management hierarchy management instruction set use

    Compiler construction is a microcosm of computer science

    Inside a compiler, all these things come together 12

  • Isn’t it a solved problem?

    > Machines are constantly changing —Changes in architecture ⇒ changes in compilers —new features pose new problems —changing costs lead to different concerns —old solutions need re-engineering

    > Innovations in compilers should prompt changes in architecture —New languages and features

    13

  • What qualities are important in a compiler?

    > Correct code > Output runs fast > Compiler runs fast > Compile time proportional to program size > Support for separate compilation > Good diagnostics for syntax errors > Works well with the debugger > Good diagnostics for flow anomalies > Cross language calls > Consistent, predictable optimization

    14

  • A bit of history

    > 1952: First compiler (linker/loader) written by Grace Hopper for A-0 programming language

    > 1957: First complete compiler for FORTRAN by John Backus and team

    > 1960: COBOL compilers for multiple architectures

    > 1962: First self-hosting compiler for LISP

    15

  • A compiler was originally a program that “compiled” subroutines [a link- loader]. When in 1954 the combination “algebraic compiler” came into use, or rather into misuse, the meaning of the term had already shifted into the present one.

    — Bauer and Eickel [1975]

    16

  • Abstract view

    •recognize legal (and illegal) programs •generate correct code •manage storage of all variables and code •agree on format for object (or assembly) code

    Big step up from assembler — higher level notations 17

    CompilerSource code Target code

    errors

  • Traditional two pass compiler

    • front end maps legal code into IR • intermediate representation (IR) •back end maps IR onto target machine •simplifies retargeting •allows multiple front ends •multiple passes ⇒ better code

    18

    front endsource code machine

    code

    errors

    code generation

    IR

  • A fallacy!

    Front-end, IR and back-end must encode knowledge needed for all n×m combinations!

    19

  • Roadmap

    > Overview > Front end > Back end > Multi-pass compilers > Example: compiler and interpreter for a toy language

    20

  • scannersource code IR

    errors

    parser tokens

    Front end

    •recognize legal code •report errors •produce IR •preliminary storage map •shape code for the back end

    Much of front end construction can be automated 21

  • Scanner

    •map characters to tokens •character string value for a token is a lexeme •eliminate white space

    x = x + y = +

    22

    scannersource code IR

    errors

    parser tokens

  • Parser

    •recognize context-free syntax •guide context-sensitive analysis •construct IR(s) •produce meaningful error messages •attempt error correction

    Parser generators mechanize much of the work 23

    scannersource code IR

    errors

    parser tokens

  • Context-free grammars

    1. := 2. := 3. | 4. := number 5. | id 6. := + 7. | -

    Context-free syntax is specified with a grammar, usually in Backus-Naur form (BNF)

    A grammar G = (S,N,T,P) •S is the start-symbol •N is a set of non-terminal symbols •T is a set of terminal symbols •P is a set of productions — P: N → (N ∪T)*

    24

  • Deriving valid sentences

    Production Result

    1 2 5 y 7 - y 2 - y 4 2 - y 6 + 2 - y 3 + 2 - y 5 x + 2 - y

    Given a grammar, valid sentences can be derived by repeated substitution.

    To recognize a valid sentence in some CFG, we reverse this process and build up a parse.

    25

  • Parse trees

    A parse can be represented by a tree called a parse tree (or syntax tree).

    Obviously, this contains a lot of unnecessary information

    26

  • Abstract syntax trees

    So, compilers often use an abstract syntax tree (AST).

    ASTs are often used as an IR.

    27

  • Roadmap

    > Overview > Front end > Back end > Multi-pass compilers > Example: compiler and interpreter for a toy language

    28

  • Back end

    • translate IR into target machine code •choose instructions for each IR operation •decide what to keep in registers at each point •ensure conformance with system interfaces

    Automation has been less successful here 29

    instruction selectionIR machine code

    errors

    register allocation

  • instruction selectionIR machine code

    errors

    register allocation

    Instruction selection

    •produce compact, fast code •use available addressing modes •pattern matching problem

    —ad hoc techniques — tree pattern matching —string pattern matching —dynamic programming

    30

  • instruction selectionIR machine code

    errors

    register allocation

    Register allocation

    •have value in a register when used • limited resources •changes instruction choices •can move loads and stores •optimal allocation is difficult

    Modern allocators often use an analogy to graph coloring 31

  • Roadmap

    > Overview > Front end > Back end &gt

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.