Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, www.idc.ac.il/tecs, Chapter 11: Compiler II: Code Generation slide 1www.idc.ac.il/tecs.

Slides:



Advertisements
Similar presentations
Chapter 4: Machine Language
Advertisements

CPSC 388 – Compiler Design and Construction
Symbol Table.
Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 1: Boolean Logic slide 1www.idc.ac.il/tecs Chapter 1: Boolean.
Intermediate Code Generation
The University of Adelaide, School of Computer Science
Software & Services Group, Developer Products Division Copyright© 2010, Intel Corporation. All rights reserved. *Other brands and names are the property.
Programming Paradigms Introduction. 6/15/2005 Copyright 2005, by the authors of these slides, and Ateneo de Manila University. All rights reserved. L1:
Assembly Language for Intel-Based Computers, 4 th Edition Chapter 1: Basic Concepts (c) Pearson Education, All rights reserved. You may modify and.
1 Compiler Construction Intermediate Code Generation.
Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 5: Computer Architecture slide 1www.idc.ac.il/tecs Chapter.
Programming Languages Structure
Cs164 Prof. Bodik, Fall Symbol Tables and Static Checks Lecture 14.
Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 3: Sequential Logic slide 1www.idc.ac.il/tecs Chapter 3:
1.3 Executing Programs. How is Computer Code Transformed into an Executable? Interpreters Compilers Hybrid systems.
Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 8: VM II: Program Control slide 1www.idc.ac.il/tecs Chapter.
Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 7: VM I: Stack Arithmetic slide 1www.idc.ac.il/tecs Chapter.
Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Introduction: Hello, World Below slide 1www.idc.ac.il/tecs Introduction:
CPSC 388 – Compiler Design and Construction Lecture: MWF 11:00am-12:20pm, Room 106 Colton.
Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 10: Compiler I: Syntax Analysis slide 1www.idc.ac.il/tecs.
Principles of Computer Programming (using Java) Review Haidong Xue Summer 2011, at GSU.
Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 9: High Level Language slide 1www.idc.ac.il/tecs Chapter.
Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 2: Boolean Logic slide 1www.idc.ac.il/tecs Chapter 2: Boolean.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 10: Compiler I: Syntax Analysis slide 1www.idc.ac.il/tecs Compiler.
ITEC 352 Lecture 11 ISA - CPU. ISA (2) Review Questions? HW 2 due on Friday ISA –Machine language –Buses –Memory.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 7: Virtual Machine I: Stack Arithmetic slide 1www.nand2tetris.org.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 7: Virutal Machine, Part I slide 1www.idc.ac.il/tecs Virtual Machine.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 4: Machine Language slide 1www.idc.ac.il/tecs Machine Language.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 6: Assembler slide 1www.idc.ac.il/tecs Assembler Elements of Computing.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 5: Computer Architecture slide 1www.idc.ac.il/tecs Computer Architecture.
Slide 1/8Jack IDE Tutorial, Index This program is part of the software suite that accompanies the book The Elements of Computing.
Chapter 1 Introduction Dr. Frank Lee. 1.1 Why Study Compiler? To write more efficient code in a high-level language To provide solid foundation in parsing.
IT253: Computer Organization Lecture 4: Instruction Set Architecture Tonga Institute of Higher Education.
Slide 1/22Assembler Tutorial, Index This program is part of the software suite that accompanies the book The Elements of Computing.
CSC 310 – Imperative Programming Languages, Spring, 2009 Virtual Machines and Threaded Intermediate Code (instead of PR Chapter 5 on Target Machine Architecture)
1 Semantic Analysis Aaron Bloomfield CS 415 Fall 2005.
Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 12: Operating System slide 1www.idc.ac.il/tecs Chapter 12:
1 COMP 3438 – Part II-Lecture 1: Overview of Compiler Design Dr. Zili Shao Department of Computing The Hong Kong Polytechnic Univ.
Building a Modern Computer From First Principles
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 1: Boolean Logic slide 1www.nand2tetris.org Building a Modern.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 1: Boolean Logic slide 1www.idc.ac.il/tecs Boolean Logic Elements.
Course overview Introduction to Computer Yung-Yu Chuang with slides by Nisan & Schocken ( )
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 2: Boolean Arithmetic slide 1www.nand2tetris.org Building a Modern.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 8: Virtual Machine, Part II slide 1www.idc.ac.il/tecs Virtual Machine.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 8: Virtual Machine, Part II slide 1www.nand2tetris.org Building.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 1: Compiler II: Code Generation slide 1www.nand2tetris.org Building.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 11: Compiler II: Code Generation slide 1www.nand2tetris.org Building.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 7: Virutal Machine, Part I slide 1www.nand2tetris.org Building.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 3: Sequential Logic slide 1www.idc.ac.il/tecs Sequential Logic.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 3: Sequential Logic slide 1www.nand2tetris.org Building a Modern.
1.  10% Assignments/ class participation  10% Pop Quizzes  05% Attendance  25% Mid Term  50% Final Term 2.
Course overview Introduction to Computer Yung-Yu Chuang with slides by Nisan & Schocken ( )
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 10: Compiler I: Syntax Analysis slide 1www.nand2tetris.org Building.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 10: Compiler I: Syntax Analysis slide 1www.nand2tetris.org Building.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 9: High-Level Language slide 1www.nand2tetris.org Building a Modern.
The course. Description Computer systems programming using the C language – And possibly a little C++ Translation of C into assembly language Introduction.
Chapter 1 Introduction Major Data Structures in Compiler
Building a Modern Computer From First Principles
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 7: Virutal Machine, Part I slide 1www.nand2tetris.org Building.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 6: Assembler slide 1www.nand2tetris.org Building a Modern Computer.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 4: Machine Language slide 1www.nand2tetris.org Building a Modern.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 4: Machine Language slide 1www.nand2tetris.org Building a Modern.
Elements of Computing Systems, Nisan & Schocken, MIT Press, Chapter 10: Compiler I: Syntax Analysis slide 1www.nand2tetris.org Building.
Introduction: From Nand to Tetris
Virtual Machine Part I: Stack Arithmetic
Virtual Machine Part II: Program Control
Introduction to Computer Yung-Yu Chuang
Compiler II: Code Generation
Virtual Machine Emulator Tutorial
Compiler I: Sytnax Analysis
Presentation transcript:

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 11: Compiler II: Code Generation slide 1www.idc.ac.il/tecs Chapter 11: Compiler II: Code Generation Elements of Computing Systems, Nisan & Schocken, MIT Press, Usage and Copyright Notice: Copyright 2005 © Noam Nisan and Shimon Schocken This presentation contains lecture materials that accompany the textbook “The Elements of Computing Systems” by Noam Nisan & Shimon Schocken, MIT Press, The book web site, features 13 such presentations, one for each book chapter. Each presentation is designed to support about 3 hours of classroom or self-study instruction. You are welcome to use or edit this presentation for instructional and non-commercial purposes. If you use our materials, we will appreciate it if you will include in them a reference to the book’s web site. And, if you have any comments, you can reach us at

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 11: Compiler II: Code Generation slide 2www.idc.ac.il/tecs Course map Assembler Chapter 6 H.L. Language & Operating Sys. abstract interface Compiler Chapters VM Translator Chapters Computer Architecture Chapters Gate Logic Chapters Electrical Engineering Physics Virtual Machine abstract interface Software hierarchy Assembly Language abstract interface Hardware hierarchy Machine Language abstract interface Hardware Platform abstract interface Chips & Logic Gates abstract interface Human Thought Abstract design Chapters 9, 12

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 11: Compiler II: Code Generation slide 3www.idc.ac.il/tecs The big picture Syntax analysis: understanding the code Code generation: constructing semantics

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 11: Compiler II: Code Generation slide 4www.idc.ac.il/tecs Syntax analysis (review) Class Bar { method Fraction foo(int y) { var int temp; // a variable let temp = (xxx+12)*-63; Class Bar { method Fraction foo(int y) { var int temp; // a variable let temp = (xxx+12)*-63; var int temp ; let temp = ( xxx var int temp ; let temp = ( xxx Syntax analyzer The code generation challenge: Extend the syntax analyzer into a full-blown compiler Program = a series of operations that manipulate data The compiler should convert each “understood” (parsed) source operation and data item into corresponding operations and data items in the target language So we have to generate code for handling data handling operations.

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 11: Compiler II: Code Generation slide 5www.idc.ac.il/tecs Handling data When dealing with a variable, say x, we have to know: What is x’s data type? Primitive, or ADT (class name)? (Need to know in order to properly allocate to it RAM resources) What kind of variable is x? local, static, field, argument ? (Need to know in order to properly manage its life cycle).

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 11: Compiler II: Code Generation slide 6www.idc.ac.il/tecs Symbol table Classical implementation: A list of hash tables, each reflecting a single scope nested within the next one in the list The identifier lookup works from the current table upwards.

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 11: Compiler II: Code Generation slide 7www.idc.ac.il/tecs Life cycle Static: single copy must be kept alive throughout the program duration Field: different copies must be kept for each object Local: created on subroutine entry, killed on exit Argument: similar to local Good news: the VM handles all these details !!! Hurray!!!

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 11: Compiler II: Code Generation slide 8www.idc.ac.il/tecs class Complex {... void foo(int k) { int x, y; int[] bar; // declare an array... // Construct the array: bar = new int[10];... bar[k]=19; }... Main.foo(2); // Call the foo method... class Complex {... void foo(int k) { int x, y; int[] bar; // declare an array... // Construct the array: bar = new int[10];... bar[k]=19; }... Main.foo(2); // Call the foo method... Java code Bar = new int(n) Is typically handled by causing the compiler to generate code affecting: bar = Mem.alloc(n) // bar[k]=19, or *(bar+k)=19 push bar push k add // Use a pointer to access x[k] pop addr // addr points to bar[k] push 19 pop *addr // Set bar[k] to 19 // bar[k]=19, or *(bar+k)=19 push bar push k add // Use a pointer to access x[k] pop addr // addr points to bar[k] push 19 pop *addr // Set bar[k] to 19 VM Code (pseudo) // bar[k]=19, or *(bar+k)=19 push local 2 push argument 0 add // Use the that segment to access x[k] pop pointer 1 push constant 19 pop that 0 // bar[k]=19, or *(bar+k)=19 push local 2 push argument 0 add // Use the that segment to access x[k] pop pointer 1 push constant 19 pop that 0 VM Code (final) (bar array) bar x y 2 k (local 0) (local 1) (local 2) (argument 0) RAM state, just after executing bar[k]=19... Following compilation: Handling arrays

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 11: Compiler II: Code Generation slide 9www.idc.ac.il/tecs class Complex { // Properties (fields): int re; // Real part int im; // Imaginary part... /** Constructs a new Complex object. */ public Complex(int aRe, int aIm) { re = aRe; im = aIm; }... } // The following code can be in any class: public void bla() { Complex a, b, c;... a = new Complex(5,17); b = new Complex(12,192);... c = a; // Only the reference is copied... } class Complex { // Properties (fields): int re; // Real part int im; // Imaginary part... /** Constructs a new Complex object. */ public Complex(int aRe, int aIm) { re = aRe; im = aIm; }... } // The following code can be in any class: public void bla() { Complex a, b, c;... a = new Complex(5,17); b = new Complex(12,192);... c = a; // Only the reference is copied... } Java code Handling objects: memory allocation foo = new ClassName( … ) Is typically handled by causing the compiler to generate code affecting: foo = Mem.alloc(n) Following compilation:

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 11: Compiler II: Code Generation slide 10www.idc.ac.il/tecs Handling objects: operations class Complex { // Properties (fields): int re; // Real part int im; // Imaginary part... /** Constructs a new Complex object. */ public Complex(int aRe, int aIm) { re = aRe; im = aIm; }... // Multiplication: public void mult (int c) { re = re * c; im = im * c; }... } class Complex { // Properties (fields): int re; // Real part int im; // Imaginary part... /** Constructs a new Complex object. */ public Complex(int aRe, int aIm) { re = aRe; im = aIm; }... // Multiplication: public void mult (int c) { re = re * c; im = im * c; }... } Java code // im = im * c : *(this+1) = *(this+1) times (argument 0) // im = im * c : *(this+1) = *(this+1) times (argument 0) Translating im = im * c : Look up the symbol table Resulting semantics: Of course this should be written in the target language.

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 11: Compiler II: Code Generation slide 11www.idc.ac.il/tecs Handling objects: method calls General rule: each method call foo.bar(v1,v2,...) can be translated into push foo push v1 push v2... call bar class Complex { // Properties (fields): int re; // Real part int im; // Imaginary part... /** Constructs a new Complex object. */ public Complex(int aRe, int aIm) { re = aRe; im = aIm; }... } class Foo {... public void foo() { Complex x;... x = new Complex(1,2); x.mult(5);... } class Complex { // Properties (fields): int re; // Real part int im; // Imaginary part... /** Constructs a new Complex object. */ public Complex(int aRe, int aIm) { re = aRe; im = aIm; }... } class Foo {... public void foo() { Complex x;... x = new Complex(1,2); x.mult(5);... } Java code // x.mult(5): push x push 5 call mult // x.mult(5): push x push 5 call mult Translating x.mult(5): Can also be viewed as mult(x,5) Generated code:

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 11: Compiler II: Code Generation slide 12www.idc.ac.il/tecs Generating code for expressions x+g(2,y,-z)*5 push x push 2 push y push z neg call g push 5 call mult add push x push 2 push y push z neg call g push 5 call mult add Code generation Syntax analysis The codeWrite(exp) algorithm:

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 11: Compiler II: Code Generation slide 13www.idc.ac.il/tecs Handling control flow (e.g. IF, WHILE)

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 11: Compiler II: Code Generation slide 14www.idc.ac.il/tecs Program flow

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 11: Compiler II: Code Generation slide 15www.idc.ac.il/tecs Final example

Elements of Computing Systems, Nisan & Schocken, MIT Press, 2005, Chapter 11: Compiler II: Code Generation slide 16www.idc.ac.il/tecs Perspective “Hard” Jack simplifications: Primitive type system No inheritance No public class fields (e.g. must use r=c.getRadius() rather than r=c.radius ) “Soft” Jack simplifications: Limited control structures (no for, switch, …) Cumbersome handling of char types (cannot use let x= ‘ c ’ ) Optimization For example, c++ will be translated into push c, push 1, add, pop c. Parallel processing Many other examples of possible improvements …