1 CIS 461 Compiler Design and Construction Fall 2014 Instructor: Hugh McGuire slides derived from Tevfik Bultan, Keith Cooper, and Linda Torczon Lecture-Module.

Slides:



Advertisements
Similar presentations
8. Code Generation. Generate executable code for a target machine that is a faithful representation of the semantics of the source code Depends not only.
Advertisements

Compiler Construction by Muhammad Bilal Zafar (AP)
Lecture 01 - Introduction Eran Yahav 1. 2 Who? Eran Yahav Taub 734 Tel: Monday 13:30-14:30
Reference Book: Modern Compiler Design by Grune, Bal, Jacobs and Langendoen Wiley 2000.
Compiler Construction
Overview of Compiler Design CIS 631, CSE 691, CIS400, CSE 400 Compiler Design Dr. Nancy McCracken January 15, 2008.
CMP 131 Introduction to Computer Programming Violetta Cavalli-Sforza Week 1, Lab.
CS 104 Introduction to Computer Science and Graphics Problems Software and Programming Language (2) Programming Languages 09/26/2008 Yang Song (Prepared.
Introduction & Overview CS4533 from Cooper & Torczon.
Overview of the Course. Critical Facts Welcome to CISC 672 — Advanced Compiler Construction Instructor: Dr. John Cavazos Office.
ICS611 Introduction to Compilers Set 1. What is a Compiler? A compiler is software (a program) that translates a high-level programming language to machine.
High level & Low level language High level programming languages are more structured, are closer to spoken language and are more intuitive than low level.
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.
Overview of the Course Copyright 2003, Keith D. Cooper, Ken Kennedy & Linda Torczon, all rights reserved. Students enrolled in Comp 412 at Rice University.
Overview of the Course Copyright 2003, Keith D. Cooper, Ken Kennedy & Linda Torczon, all rights reserved. Students enrolled in Comp 412 at Rice University.
Parser-Driven Games Tool programming © Allan C. Milne Abertay University v
Chapter 10: Compilers and Language Translation Invitation to Computer Science, Java Version, Third Edition.
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.
CS 326 Programming Languages, Concepts and Implementation Instructor: Mircea Nicolescu Lecture 2.
1 COMP 3438 – Part II-Lecture 1: Overview of Compiler Design Dr. Zili Shao Department of Computing The Hong Kong Polytechnic Univ.
1 CMPSC 160 Translation of Programming Languages Fall 2002 Instructor: Hugh McGuire slides derived from Tevfik Bultan, Keith Cooper, and Linda Torczon.
Unit-1 Introduction Prepared by: Prof. Harish I Rathod
May 31, May 31, 2016May 31, 2016May 31, 2016 Azusa, CA Sheldon X. Liang Ph. D. Computer Science at Azusa Pacific University Azusa Pacific University,
1.  10% Assignments/ class participation  10% Pop Quizzes  05% Attendance  25% Mid Term  50% Final Term 2.
COP 4620 / 5625 Programming Language Translation / Compiler Writing Fall 2003 Lecture 1, 08/28/03 Prof. Roy Levow.
1 EECS 6083 Compiler Theory Based on slides from text web site: Copyright 2003, Keith D. Cooper, Ken Kennedy & Linda Torczon, all rights reserved.
Chapter 1 Introduction. Chapter 1 - Introduction 2 The Goal of Chapter 1 Introduce different forms of language translators Give a high level overview.
1. 2 Preface In the time since the 1986 edition of this book, the world of compiler design has changed significantly 3.
CS 460/660 Compiler Construction. Class 01 2 Why Study Compilers? Compilers are important – –Responsible for many aspects of system performance Compilers.
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 1 Introduction Study Goals: Master: the phases of a compiler Understand: what is a compiler Know: interpreter,compiler structure.
Introduction to Compiling
1 Compiler Construction (CS-636) Muhammad Bilal Bashir UIIT, Rawalpindi.
Compiler Design Introduction 1. 2 Course Outline Introduction to Compiling Lexical Analysis Syntax Analysis –Context Free Grammars –Top-Down Parsing –Bottom-Up.
Compiler Construction (CS-636)
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.
Chapter 1: Introduction 1 Compiler Designs and Constructions Chapter 1: Introduction Objectives: Course Objectives Introduction Dr. Mohsen Chitsaz.
What is a compiler? –A program that reads a program written in one language (source language) and translates it into an equivalent program in another language.
Compiler Construction CPCS302 Dr. Manal Abdulaziz.
1 Asstt. Prof Navjot Kaur Computer Dept PRESENTED BY.
ICS312 Introduction to Compilers Set 23. What is a Compiler? A compiler is software (a program) that translates a high-level programming language to machine.
Overview of Compilation Prepared by Manuel E. Bermúdez, Ph.D. Associate Professor University of Florida Programming Language Principles Lecture 2.
Presented by : A best website designer company. Chapter 1 Introduction Prof Chung. 1.
Introduction to Computer Programming Concepts M. Uyguroğlu R. Uyguroğlu.
Prologue Sung-Dong Kim, Dept. of Computer Engineering, Hansung University.
1 Chapter10: Code generator. 2 Code Generator Source Program Target Program Semantic Analyzer Intermediate Code Generator Code Optimizer Code Generator.
Chapter 1 Introduction Samuel College of Computer Science & Technology Harbin Engineering University.
CHAPTER 1 INTRODUCTION TO COMPILER SUNG-DONG KIM, DEPT. OF COMPUTER ENGINEERING, HANSUNG UNIVERSITY.
COMP Compilers Lecture 1: Introduction
Advanced Computer Systems
Compiler Design (40-414) Main Text Book:
Chapter 1 Introduction.
Introduction to Compiler Construction
CSCI-235 Micro-Computer Applications
Microprocessor and Assembly Language
Chapter 1 Introduction.
CISC 7120X Programming Languages and Compilers
Compiler Lecture 1 CS510.
Overview of the Course Copyright 2003, Keith D. Cooper, Ken Kennedy & Linda Torczon, all rights reserved. Students enrolled in Comp 412 at Rice University.
Assembler, Compiler, Interpreter
Lecture 2: General Structure of a Compiler
COMP Compilers Lecture 1: Introduction
CSE401 Introduction to Compiler Construction
CMP 131 Introduction to Computer Programming
Assembler, Compiler, Interpreter
CISC 7120X Programming Languages and Compilers
Compiler Construction
Programming language translators
Presentation transcript:

1 CIS 461 Compiler Design and Construction Fall 2014 Instructor: Hugh McGuire slides derived from Tevfik Bultan, Keith Cooper, and Linda Torczon Lecture-Module 2a Introduction to Compilers: An Overview

2 Topics Overview of compilers Lexical analysis (Scanning) Syntactic analysis (Parsing) Context-sensitive analysis Type checking Runtime environments Symbol tables Intermediate representations Intermediate code generation Code optimization

3 Compilers What is a compiler? –A program that translates a program in one language (source language) into an equivalent program in another language (target language), and reports errors in the source program A compiler typically lowers the level of abstraction of the program C  assembly code for EOS machine Java  Java bytecode What is an interpreter? –A program that reads an executable program and produces the results of executing that program C is typically compiled Scheme is typically interpreted Java is compiled to bytecodes, which are then interpreted

4 Why build compilers? Compilers provide an essential interface between applications and architectures High level programming languages: –Increase programmer productivity –Better maintenance –Portable Low level machine details: –Instruction selection –Addressing modes –Pipelines –Registers and cache Compilers efficiently bridge the gap and shield the application developers from low level machine details

5 Why study compilers? Compilers embody a wide range of theoretical techniques and their application to practice –DFAs, PDAs, formal languages, formal grammars, fixpoints algorithms, lattice theory Compiler construction teaches programming and software engineering skills Compiler construction involves a variety of areas –theory, algorithms, systems, architecture The techniques used in various parts of compiler construction are useful in a wide variety of applications –Many practical applications have embedded languages, commands, macros, etc. Is compiler construction a solved problem? –No! New developments in programming languages (Java) and machine architectures (multicore machines) present new challenges

6 Desirable Properties of Compilers Compiler must generate a correct executable –The input program and the output program must be equivalent, the compiler should preserve the meaning of the input program Output program should run fast – For optimizing compilers we expect the output program to be more efficient than the input program Compiler itself should be fast Compiler should provide good diagnostics for programming errors Compiler should support separate compilation Compiler should work well with debuggers Optimizations should be consistent and predictable Compile time should be proportional to code size

7 What are the issues in compiler construction? Source code –written in a high level programming language //simple example while (sum < total) { sum = sum + x*10; } Target code –Assembly language (chapter 9) which in turn is translated to machine code L1:MOV total,R0 CMP sum,R0 CJ< L2 GOTOL3 L2:MOV #10,R0 MUL x,R0 ADD sum,R0 MOVR0,sum GOTO L1 L3:first instruction following the while statement

8 What is the input? Input to the compiler is not //simple example while (sum < total) { sum = sum + x*10; } Input to the compiler is //simple\bexample\nwhile\b(sum\b<\btotal)\b{\n\tsum\b= \bsum\b+\bx*10;\n}\n How does the compiler recognize the keywords, identifiers, the structure etc.?

9 First step: Lexical analysis (Scanning) The compiler scans the input file and produces a stream of tokens WHILE,LPAREN,,LT,,RPAREN,LBRACE,,EQ,,PLUS,,TIMES,, SEMICOL,RBRACE Each token has a corresponding lexeme, the character string that corresponds to the token –For example “ while ” is the lexeme for token WHILE –“ sum ”, “ x ”, “ total ” are lexemes for token ID

10 Lexical Analysis (Scanning) Compiler uses a set of patterns to specify valid tokens –tokens: LPAREN, ID, NUM, WHILE, etc. Each pattern is specified as a regular expression –LPAREN should match: ( –WHILE should match: while –ID should match: [a-zA-Z][0-9a-zA-Z]* It uses finite automata to recognize these patterns a-zA-Z 0-9a-zA-Z ID automaton

11 Lexical analysis (Scanning) During the scan the lexical analyzer gets rid of the white space ( \b,\t,\n, etc.) and comments Important additional task: Error messages! –var&1  Error! Not a token! –whle  Error? It matches the identifier token. Natural language analogy: Tokens correspond to words and punctuation symbols in a natural language

12 Next Step: Syntax Analysis (Parsing) How does the compiler recognize the structure of the program? –Loops, blocks, procedures, nesting? Parse the stream of tokens  parse tree Stmt WhileStmt WHILE LPAREN RPAREN Expr RelExpr LT Stmt Block LBRACE Stmt RBRACE AssignStmt EQ Expr SEMICOL ArithExpr Expr PLUS Expr ArithExpr Expr TIMES

13 Syntax Analysis (Parsing) The syntax a programming language is defined by a set of recursive rules. These sets of rules are called context free grammars. Stmt  WhileStmt | Block |... WhileStmt  WHILE LPAREN Expr RPAREN Stmt Expr  RelExpr | ArithExpr |... RelExpr ... Compilers apply these rules to produce the parse tree Again, important additional task: Error messages! –Missing semicolumn, missing parenthesis, etc. Natural language analogy: It is similar to parsing English text. Paragraphs, sentences, nounphrases, verbphrases, verbs, prepositions, articles, nouns, etc.

14 Intermediate Representations The parse tree representation has too many details –LPAREN, LBRACE, SEMICOL, etc. Once the compiler understands the structure of the input program it does not need these details (they were used to prevent ambiguities) Compilers generate a more abstract representation after constructing the parse tree which does not include the details of the derivation Abstract syntax trees (AST): Nodes represent operators, children represent operands while < assign + *

15 Next Step: Semantic (Context-Sensitive) Analysis Are variables declared before they are used? –We can find out if “ whle ” is declared by looking at the symbol table Do variable types match? sum = sum + x*10; + * may become + * int2float sum x float int Symbol Table sum can be a floating point number, x can be an integer

16 Next Step: Code Generation Abstract syntax trees are a high-level intermediate representation used in earlier phases of the compilation There are lower level (i.e., closer to the machine code) intermediate representations –Three-address code (Chapter 8): every instruction has at most three operands –Jasmin: Assembly language for JVM (Java Virtual Machine) an abstract stack machine (used in the project) Intermediate-code generation for these lower-level representations and machine-code generation are similar

17 Code Generation: Instruction Selection Source code a = b + c; d = a + e; Target code MOV b,R0 ADD c,R0 MOV R0,a MOV a,R0 ADD e,R0 MOV R0,d If we generate code for each statement separately we will not generate efficient code code for first statement code for second statement This instruction is redundant

18 Code Generation: Register Allocation There are a limited number of registers available on real machines Registers are valuable resources, the compiler has to use them efficiently t =a-b; u=a-c; v=t+u; d=v+u; d = (a-b)+(a-c)+(a-c);MOV a,R0 SUB b,R0 MOV a,R1 SUB c,R1 ADD R1,R0 MOV R0,d source codethree-address codeassembly code

19 Improving the Code: Code Optimization Compilers can improve the quality of code by static analysis –Data flow analysis, dependence analysis, code transformations, dead code elimination, etc. temp = x*10; while (sum < total) { sum = sum + temp; } while (sum < total) { sum = sum + x*10; } We do not need to recompute x*10 in each iteration of the loop transformation to more efficient code

20 Things to do Get the textbook Skim chapters 1 and 2

21 Summary of this Lecture Module Overview of compilation / topics of course Asst. #0