Compilers Book: Crafting a Compiler with C

Slides:



Advertisements
Similar presentations
Introduction to Compiler Construction
Advertisements

Compiler Construction by Muhammad Bilal Zafar (AP)
1 Semantic Processing. 2 Contents Introduction Introduction A Simple Compiler A Simple Compiler Scanning – Theory and Practice Scanning – Theory and Practice.
Reference Book: Modern Compiler Design by Grune, Bal, Jacobs and Langendoen Wiley 2000.
Compiler Construction1 A Compulsory Module for Students in Computer Science Department Faculty of IT / Al – Al Bayt University First Semester 2009/2010.
BİL744 Derleyici Gerçekleştirimi (Compiler Design)1.
1.3 Executing Programs. How is Computer Code Transformed into an Executable? Interpreters Compilers Hybrid systems.
C Chuen-Liang Chen, NTUCS&IE / 1 COMPILER Chuen-Liang Chen Department of Computer Science and Information Engineering National Taiwan University Taipei,
September 7, September 7, 2015September 7, 2015September 7, 2015 Azusa, CA Sheldon X. Liang Ph. D. Computer Science at Azusa Pacific University.
Course Revision Contents  Compilers  Compilers Vs Interpreters  Structure of Compiler  Compilation Phases  Compiler Construction Tools  A Simple.
Compiler1 Chapter V: Compiler Overview: r To study the design and operation of compiler for high-level programming languages. r Contents m Basic compiler.
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.
1 Programming Languages Tevfik Koşar Lecture - II January 19 th, 2006.
Introduction to Compiler Construction Robert van Engelen COP5621 Compiler Construction Copyright Robert.
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.
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.
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.
Introduction to Compiling
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. Chapter 1 -- Introduction2  Def: Compiler --  a program that translates a program written in a language like Pascal, C, PL/I,
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.
Dr. Mohamed Ramadan Saady 314ALL CH1.1 Chapter 1: Introduction to Compiling.
Compiler Construction CPCS302 Dr. Manal Abdulaziz.
©SoftMoore ConsultingSlide 1 Structure of Compilers.
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.
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.
CS416 Compiler Design1. 2 Course Information Instructor : Dr. Ilyas Cicekli –Office: EA504, –Phone: , – Course Web.
CS510 Compiler Lecture 1. Sources Lecture Notes Book 1 : “Compiler construction principles and practice”, Kenneth C. Louden. Book 2 : “Compilers Principles,
1 Crafting a Compiler with C Chapter 1 Introduction Teacher : Dr. Lawrence Y. Deng contact: Grading: Attendance 10%, Midterm exam.
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.
Chapter 1. Introduction.
Advanced Computer Systems
Compiler Design (40-414) Main Text Book:
PRINCIPLES OF COMPILER DESIGN
Chapter 1 Introduction.
Introduction to Compiler Construction
Compiler Construction (CS-636)
Chapter 1 Introduction.
课程名 编译原理 Compiling Techniques
Chapter 1: Introduction to Compiling (Cont.)
Compiler Lecture 1 CS510.
CS416 Compiler Design lec00-outline September 19, 2018
Introduction to Compiler Construction
Introduction CI612 Compiler Design CI612 Compiler Design.
Compiler 薛智文 TH 6 7 8, DTH Spring.
COP4020 Programming Languages
Subject: Language Processor
CS416 Compiler Design lec00-outline February 23, 2019
Introduction to Compiler Construction
Compilers Principles, Techniques, & Tools Taught by Jing Zhang
Lec00-outline May 18, 2019 Compiler Design CS416 Compiler Design.
Introduction to Compiler Construction
Presentation transcript:

Compilers Book: Crafting a Compiler with C Author: Charles N. Fischer and Richard J. LeBlanc, Jr. The Benjamin/Cumming Publishing Company, Inc

Gain Score Homework: 10% Project: 40% (Two members in a team) Lexical analysis: 10% Syntax analysis: 20% Code generation: 10% Mid Exam: 25% Final Exam: 25%

Contents Introduction A Simple Compiler Scanning – Theory and Practice Grammars and Parsing LL(1) Parsing LR Parsing Semantic Processing Symbol Tables Run-time Storage Organization

Contents (Cont’d.) Code Generation and Local Code Optimization Processing Declarations Processing Expressions and Data Structure References Translating Control Structure Translating Procedures and Functions Attribute Grammars and Multipass Translation Code Generation and Local Code Optimization Global Optimization Parsing in the Real World

Chapter 1 Introduction

Contents Overview and History What Do Compilers Do? The Structure of a Compiler The Syntax and Semantics of Programming Languages Compiler Design and Programming Language Design Compiler Classifications Influences on Computer Design

Overview and History Compilers are fundamental to modern computing. They act as translators, transforming human-oriented programming languages into computer-oriented machine languages. Programming Language (Source) Machine Language (Target) Compiler

Overview and History (Cont’d.) The first real compiler FORTRAN compilers of the late 1950s 18 person-years to build Today, we can build a simple compiler in a few month. Crafting an efficient and reliable compiler is still challenging.

Overview and History (Cont’d.) Compiler technology is more broadly applicable and has been employed in rather unexpected areas. Text-formatting languages, like nroff and troff; preprocessor packages like eqn, tbl, pic Silicon compiler for the creation of VLSI circuits Command languages of OS Query languages of Database systems

What Do Compilers Do? Compilers may be distinguished according to the kind of target code they generate: Pure Machine Code Assume there is no run-time OS support. For systems implementation or embedded systems Run on bare machines Augmented Machine Code For hardware + OS + language-specific support routines, e.g., I/O, math functions, storage allocation, and data transfer. Virtual Machine Code JVM, P-code Portable 4-times slower Code is interpreted.

What Do Compilers Do? (Cont’d.) Another way that compilers differ from one another is in the format of the target machine code they generate Assembly Language Format Simplify compilation Use symbolic labels rather than calculating address Pro: good for smaller machines Con: need an additional pass

What Do Compilers Do? (Cont’d.) Relocatable Binary Format A linkage step is required Similar to the output of assembler Need a linking step before execution Good for modular compilation, cross-language references, and libraries Memory-Image (Load-and-Go) Format Fast Very limited linking capabilities Good for debugging (frequent changes)

What Do Compilers Do? (Cont’d.) Another kind of language processor, called an interpreter, differs from a compiler in that it executes programs without explicitly performing a translation Advantages and Disadvantages of an interpreter See page 6 & 7 Interpreter Output Source Program Encoding Data

What Do Compilers Do? (Cont’d.) Advantage Modification to program during execution Interactive debugging Not for every language, e.g., Basic, Pascal Dynamic-typed languages Variable types may change at run time, e.g., LISP. Difficult to compile Better diagnostics Source code is available. Machine independence However, the interpreter itself must be portable.

What Do Compilers Do? (Cont’d.) Disadvantage Slower execution due to repeated examination Dynamic (LISP): 100:1 Static (BASIC): 10:1 Substantial space overhead

The Structure of a Compiler Modern compilers are syntax-directed Compilation is driven the syntactic structure of programs; i.e., actions are associated with the structures. Any compiler must perform two major tasks Analysis of the source program Synthesis of a machine-language program

The Structure of a Compiler (Cont’d.) Source Program Tokens Syntactic Scanner Parser Semantic Routines Structure (Character Stream) Intermediate Representation Optimizer Symbol and Attribute Tables (Used by all Phases of The Compiler) Code Generator The structure of a Syntax-Directed Compiler Target Machine Code

The Structure of a Compiler (Cont’d.) Scanner The scanner begins the analysis of the source program by reading the input, character by character, and grouping characters into individual words and symbols (tokens) The tokens are encoded and then are fed to the parser for syntactic analysis For details, see the bottom of page 8. Scanner generators finite automata as programs regular exp for tokens lex or scangen

The Structure of a Compiler (Cont’d.) Parser Given a formal syntax specification (typically as a context-free grammar [CFG]), the parse reads tokens and groups them into units as specified by the productions of the CFG being used. While parsing, the parser verifies correct syntax, and if a syntax error is found, it issues a suitable diagnostic. As syntactic structure is recognized, the parser either calls corresponding semantic routines directly or builds a syntax tree. yacc or llgen grammar parser

The Structure of a Compiler (Cont’d.) Semantic Routines Perform two functions Check the static semantics of each construct Do the actual translation for generating IR The heart of a compiler Optimizer The IR code generated by the semantic routines is analyzed and transformed into functionally equivalent but improved IR code. This phase can be very complex and slow Peephole optimization

The Structure of a Compiler (Cont’d.) One-pass compiler No optimization is required To merge code generation with semantic routines and eliminate the use of an IR Retargetable compiler Many machine description files, e.g., gcc Match IR against target machine patterns. Compiler writing tools Compiler generators or compiler-compilers Lex and Yacc E.g., scanner and parser generators

Compiler Design and Programming Language Design An interesting aspect is how programming language design and compiler design influence one another. Programming languages that are easy to compiler have many advantages See the 2nd paragraph of page 16.

Compiler Design and Programming Language Design (Cont’d.) Languages such as Snobol and APL are usually considered noncompilable What attributes must be found in a programming language to allow compilation? Can the scope and binding of each identifier reference be determined before execution begins Can the type of object be determined before execution begins? Can existing program text be changed or added to during execution?

Compiler Classifications Diagnostic compilers Report and repair compile-time errors. Add run-time checks, e.g., array subscripts. should be used in real world. vs. production compiler Optimizing compilers Re-targetable compiler Localize machine dependence. difficult to implement less efficient object code Integrated programming environments integrated E-C-D