Intermediate Representations Hal Perkins Autumn 2005

Slides:



Advertisements
Similar presentations
1 Lecture 10 Intermediate Representations. 2 front end »produces an intermediate representation (IR) for the program. optimizer »transforms the code in.
Advertisements

Software & Services Group, Developer Products Division Copyright© 2010, Intel Corporation. All rights reserved. *Other brands and names are the property.
11/21/2002© 2002 Hal Perkins & UW CSEO-1 CSE 582 – Compilers Instruction Scheduling Hal Perkins Autumn 2002.
Intermediate Representation I High-Level to Low-Level IR Translation EECS 483 – Lecture 17 University of Michigan Monday, November 6, 2006.
CPSC Compiler Tutorial 9 Review of Compiler.
Intermediate Representations Copyright 2003, Keith D. Cooper, Ken Kennedy & Linda Torczon, all rights reserved. Students enrolled in Comp 412 at Rice University.
9/27/2006Prof. Hilfinger, Lecture 141 Syntax-Directed Translation Lecture 14 (adapted from slides by R. Bodik)
10/22/2002© 2002 Hal Perkins & UW CSEG-1 CSE 582 – Compilers Intermediate Representations Hal Perkins Autumn 2002.
1 Semantic Processing. 2 Contents Introduction Introduction A Simple Compiler A Simple Compiler Scanning – Theory and Practice Scanning – Theory and Practice.
1 Intermediate representation Goals: –encode knowledge about the program –facilitate analysis –facilitate retargeting –facilitate optimization scanning.
Intermediate Code CS 471 October 29, CS 471 – Fall Intermediate Code Generation Source code Lexical Analysis Syntactic Analysis Semantic.
1.3 Executing Programs. How is Computer Code Transformed into an Executable? Interpreters Compilers Hybrid systems.
8/19/2015© Hal Perkins & UW CSEC-1 CSE P 501 – Compilers Parsing & Context-Free Grammars Hal Perkins Winter 2008.
CSE P501 – Compiler Construction Parser Semantic Actions Intermediate Representations AST Linear Next Spring 2014 Jim Hogg - UW - CSE - P501G-1.
COP4020 Programming Languages
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.
10/1/2015© Hal Perkins & UW CSEG-1 CSE P 501 – Compilers Intermediate Representations Hal Perkins Autumn 2009.
Compiler course 1. Introduction. Outline Scope of the course Disciplines involved in it Abstract view for a compiler Front-end and back-end tasks Modules.
Introduction to Compilers. Related Area Programming languages Machine architecture Language theory Algorithms Data structures Operating systems Software.
1 Compiler Design (40-414)  Main Text Book: Compilers: Principles, Techniques & Tools, 2 nd ed., Aho, Lam, Sethi, and Ullman, 2007  Evaluation:  Midterm.
Chapter# 6 Code generation.  The final phase in our compiler model is the code generator.  It takes as input the intermediate representation(IR) produced.
Compiler Design Introduction 1. 2 Course Outline Introduction to Compiling Lexical Analysis Syntax Analysis –Context Free Grammars –Top-Down Parsing –Bottom-Up.
Intermediate Code Representations
Compiler Introduction 1 Kavita Patel. Outlines 2  1.1 What Do Compilers Do?  1.2 The Structure of a Compiler  1.3 Compilation Process  1.4 Phases.
12/18/2015© Hal Perkins & UW CSEG-1 CSE P 501 – Compilers Intermediate Representations Hal Perkins Winter 2008.
1 Compiler & its Phases Krishan Kumar Asstt. Prof. (CSE) BPRCE, Gohana.
1 Asstt. Prof Navjot Kaur Computer Dept PRESENTED BY.
Presented by : A best website designer company. Chapter 1 Introduction Prof Chung. 1.
1 Compiler Construction (CS-636) Muhammad Bilal Bashir UIIT, Rawalpindi.
INTERMEDIATE LANGUAGES SUNG-DONG KIM DEPT. OF COMPUTER ENGINEERING, HANSUNG UNIVERSITY.
Compiler Chapter 9. Intermediate Languages Sung-Dong Kim Dept. of Computer Engineering, Hansung University.
CS 404 Introduction to Compiler Design
Advanced Computer Systems
Intro to compilers Based on end of Ch. 1 and start of Ch. 2 of textbook, plus a few additional references.
Compiler Design (40-414) Main Text Book:
Chapter 1 Introduction.
Introduction to Compiler Construction
CS 3304 Comparative Languages
Parsing & Context-Free Grammars
Introduction to Parsing (adapted from CS 164 at Berkeley)
Compiler Construction (CS-636)
SOFTWARE DESIGN AND ARCHITECTURE
Compiler Chapter 9. Intermediate Languages
Chapter 1 Introduction.
-by Nisarg Vasavada (Compiled*)
课程名 编译原理 Compiling Techniques
Compiler Lecture 1 CS510.
Compiler Construction
Parsing & Context-Free Grammars Hal Perkins Autumn 2011
Lecture 2: General Structure of a Compiler
(Slides copied liberally from Ruth Anderson, Hal Perkins and others)
Syntax-Directed Translation
Intermediate Representations Hal Perkins Autumn 2011
Introduction CI612 Compiler Design CI612 Compiler Design.
Intermediate Representations
Wrapping Up Copyright 2003, Keith D. Cooper, Ken Kennedy & Linda Torczon, all rights reserved. Students enrolled in Comp 412 at Rice University have explicit.
Compilers B V Sai Aravind (11CS10008).
Intermediate Representations
LL and Recursive-Descent Parsing Hal Perkins Autumn 2011
Exam Topics Hal Perkins Autumn 2009
Parsing & Context-Free Grammars Hal Perkins Summer 2004
LL and Recursive-Descent Parsing Hal Perkins Autumn 2009
Chapter 1 Introduction.
Chapter 10: Compilers and Language Translation
Compiler Construction
LL and Recursive-Descent Parsing Hal Perkins Winter 2008
Lec00-outline May 18, 2019 Compiler Design CS416 Compiler Design.
Parsing & Context-Free Grammars Hal Perkins Autumn 2005
Intermediate Code Generating machine-independent intermediate form.
Exam Topics Hal Perkins Winter 2008
Presentation transcript:

Intermediate Representations Hal Perkins Autumn 2005 CSE P 501 – Compilers Intermediate Representations Hal Perkins Autumn 2005 2/16/2019 © 2002-05 Hal Perkins & UW CSE

Agenda Parser Semantic Actions Intermediate Representations Abstract Syntax Trees (ASTs) Linear Representations & more 2/16/2019 © 2002-05 Hal Perkins & UW CSE

Compiler Structure (review) IR Parser Middle (optimization) tokens IR (maybe different) Scanner Code Gen characters Assembly or binary code Source Target 2/16/2019 © 2002-05 Hal Perkins & UW CSE

What’s a Parser to Do? Idea: at significant points in the parse perform a semantic action Typically when a production is reduced (LR) or at a convenient point in the parse (LL) Typical semantic actions Build (and return) a representation of the parsed chunk of the input (compiler) Perform some sort of computation and return result (interpreter) 2/16/2019 © 2002-05 Hal Perkins & UW CSE

Intermediate Representations In most compilers, the parser builds an intermediate representation of the program Rest of the compiler transforms the IR for efficiency and eventually translates it to final code Often will transform initial IR to one or more different IRs along the way 2/16/2019 © 2002-05 Hal Perkins & UW CSE

IR Design Decisions affect speed and efficiency of the rest of the compiler Desirable properties Easy to generate Easy to manipulate Expressive Appropriate level of abstraction Different tradeoffs depending on compiler goals Different tradeoffs in different parts of the same compiler Au02: taken from Cooper’s slides 2/16/2019 © 2002-05 Hal Perkins & UW CSE

Types of IRs Three major categories Structural Linear Hybrid Some basic examples now; more when we get to later phases of the compiler Au02: based on Cooper’s slides 2/16/2019 © 2002-05 Hal Perkins & UW CSE

Levels of Abstraction Key design decision: how much detail to expose Affects possibility and profitability of various optimizations Structural IRs are typically fairly high-level Linear IRs are typically low-level But these generalizations aren’t always true 2/16/2019 © 2002-05 Hal Perkins & UW CSE

Example: Array Reference A[i,j] loadI 1 => r1 sub rj,r1 => r2 loadI 10 => r3 mult r2,r3 => r4 sub ri,r1 => r5 add r4,r5 => r6 loadI @A => r7 add r7,r6 => r8 load r8 => r9 subscript A i j Au02: still borrowing from Cooper’s slides 2/16/2019 © 2002-05 Hal Perkins & UW CSE

Structural IRs Typically reflect source (or other higher-level) language structure Tend to be large Examples: syntax trees, DAGs Particularly useful for source-to-source transformations Au02: based on Cooper’s slides 2/16/2019 © 2002-05 Hal Perkins & UW CSE

Concrete Syntax Trees The full grammar is needed to guide the parser, but contains many extraneous details Chain productions Rules that control precedence and associativity Typically the full syntax tree does not need to be used explicitly 2/16/2019 © 2002-05 Hal Perkins & UW CSE

Syntax Tree Example Concrete syntax for x=2*(n+m); 2/16/2019 © 2002-05 Hal Perkins & UW CSE

Abstract Syntax Trees Want only essential structural information Omit extraneous junk Can be represented explicitly as a tree or in a linear form Example: LISP/Scheme S-expressions are essentially ASTs 2/16/2019 © 2002-05 Hal Perkins & UW CSE

AST Example AST for x=2*(n+m); 2/16/2019 © 2002-05 Hal Perkins & UW CSE

Linear IRs Pseudo-code for an abstract machine Level of abstraction varies Simple, compact data structures Examples: stack machine code, three-address code 2/16/2019 © 2002-05 Hal Perkins & UW CSE

Stack Machine Code Originally used for stack-based computers (famous example: B5000) Now used for Java (.class files), C# (MSIL) Advantages Compact; mostly 0-address opcodes Easy to generate Simple to translate to naïve machine code But need to do better in production compilers 2/16/2019 © 2002-05 Hal Perkins & UW CSE

Stack Code Example Hypothetical code for x=2*(n+m); pushaddr x pushconst 2 pushval n pushval m add mult store 2/16/2019 © 2002-05 Hal Perkins & UW CSE

Three-Address code Many different representations General form: x <- y (op) z One operator Maximum of three names Example: x=2*(n+m); becomes t1 <- n + m t2 <- 2 * t1 x <- t2 2/16/2019 © 2002-05 Hal Perkins & UW CSE

Three Address Code (cont) Advantages Resembles code for actual machines Explicitly names intermediate results Compact Often easy to rearrange Various representations Quadruples, triples, SSA Much more later… 2/16/2019 © 2002-05 Hal Perkins & UW CSE

Hybrid IRs Combination of structural and linear Level of abstraction varies Example: control-flow graph 2/16/2019 © 2002-05 Hal Perkins & UW CSE

What to Use? Common choice: all(!) AST or other structural representation built by parser and used in early stages of the compiler Closer to source code Good for semantic analysis Facilitates some higher-level optimizations Flatten to linear IR for later stages of compiler Closer to machine code Exposes machine-related optimizations Hybrid forms in optimization phases 2/16/2019 © 2002-05 Hal Perkins & UW CSE

Coming Attractions Representing ASTs Working with ASTs Where do the algorithms go? Is it really object-oriented? Visitor pattern Then: semantic analysis, type checking, and symbol tables 2/16/2019 © 2002-05 Hal Perkins & UW CSE