Compiler Construction Lecture 1: Introduction Summer Semester 2017 Thomas Noll Software Modeling and Verification Group RWTH Aachen University

Similar documents
Compiler Construction Lecture 1: Introduction Winter Semester 2018/19 Thomas Noll Software Modeling and Verification Group RWTH Aachen University

Compiler Construction

Static Program Analysis

Static Program Analysis

CS Compiler Construction West Virginia fall semester 2014 August 18, 2014 syllabus 1.0

Compiler Construction

Compiler Construction

Compiler Construction

Compiler Construction

Compiler Construction

Compiler Construction

Translator Design CRN Course Administration CMSC 4173 Spring 2017

Compiler Construction

Compiler Construction

Translator Design CRN Course Administration CMSC 4173 Spring 2018

Name of chapter & details

Formal Languages and Compilers Lecture I: Introduction to Compilers

Principles of Compiler Construction ( )

Compiler Design (40-414)

12048 Compilers II. Computer Science Engineering, 8º semester Mandatory, 2º Cycle. Theoretical credits: 3.0 Lab credits: 1.5. Theory: José Neira

CA Compiler Construction

Compiler Construction

Philadelphia University Faculty of Information Technology Department of Computer Science --- Semester, 2007/2008. Course Syllabus

CST-402(T): Language Processors

Compiler Construction

CMPE 152 Compiler Design

CMPE 152 Compiler Design

CS/SE 153 Concepts of Compiler Design

Principles of Compiler Construction ( )

Compiler Construction

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

Compiler Construction

Compiler Construction

Earlier edition Dragon book has been revised. Course Outline Contact Room 124, tel , rvvliet(at)liacs(dot)nl

Compiler I (dt. Übersetzer I) Prof. Dr. Uwe Kastens Winter 2001/2002

Error Recovery during Top-Down Parsing: Acceptable-sets derived from continuation

2001 bei Prof. Dr. Uwe Kastens

Compiler Construction

Compiler Construction LECTURE # 1

Grammars and Parsing. Paul Klint. Grammars and Parsing

CS/SE 153 Concepts of Compiler Design

CSCI 565 Compiler Design and Implementation Spring 2014

CMPE 152 Compiler Design

Evaluation of Semantic Actions in Predictive Non- Recursive Parsing

1. true / false By a compiler we mean a program that translates to code that will run natively on some machine.

Automatic Scanning and Parsing using LEX and YACC

Quick Parser Development Using Modified Compilers and Generated Syntax Rules

Undergraduate Compilers in a Day

CS321 Languages and Compiler Design I. Winter 2012 Lecture 1

Experiences in Building a Compiler for an Object-Oriented Language

CS131: Programming Languages and Compilers. Spring 2017

Compiler Construction I

Working of the Compilers

Compilers. Pierre Geurts

Compiler Design Overview. Compiler Design 1

Compiler Construction I

INTRODUCTION PRINCIPLES OF PROGRAMMING LANGUAGES. Norbert Zeh Winter Dalhousie University 1/10

CS 415 Midterm Exam Spring 2002

Evaluation Scheme L T P Total Credit Theory Mid Sem Exam

Compiler Construction

CS 565: Programming Languages. Spring 2008 Tu, Th: 16:30-17:45 Room LWSN 1106

CS 415 Midterm Exam Spring SOLUTION

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

5. Semantic Analysis. Mircea Lungu Oscar Nierstrasz

Compiler Construction 1. Introduction. Oscar Nierstrasz

HOLY ANGEL UNIVERSITY COLLEGE OF INFORMATION AND COMMUNICATIONS TECHNOLOGY COMPILER THEORY COURSE SYLLABUS

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

COP4020 Programming Languages. Compilers and Interpreters Robert van Engelen & Chris Lacher

LP - Programming Languages

Compiler Design. Dr. Chengwei Lei CEECS California State University, Bakersfield

Compilers and Interpreters

CS 242. Fundamentals. Reading: See last slide

Contents. Chapter 1 SPECIFYING SYNTAX 1

Compiler I. (dt. Übersetzer I) Prof. Dr. Uwe Kastens. Winter 2001/2002. Lecture Compiler I WS 2001/2002 / Slide 01

COMPILER CONSTRUCTION LAB 2 THE SYMBOL TABLE. Tutorial 2 LABS. PHASES OF A COMPILER Source Program. Lab 2 Symbol table

LECTURE NOTES ON COMPILER DESIGN P a g e 2

COMP 3002: Compiler Construction. Pat Morin School of Computer Science

CSE4305: Compilers for Algorithmic Languages CSE5317: Design and Construction of Compilers

CS426 Compiler Construction Fall 2006

Compilers for Modern Architectures Course Syllabus, Spring 2015

What is a compiler? Xiaokang Qiu Purdue University. August 21, 2017 ECE 573

INF5110 Compiler Construction

COMP-421 Compiler Design. Presented by Dr Ioanna Dionysiou

COLLEGE OF ENGINEERING, NASHIK. LANGUAGE TRANSLATOR

BIRLA INSTITUTE OF TECHNOLOGY AND SCIENCE, Pilani Pilani Campus Instruction Division

CS 432 Fall Mike Lam, Professor. Compilers. Advanced Systems Elective

Introduction to Compiler Construction

INSTITUTE OF AERONAUTICAL ENGINEERING (Autonomous) Dundigal, Hyderabad

EI326 ENGINEERING PRACTICE & TECHNICAL INNOVATION (III-G) Kenny Q. Zhu Dept. of Computer Science Shanghai Jiao Tong University

Compiler Construction D7011E

Principles of Programming Languages [PLP-2015] Detailed Syllabus

Formats of Translated Programs

Syntax and Type Analysis

Programmiersprachen (Programming Languages)

Introduction to Compiler Construction

G.PULLAIH COLLEGE OF ENGINEERING & TECHNOLOGY

! Broaden your language horizons! Different programming languages! Different language features and tradeoffs. ! Study how languages are implemented

Compiler construction

Languages and Automata

What do Compilers Produce?

Transcription:

Compiler Construction Thomas Noll Software Modeling and Verification Group RWTH Aachen University https://moves.rwth-aachen.de/teaching/ss-17/cc/

Preliminaries People Lectures: Thomas Noll (noll@cs.rwth-aachen.de) Exercise classes: Sebastian Junges (sebastian.junges@cs.rwth-aachen.de) Christoph Matheja (matheja@cs.rwth-aachen.de) Matthias Volk (matthias.volk@cs.rwth-aachen.de) Student assistants: Justus Fesefeldt Louis Wachtmeister 3 of 24 Compiler Construction

Preliminaries Target Audience BSc Informatik: Wahlpflicht Theoretische Informatik MSc Informatik: Theoretische Informatik MSc Software Systems Engineering: Theoretical Foundations of SSE... 4 of 24 Compiler Construction

Preliminaries Expectations What you can expect: how to implement (imperative) programming languages application of theoretical concepts (scanning, parsing, static analysis,...) compiler = example of a complex software architecture gaining experience with tool support What we expect: basic knowledge in (imperative) programming languages algorithms and data structures (queues, trees,...) formal languages and automata theory (regular and context-free languages, finite and pushdown automata,...) 5 of 24 Compiler Construction

Preliminaries Organisation Schedule: Lecture Tue 14:15 15:45 AH 6 (starting 2 May) Lecture Thu 14:15 15:45 AH 1 (starting 4 May) Exercise class Tue 12:15 13:45 AH 2 (starting 9 May) Special: 27/29 June (itestra) see overview at https://moves.rwth-aachen.de/teaching/ss-17/cc/ Exercises: 1st assignment sheet next week, presented 16 May Work on assignments in groups of three people Exam: Written exams (2 h, 6 Credits) on 4 August/19 September Registration by 19 May Admission requires at least 50% of the points in the exercises Written material in English (including exam), lecture and exercise classes in German, rest up to you 6 of 24 Compiler Construction

What Is a Compiler? What Is It All About? https://en.wikipedia.org/wiki/compiler A compiler is a computer program (or a set of programs) that transforms source code written in a programming language (the source language) into another computer language (the target language), with the latter often having a binary form known as object code. The most common reason for converting source code is to create an executable program. Compiler vs. interpreter Compiler: translates an executable program in one language into an executable program in another language (possibly applying improvements ) Interpreter: directly executes an executable program, producing the corresponding results 8 of 24 Compiler Construction

What Is a Compiler? Usage of Compiler Technology I Programming language interpreters Ad-hoc implementation of small programs in scripting languages (JavaScript, Perl, Ruby, bash,...) Programs usually interpreted, i.e., executed stepwise Moreover: many non-scripting languages also involve interpreters (e.g., JVM as byte code interpreter) 9 of 24 Compiler Construction

What Is a Compiler? Usage of Compiler Technology II Web browsers Receive HTML (XML) pages from web server Analyse (parse) data and translate it to graphical representation 10 of 24 Compiler Construction

What Is a Compiler? Usage of Compiler Technology III Text processors L A T E X = programming language for texts of various kinds Translated to DVI, PDF,... 11 of 24 Compiler Construction

Aspects of a Compiler Properties of a Good Compiler I Correctness Goals: syntactic correctness: conformance to source and target language specifications semantic correctness: equivalence of source and target code Techniques: compiler validation and verification proof-carrying code,... cf. course on Semantics and Verification of Software (SS 2015, WS 2017/18) 13 of 24 Compiler Construction

Aspects of a Compiler Properties of a Good Compiler II Efficiency of generated code Goal: target code as fast and/or memory efficient as possible program analysis and optimisation cf. course on Static Program Analysis (WS 2016/17) Efficiency of compiler Goal: translation process as fast and/or memory efficient as possible (for input programs of arbitrary size) fast (linear-time) algorithms sophisticated data structures Remark: mutual tradeoffs! 14 of 24 Compiler Construction

Aspects of a Compiler Aspects of a Programming Language Syntax: How does a program look like? hierarchical composition of programs from structural components (keywords, identifiers, expressions, statements,...) Semantics: What does this program mean? Static semantics : properties which are not (easily) definable in syntax (declaredness of identifiers, type correctness,...) Operational semantics : execution evokes state transformations of an (abstract) machine Pragmatics length and understandability of programs learnability of programming language appropriateness for specific applications... 15 of 24 Compiler Construction

Aspects of a Compiler Motivation for Rigorous Formal Treatment Example 1.1 1. From NASA s Mercury Project: FORTRAN DO loop DO 5 K = 1,3: DO loop with index variable K DO 5 K = 1.3: assignment to (real) variable DO5K (cf. Dirk W. Hoffmann: Software-Qualitt, 2nd ed., Springer 2013) 2. How often is the following loop traversed? FORTRAN IV: once Pascal: never for i := 2 to 1 do... 3. What if value of p is nil in the following program? Pascal: strict Boolean operations Modula: non-strict Boolean operations while p <> nil and p^.key < val do... 16 of 24 Compiler Construction

Aspects of a Compiler Historical Development Code generation: since 1940s ad-hoc techniques concentration on back-end first FORTRAN compiler in 1960 Formal syntax: since 1960s LL/LR parsing shift towards front-end semantics defined by compiler/interpreter Formal semantics: since 1970s operational denotational axiomatic cf. course on Semantics and Verification of Software Automatic compiler generation: since 1980s [f]lex, yacc/bison, ANTLR,... cf. https://www.thefreecountry.com/programming/compilerconstruction.shtml 17 of 24 Compiler Construction

The High-Level View Compiler Phases Lexical analysis (Scanner): recognition of symbols, delimiters, and comments by regular expressions and finite automata Syntax analysis (Parser): determination of hierarchical program structure by context-free grammars and pushdown automata Semantic analysis: checking context dependencies, data types,... by attribute grammars Generation of intermediate code: translation into (target-independent) intermediate code by tree translations Code optimisation: to improve runtime and/or memory behavior Generation of target code: tailored to target system Additionally: optimisation of target code, symbol table, error handling 19 of 24 Compiler Construction

The High-Level View Conceptual Structure of a Compiler Source code x1 := y2 + 1; Lexical analysis (Scanner) Syntax analysis (Parser) Semantic analysis Generation of intermediate codevar Exp int Var LOAD y2; LIT 1; ADD; STO x1 Code optimisation... Generation of target code... Target code 20 of 24 Compiler Construction (id, x1)(gets, )(id, y2)(plus, )(int, 1)(sem, ) Asg Sum Var Con Asg Var Exp Sum Var Con Asg ok int Var Exp int Sum int Con int int Var regular expressions/ finite automata context-free Asg ok grammars/ pushdown automata int Var Exp int attribute Sum int grammars Con int tree translations [omitted: symbol table, error handling]

The High-Level View Classification of Compiler Phases Analysis vs. synthesis Analysis: lexical/syntax/semantic analysis (determination of syntactic structure, error handling) Synthesis: generation of (intermediate/target) code + optimisation Front-end vs. back-end Front-end: machine-independent parts (analysis + intermediate code + machine-independent optimisations) Back-end: machine-dependent parts (generation + optimisation of target code) instruction selection register allocation instruction scheduling 21 of 24 Compiler Construction

The High-Level View Role of the Runtime System Memory management services allocation (on heap/stack) deallocation garbage collection Run-time type checking (for non- strongly typed languages) Error processing, exception handling Interface to the operating system (input and output,...) Support for parallelism (communication and synchronisation) 22 of 24 Compiler Construction

Literature Literature (CS Library: Handapparat Softwaremodellierung und Verifikation ) General A.V. Aho, M.S. Lam, R. Sethi, J.D. Ullman: Compilers Principles, Techniques, and Tools; 2nd ed., Addison-Wesley, 2007 A.W. Appel, J. Palsberg: Modern Compiler Implementation in Java, Cambridge University Press, 2002 D. Grune, H.E. Bal, C.J.H. Jacobs, K.G. Langendoen: Modern Compiler Design, Wiley & Sons, 2000 R. Wilhelm, D. Maurer: Übersetzerbau, 2. Auflage, Springer, 1997 Specific O. Mayer: Syntaxanalyse, BI-Wissenschafts-Verlag, 1978 D. Brown, R. Levine T. Mason: lex & yacc, O Reilly, 1995 T. Parr: The Definite ANTLR Reference, Pragmatic Bookshelf, 2007 24 of 24 Compiler Construction