Compiler Construction1 A Compulsory Module for Students in Computer Science Department Faculty of IT / Al – Al Bayt University First Semester 2009/2010.

Slides:



Advertisements
Similar presentations
CS 31003: Compilers Introduction to Phases of Compiler.
Advertisements

The Assembly Language Level
Compiler Construction by Muhammad Bilal Zafar (AP)
1 Pass Compiler 1. 1.Introduction 1.1 Types of compilers 2.Stages of 1 Pass Compiler 2.1 Lexical analysis 2.2. syntactical analyzer 2.3. Code generation.
Semantic analysis Parsing only verifies that the program consists of tokens arranged in a syntactically-valid combination, we now move on to semantic analysis,
CPSC Compiler Tutorial 9 Review of Compiler.
Yu-Chen Kuo1 Chapter 1 Introduction to Compiling.
Reference Book: Modern Compiler Design by Grune, Bal, Jacobs and Langendoen Wiley 2000.
1.3 Executing Programs. How is Computer Code Transformed into an Executable? Interpreters Compilers Hybrid systems.
CPSC 388 – Compiler Design and Construction Lecture: MWF 11:00am-12:20pm, Room 106 Colton.
2.2 A Simple Syntax-Directed Translator Syntax-Directed Translation 2.4 Parsing 2.5 A Translator for Simple Expressions 2.6 Lexical Analysis.
Course Revision Contents  Compilers  Compilers Vs Interpreters  Structure of Compiler  Compilation Phases  Compiler Construction Tools  A Simple.
COP4020 Programming Languages
Chapter 1. Introduction.
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.
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.
CST320 - Lec 11 Why study compilers? n n Ties lots of things you know together: –Theory (finite automata, grammars) –Data structures –Modularization –Utilization.
1 COMP 3438 – Part II-Lecture 1: Overview of Compiler Design Dr. Zili Shao Department of Computing The Hong Kong Polytechnic Univ.
Unit-1 Introduction Prepared by: Prof. Harish I Rathod
1.  10% Assignments/ class participation  10% Pop Quizzes  05% Attendance  25% Mid Term  50% Final Term 2.
1 Chapter 1 Introduction. 2 Outlines 1.1 Overview and History 1.2 What Do Compilers Do? 1.3 The Structure of a Compiler 1.4 The Syntax and Semantics of.
Compiler design Lecture 1: Compiler Overview Sulaimany University 2 Oct
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.
Topic #1: Introduction EE 456 – Compiling Techniques Prof. Carl Sable Fall 2003.
Overview of Previous Lesson(s) Over View  A program must be translated into a form in which it can be executed by a computer.  The software systems.
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.
Chapter 1 Introduction Major Data Structures in Compiler
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 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.
Compiler Construction By: Muhammad Nadeem Edited By: M. Bilal Qureshi.
The Model of Compilation Natawut Nupairoj, Ph.D. Department of Computer Engineering Chulalongkorn University.
1 Compiler & its Phases Krishan Kumar Asstt. Prof. (CSE) BPRCE, Gohana.
1 A Simple Syntax-Directed Translator CS308 Compiler Theory.
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.
Programming Language Concepts (CIS 635) Elsa L Gunter 4303 GITC NJIT,
©SoftMoore ConsultingSlide 1 Structure of Compilers.
1 Asstt. Prof Navjot Kaur Computer Dept PRESENTED BY.
COP4020 Programming Languages Introduction Prof. Robert van Engelen (modified by Prof. Em. Chris Lacher)
Presented by : A best website designer company. Chapter 1 Introduction Prof Chung. 1.
1 Compiler Construction (CS-636) Muhammad Bilal Bashir UIIT, Rawalpindi.
Objective of the course Understanding the fundamentals of the compilation technique Assist you in writing you own compiler (or any part of compiler)
Compilers Design Chapter1 : Introduction, Structure of a Compiler
Lecture 12 Intermediate Code Generation Translating Expressions
Chapter 1 Introduction Samuel College of Computer Science & Technology Harbin Engineering University.
Chapter 1. Introduction.
Compilers Principles, Techniques, & Tools Taught by Jing Zhang
Lecture 9 Symbol Table and Attributed Grammars
Advanced Computer Systems
Compiler Design (40-414) Main Text Book:
Chapter 1 Introduction.
Introduction to Compiler Construction
A Simple Syntax-Directed Translator
Constructing Precedence Table
Compiler Construction (CS-636)
Chapter 1 Introduction.
-by Nisarg Vasavada (Compiled*)
课程名 编译原理 Compiling Techniques
Chapter 1: Introduction to Compiling (Cont.)
Compiler Lecture 1 CS510.
Compiler Construction
Course supervisor: Lubna Siddiqui
Introduction CI612 Compiler Design CI612 Compiler Design.
Compiler design.
Compilers Principles, Techniques, & Tools Taught by Jing Zhang
Presentation transcript:

Compiler Construction1 A Compulsory Module for Students in Computer Science Department Faculty of IT / Al – Al Bayt University First Semester 2009/2010

Compiler Construction2 Lecturer: Dr. Venus W. Samawi

Compiler Construction3 Recommended Reading The text book is: Alfred V. Aho, Ravi Sethi and Jeffry D. Ulman, Compilers Principles, Techniques and Tools, Addison Wesley, 2007, Supporting References: 1- W. Appel, Modern Compiler Implementation in Java, Prentice Hall, D. Watt, Brown, Programming Language Processors in Java: Compilers and Interpreters, Prentice hall, 2000

Compiler Construction4 Language Processing System

Compiler Construction5 Language Processors. A translator inputs and then converts a source program into an object or target program. Source program is written in a source language Object program belongs to an object language A translators could be: Assembler, Compiler, Interpreter Assembler: source program object program (in assembly language) (in machine language) Assembler

Compiler Construction6 Language Processors. a compiler is a program that can read a program in one language the source language - and translate it into an equivalent program in another language - the target language; An important role of the compiler is to report any errors in the source program that it detects during the translation process If the target program is an executable machine-language program, it can then be called by the user to process inputs and produce outputs;

Compiler Construction7 Interpreter An interpreter is another common kind of language processor. Instead of producing a target program as a translation, an interpreter appears to directly execute the operations specified in the source program on inputs supplied by the user The machine-language target program produced by a compiler is usually much faster than an interpreter at mapping inputs to outputs. An interpreter, however, can usually give better error diagnostics than a compiler, because it executes the source program statement by statement.

Compiler Construction8 Overview of Compilers - Compiler: translates a source program written in a High- Level Language (HLL) such as Pascal, C++ into computer’s machine language (Low-Level Language (LLL)). * The time of conversion from source program into object program is called compile time * The object program is executed at run time - Interpreter: processes an internal form of the source program and data at the same time (at run time); no object program is generated.

Compiler Construction9 Compilers and Interpreters Why Interpretation  A higher degree of machine independence: high portability.  Dynamic execution: modification or addition to user programs as execution proceeds.  Dynamic data type: type of object may change at runtime  Easier to write – no synthesis part.  Better diagnostics: more source text information available

Compiler Construction10 Overview of Compilers Compilation Process: Interpretive Process: Source program Data Object program Results Data Compiler Executing Computer Result Source program Compiler Compile time run time

Compiler Construction11 Example Of Combining Both Interpreter and Compiler Java language processors combine compilation and interpretation, A Java source program may first be compiled into an intermediate form called bytecodes. The bytecodes are then interpreted by a virtual machine. A benefit of this arrangement is that bytecodes compiled on one machine can be interpreted on another machine, perhaps across a network. In order to achieve faster processing of inputs to outputs, some Java compilers, called just-in-time compilers, translate the bytecodes into machine language immediately before they run the intermediate program to process the input.

Compiler Construction12 Model of A Compiler A compiler must perform two tasks: - analysis of source program: The analysis part breaks up the source program into constituent pieces and imposes a grammatical structure on them. It then uses this structure to create an intermediate representation of the source program. - synthesis of its corresponding program: constructs the desired target program from the intermediate representation and the information in the symbol table. The analysis part is often called the front end of the compiler; the synthesis part is the back end.

Compiler Construction13 source program object program Analysis Lexical Syntactic Semantic Analysis Analysis Analysis Tables Synthesis Code Generator optimizer

Compiler Construction14 Tasks of Compilation Process and Its Output Error handler Compiler phases

Compiler Construction15 Lexical Analysis (scanner): The first phase of a compiler Lexical analyzer reads the stream of characters making up the source program and groups the characters into meaningful sequences called lexeme For each lexeme, the lexical analyzer produces a token of the form that it passes on to the subsequent phase, syntax analysis (token-name, attribute-value) Token-name: an abstract symbol is used during syntax analysis, an attribute-value: points to an entry in the symbol table for this token.

Compiler Construction16 Example: position =initial + rate * 60 1.”position” is a lexeme mapped into a token (id, 1), where id is an abstract symbol standing for identifier and 1 points to the symbol table entry for position. The symbol-table entry for an identifier holds information about the identifier, such as its name and type. 2. = is a lexeme that is mapped into the token (=). Since this token needs no attribute- value, we have omitted the second component. For notational convenience, the lexeme itself is used as the name of the abstract symbol. 3. “initial” is a lexeme that is mapped into the token (id, 2), where 2 points to the symbol-table entry for initial is a lexeme that is mapped into the token (+). 5. “rate” is a lexeme mapped into the token (id, 3), where 3 points to the symbol-table entry for rate. 6. * is a lexeme that is mapped into the token (*) is a lexeme that is mapped into the token (60) Blanks separating the lexemes would be discarded by the lexical analyzer.

Compiler Construction17 Syntax Analysis (parser) : The second phase of the compiler The parser uses the first components of the tokens produced by the lexical analyzer to create a tree-like intermediate representation that depicts the grammatical structure of the token stream. A typical representation is a syntax tree in which each interior node represents an operation and the children of the node represent the arguments of the operation

Compiler Construction18 Syntax Analysis Example Pay := Base + Rate* 60  The seven tokens are grouped into a parse tree Assignment stmt identifier pay := expression + identifier base Rate*60

Compiler Construction19 Semantic Analysis: Third phase of the compiler The semantic analyzer uses the syntax tree and the information in the symbol table to check the source program for semantic consistency with the language definition. Gathers type information and saves it in either the syntax tree or the symbol table, for subsequent use during intermediate-code generation. An important part of semantic analysis is type checking, where the compiler checks that each operator has matching operands. For example, many programming language definitions require an array index to be an integer; the compiler must report an error if a floating-point number is used to index an array. The language specification may permit some type conversions called coercions. For example, a binary arithmetic operator may be applied to either a pair of integers or to a pair of floating-point numbers. If the operator is applied to a floating-point number and an integer, the compiler may convert or coerce the integer into a floating-point number.

Compiler Construction20 Intermediate Code Generation: three-address code After syntax and semantic analysis of the source program, many compilers generate an explicit low-level or machine-like intermediate representation (a program for an abstract machine). This intermediate representation should have two important properties: it should be easy to produce and it should be easy to translate into the target machine. The considered intermediate form called three-address code, which consists of a sequence of assembly-like instructions with three operands per instruction. Each operand can act like a register.

Compiler Construction21 Code Optimization: to generate better target code The machine-independent code-optimization phase attempts to improve the intermediate code so that better target code will result. Usually better means: faster, shorter code, or target code that consumes less power. The optimizer can deduce that the conversion of 60 from integer to floating point can be done once and for all at compile time, so the int to float operation can be eliminated by replacing the integer 60 by the floating-point number Moreover, t3 is used only once There are simple optimizations that significantly improve the running time of the target program without slowing down compilation too much.

Compiler Construction22 Code Generation: takes as input an intermediate representation of the source program and maps it into the target language If the target language is machine, code, registers or memory locations are selected for each of the variables used by the program. Then, the intermediate instructions are translated into sequences of machine instructions that perform the same task. A crucial aspect of code generation is the judicious assignment of registers to hold variables.

Compiler Construction23 Symbol-Table Management: The symbol table is a data structure containing a record for each variable name, with fields for the attributes of the name. The data structure should be designed to allow the compiler to find the record for each name quickly and to store or retrieve data from that record quickly These attributes may provide information about the storage allocated for a name, its type, its scope (where in the program its value may be used), and in the case of procedure names, such things as the number and types of its arguments, the method of passing each argument (for example, by value or by reference), and the type returned.

Compiler Construction24 Translation of an assignment statement

Compiler Construction25 Grouping of Compiler Phases Front end  Consist of those phases that depend on the source language but largely independent of the target machine. Back end  Consist of those phases that are usually target machine dependent such as optimization and code generation.

Compiler Construction26 Common Back-end Compiling System FortranC/C++PascalCobol Common IR (e.g. Ucode) Optimizer Target Machine Code Gen

Compiler Construction27 Compiling Passes Several phases can be implemented as a single pass consist of reading an input file and writing an output file. A typical multi-pass compiler looks like: First pass: preprocessing, macro expansion Second pass: syntax-directed translation, IR code generation Third pass: optimization Last pass: target machine code generation

Compiler Construction28 Cousins of Compilers Preprocessors Assemblers Compiler may produce assembly code instead of generating relocatable machine code directly. Loaders and Linkers Loader copies code and data into memory, allocates storage, setting protection bits, mapping virtual addresses,.. Etc Linker handles relocation and resolves symbol references. Debugger

Compiler Construction29 Tasks of Compilation Process and Its Output Each tasks is assigned to a phase, e.g. Lexical Analyzer phase, Syntax Analyzer phase, and so on. Each task has input and output. Any thing between brackets in the last figure is output of a phase. The compiler first analyzes the program, the result is representations suitable to be translated later on: - Parse tree - Symbol table

Compiler Construction30 Parse Tree and Symbol Table Parse tree defines the program structure; how to combine parts of the program to produce larger part and so on. Symbol table provides - the associations between all occurrences of each name given in the program. - It provides a link between each name and it declaration.