CS 132 Compiler Construction

Similar documents
Compiler Construction

CS 352: Compilers: Principles and Practice

Compiler Construction 1. Introduction. Oscar Nierstrasz

Compiler Construction 1. Introduction. Oscar Nierstrasz

Fundamentals of Compilation

Compiling Techniques

CS415 Compilers Overview of the Course. These slides are based on slides copyrighted by Keith Cooper, Ken Kennedy & Linda Torczon at Rice University

PART ONE Fundamentals of Compilation

Compilers and Interpreters

Academic Formalities. CS Modern Compilers: Theory and Practise. Images of the day. What, When and Why of Compilers

CPSC 411: Introduction to Compiler Construction

The View from 35,000 Feet

High-level View of a Compiler

Academic Formalities. CS Language Translators. Compilers A Sangam. What, When and Why of Compilers

Compilation 2014 Warm-up project

Overview of a Compiler

Compiler Design (40-414)

Introduction to Compiler

Alternatives for semantic processing

CS415 Compilers Overview of the Course. These slides are based on slides copyrighted by Keith Cooper, Ken Kennedy & Linda Torczon at Rice University

Programming Language Processor Theory

CS Lecture 2. The Front End. Lecture 2 Lexical Analysis

Front End. Hwansoo Han

Overview of a Compiler

COMP 181 Compilers. Administrative. Last time. Prelude. Compilation strategy. Translation strategy. Lecture 2 Overview

Modern Compiler Implementation in ML

Overview of a Compiler

Part 5 Program Analysis Principles and Techniques

Topic 3: Syntax Analysis I

Introduction to Compilers

CS 4201 Compilers 2014/2015 Handout: Lab 1

Chapter 4: LR Parsing

Compilers. Lecture 2 Overview. (original slides by Sam

Undergraduate Compilers in a Day

CS 314 Principles of Programming Languages

COLLEGE OF ENGINEERING, NASHIK. LANGUAGE TRANSLATOR

Compilers and Code Optimization EDOARDO FUSELLA

A simple syntax-directed

CST-402(T): Language Processors

JavaCC. JavaCC File Structure. JavaCC is a Lexical Analyser Generator and a Parser Generator. The structure of a JavaCC file is as follows:

DEPARTMENT OF COMPUTER SCIENCE & ENGINEERING Subject Name: CS2352 Principles of Compiler Design Year/Sem : III/VI

CSE450 Translation of Programming Languages. Lecture 4: Syntax Analysis

About the Tutorial. Audience. Prerequisites. Copyright & Disclaimer. Compiler Design

CA Compiler Construction

Formal Languages and Compilers Lecture I: Introduction to Compilers

Compiling Regular Expressions COMP360

Topic 5: Syntax Analysis III

CS415 Compilers. Syntax Analysis. These slides are based on slides copyrighted by Keith Cooper, Ken Kennedy & Linda Torczon at Rice University

Compiler Construction LECTURE # 1

CSE 3302 Programming Languages Lecture 2: Syntax

Lexical Scanning COMP360

About the Authors... iii Introduction... xvii. Chapter 1: System Software... 1

CS606- compiler instruction Solved MCQS From Midterm Papers

A Simple Syntax-Directed Translator

Acknowledgement. CS Compiler Design. Intermediate representations. Intermediate representations. Semantic Analysis - IR Generation

Parsing II Top-down parsing. Comp 412

SYED AMMAL ENGINEERING COLLEGE (An ISO 9001:2008 Certified Institution) Dr. E.M. Abdullah Campus, Ramanathapuram

Abstract Syntax Trees

Compiler Design. Computer Science & Information Technology (CS) Rank under AIR 100

CS5363 Final Review. cs5363 1

Introduction to Parsing

CS 406/534 Compiler Construction Putting It All Together

Lexical Analysis. Introduction

6. Intermediate Representation

Intermediate Representations

CS415 Compilers. Lexical Analysis

Acknowledgement. CS Compiler Design. Semantic Processing. Alternatives for semantic processing. Intro to Semantic Analysis. V.

3. Parsing. Oscar Nierstrasz

IR Optimization. May 15th, Tuesday, May 14, 13

Introduction. Compilers and Interpreters

VIVA QUESTIONS WITH ANSWERS

Abstract Syntax. Mooly Sagiv. html://

Crafting a Compiler with C (II) Compiler V. S. Interpreter

9/5/17. The Design and Implementation of Programming Languages. Compilation. Interpretation. Compilation vs. Interpretation. Hybrid Implementation

Compiler Theory Introduction and Course Outline Sandro Spina Department of Computer Science

Goals for course What is a compiler and briefly how does it work? Review everything you should know from 330 and before

What do Compilers Produce?

Parsing III. CS434 Lecture 8 Spring 2005 Department of Computer Science University of Alabama Joel Jones

Formats of Translated Programs

The compilation process is driven by the syntactic structure of the program as discovered by the parser

EDAN65: Compilers, Lecture 04 Grammar transformations: Eliminating ambiguities, adapting to LL parsing. Görel Hedin Revised:

CS 314 Principles of Programming Languages. Lecture 3

Appendix A The DL Language

Outline. Lecture 17: Putting it all together. Example (input program) How to make the computer understand? Example (Output assembly code) Fall 2002

The analysis part breaks up the source program into constituent pieces and creates an intermediate representation of the source program.

COP 3402 Systems Software Syntax Analysis (Parser)

Compiler Code Generation COMP360

Context-Free Grammar. Concepts Introduced in Chapter 2. Parse Trees. Example Grammar and Derivation

Semantic Analysis. Lecture 9. February 7, 2018

LECTURE 3. Compiler Phases

6. Intermediate Representation!

Context-Free Grammars

CS 406/534 Compiler Construction Parsing Part I

SYLLABUS UNIT - I UNIT - II UNIT - III UNIT - IV CHAPTER - 1 : INTRODUCTION CHAPTER - 4 : SYNTAX AX-DIRECTED TRANSLATION TION CHAPTER - 7 : STORA

Interpreter. Scanner. Parser. Tree Walker. read. request token. send token. send AST I/O. Console

Defining Program Syntax. Chapter Two Modern Programming Languages, 2nd ed. 1

EDAN65: Compilers, Lecture 06 A LR parsing. Görel Hedin Revised:

CPSC 411, 2015W Term 2 Midterm Exam Date: February 25, 2016; Instructor: Ron Garcia

CPS 506 Comparative Programming Languages. Syntax Specification

Parsing. Roadmap. > Context-free grammars > Derivations and precedence > Top-down parsing > Left-recursion > Look-ahead > Table-driven parsing

Transcription:

CS 132 Compiler Construction 1. Introduction 2 2. Lexical analysis 31 3. LL parsing 58 4. LR parsing 110 5. JavaCC and JTB 127 6. Semantic analysis 150 7. Translation and simplification 165 8. Liveness analysis and register allocation 185 9. Activation Records 216 1

Chapter 1: Introduction 2

Things to do make sure you have a working SEAS account start brushing up on Java review Java development tools find http://www.cs.ucla.edu/ palsberg/courses/cs132/f03/index.html check out the discussion forum on the course webpage Copyright c 2000 by Antony L. Hosking. Permission to make digital or hard copies of part or all of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and full citation on the first page. To copy otherwise, to republish, to post on servers, or to redistribute to lists, requires prior specific permission and/or fee. Request permission to publish from hosking@cs.purdue.edu. 3

Compilers What is a compiler? a program that translates an executable program in one language into an executable program in another language we expect the program produced by the compiler to be better, in some way, than the original What is an interpreter? a program that reads an executable program and produces the results of running that program usually, this involves executing the source program in some fashion This course deals mainly with compilers Many of the same issues arise in interpreters 4

Motivation Why study compiler construction? Why build compilers? Why attend class? 5

Interest Compiler construction is a microcosm of computer science artificial intelligence algorithms theory systems architecture greedy algorithms learning algorithms graph algorithms union-find dynamic programming DFAs for scanning parser generators lattice theory for analysis allocation and naming locality synchronization pipeline management hierarchy management instruction set use Inside a compiler, all these things come together 6

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 Changes in compilers should prompt changes in architecture New languages and features 7

Intrinsic Merit Compiler construction is challenging and fun interesting problems primary responsibility for performance (blame) new architectures new challenges real results extremely complex interactions Compilers have an impact on how computers are used Compiler construction poses some of the most interesting problems in computing 8

Experience You have used several compilers What qualities are important in a compiler? 1. Correct 2. Output runs fast 3. Compiler runs fast 4. Compile time proportional to program size 5. Support for separate compilation 6. Good diagnostics for syntax errors 7. Works well with the debugger 8. Good diagnostics for flow anomalies 9. Cross language calls 10. Consistent, predictable optimization Each of these shapes your feelings about the correct contents of this course 9

Abstract view source compiler machine errors Implications: recognize legal (and illegal) programs generate correct manage storage of all variables and agreement on format for object (or assembly) Big step up from assembler higher level notations 10

Traditional two pass compiler source front end IR back end machine errors Implications: intermediate representation (IR) front end maps legal into IR back end maps IR onto target machine simplify retargeting allows multiple front ends multiple passes better 11

A fallacy FORTRAN front end C++ CLU Smalltalk front end front end front end back end back end back end target1 target2 target3 Can we build n m compilers with n m components? must en all the knowledge in each front end must represent all the features in one IR must handle all the features in each back end Limited success with low-level IRs 12

Front end source tokens scanner parser IR errors Responsibilities: recognize legal procedure report errors produce IR preliminary storage map shape the for the back end Much of front end construction can be automated 13

Front end source tokens scanner parser IR errors Scanner: maps characters into tokens the basic unit of syntax becomes id, id, id, character string value for a token is a lexeme typical tokens: number, id, eliminates white space (tabs, blanks, comments) a key issue is speed use specialized recognizer (as opposed to,,,,, ) 14

Front end source tokens scanner parser IR errors 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 15

N Front end Context-free syntax is specified with a grammar sheep noise ::= sheep noise This grammar defines the set of noises that a sheep makes under normal circumstances The format is called Backus-Naur form (BNF) Formally, a grammar G S 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 or rewrite rules (P : N N T ) 16

Front end Context free syntax can be put to better use 1 2 3 4 5 6 7 goal expr term op ::= ::= ::= ::= expr expr term op term This grammar defines simple expressions with addition and subtraction over the tokens and S = goal T =,,, N = goal, expr, term, op P = 1, 2, 3, 4, 5, 6, 7 17

Front end Given a grammar, valid sentences can be derived by repeated substitution. Prod n. 1 2 5 7 2 4 6 3 5 Result goal expr expr expr expr expr expr expr term op op op op term term To recognize a valid sentence in some CFG, we reverse this process and build up a parse 18

Front end A parse can be represented by a tree called a parse or syntax tree goal expr expr op term expr op term - <id: y> term + <num:2> <id:x> Obviously, this contains a lot of unnecessary information 19

Front end So, compilers often use an abstract syntax tree - + <id: y> <id:x> <num: 2> This is much more concise Abstract syntax trees (ASTs) are often used as an IR between front end and back end 20

Back end IR instruction selection register allocation machine errors Responsibilities translate IR into target machine 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 21

Back end IR instruction selection register allocation machine errors Instruction selection: produce compact, fast use available addressing modes pattern matching problem ad hoc techniques tree pattern matching string pattern matching dynamic programming 22

Back end IR instruction selection register allocation machine errors 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 23

Traditional three pass compiler source front IR middle IR back end end end machine errors Code Improvement analyzes and changes IR goal is to reduce runtime must preserve values 24

Optimizer (middle end) IR opt1 IR... IR opt n IR errors Modern optimizers are usually built as a set of passes Typical passes constant propagation and folding motion reduction of operator strength common subexpression elimination redundant store elimination dead elimination 25

Compiler example Lex Parsing Semantic Canon- Parse Actions Analysis Translate calize Environments Pass 1 Pass 3 Pass 4 Tables Frame Layout Instruction Selection Source Program Tokens Reductions Abstract Syntax Translate IR Trees IR Trees Assem Pass 2 Frame Machine Language Control Flow Analysis Data Flow Analysis Register Allocation Code Emission Assembler Assem Flow Graph Pass 10 Interference Graph Register Assignment Assembly Language Relocatable Object Code Pass 5 Pass 6 Pass 7 Pass 8 Pass 9 Linker 26

Compiler phases Lex Parse Parsing Actions Semantic Analysis Frame Layout Translate Canonicalize Instruction Selection Control Flow Analysis Data Flow Analysis Register Allocation Code Emission Break source file into individual words, or tokens Analyse the phrase structure of program Build a piece of abstract syntax tree for each phrase Determine what each phrase means, relate uses of variables to their definitions, check types of expressions, request translation of each phrase Place variables, function parameters, etc., into activation records (stack frames) in a machine-dependent way Produce intermediate representation trees (IR trees), a notation that is not tied to any particular source language or target machine Hoist side effects out of expressions, and clean up conditional branches, for convenience of later phases Group IR-tree nodes into clumps that correspond to actions of targetmachine instructions Analyse sequence of instructions into control flow graph showing all possible flows of control program might follow when it runs Gather information about flow of data through variables of program; e.g., liveness analysis calculates places where each variable holds a stillneeded (live) value Choose registers for variables and temporary values; variables not simultaneously live can share same register Replace temporary names in each machine instruction with registers 27

A straight-line programming language A straight-line programming language (no loops or conditionals): e.g., Stm Stm Stm Exp Exp Exp Exp ExpList ExpList Binop Binop Binop Binop : 5 3; : ExpList PairExpList Stm ; Stm CompoundStm : Exp AssignStm ExpList PrintStm IdExp NumExp Exp Binop Exp OpExp Stm Exp EseqExp Exp Exp LastExpList Plus Minus 1 10 ; Times Div prints: 28

Tree representation : 5 3; : 1 10 ; CompoundStm AssignStm CompoundStm a OpExp AssignStm PrintStm NumExp Plus NumExp b EseqExp LastExpList 5 3 IdExp PrintStm OpExp b PairExpList NumExp Times IdExp IdExp LastExpList 10 a a OpExp IdExp Minus NumExp a 1 This is a convenient internal representation for a compiler to use. 29

& &! (, +!!! 1 $ 1 $ $ # $ $ $ * # $ $ *!! $ $ $ * $ $ ' * ) ( 0 /. - # ' * ( * * * * * 30 Java classes for trees!! # # % %