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

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

Compiler Construction

Static Program Analysis

Static Program Analysis

Compiler Construction

Compiler Construction

Compiler Construction

Compiler Construction

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

Compiler Construction

Compiler Construction

Compiler Construction

Translator Design CRN Course Administration CMSC 4173 Spring 2017

Compiler Construction

Formal Languages and Compilers Lecture I: Introduction to Compilers

Translator Design CRN Course Administration CMSC 4173 Spring 2018

CMPE 152 Compiler Design

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

CS/SE 153 Concepts of Compiler Design

Name of chapter & details

CA Compiler Construction

Compiler Design (40-414)

Principles of Compiler Construction ( )

CMPE 152 Compiler Design

Compiler Construction

CST-402(T): Language Processors

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

Compiler Construction

CS/SE 153 Concepts of Compiler Design

CMPE 152 Compiler Design

Compiler Construction LECTURE # 1

Compiler Construction

Compiler Construction

Principles of Compiler Construction ( )

Compiler Construction

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

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

CSCI 565 Compiler Design and Implementation Spring 2014

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

2001 bei Prof. Dr. Uwe Kastens

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

Evaluation of Semantic Actions in Predictive Non- Recursive Parsing

Compiler Construction

CS321 Languages and Compiler Design I. Winter 2012 Lecture 1

Evaluation Scheme L T P Total Credit Theory Mid Sem Exam

Grammars and Parsing. Paul Klint. Grammars and Parsing

CS426 Compiler Construction Fall 2006

COMP-421 Compiler Design. Presented by Dr Ioanna Dionysiou

Compiler Design Overview. Compiler Design 1

Compilers. Pierre Geurts

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

CS131: Programming Languages and Compilers. Spring 2017

CS 415 Midterm Exam Spring 2002

CS 415 Midterm Exam Spring SOLUTION

Quick Parser Development Using Modified Compilers and Generated Syntax Rules

Compiler Construction I

Automatic Scanning and Parsing using LEX and YACC

Undergraduate Compilers in a Day

COLLEGE OF ENGINEERING, NASHIK. LANGUAGE TRANSLATOR

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

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

Compiler Construction I

INF5110 Compiler Construction

Compiler Construction

Introduction to Compiler Construction

Compiler Construction 1. Introduction. Oscar Nierstrasz

Working of the Compilers

Introduction to Compiler Design

Experiences in Building a Compiler for an Object-Oriented Language

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

Introduction to Compiler Construction

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

COMPILERS AND INTERPRETERS Lesson 4 TDDD16

G.PULLAIH COLLEGE OF ENGINEERING & TECHNOLOGY

LECTURE NOTES ON COMPILER DESIGN P a g e 2

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

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

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

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

Programmiersprachen (Programming Languages)

Compiling Regular Expressions COMP360

TDDD55 - Compilers and Interpreters Lesson 3

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

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

INSTITUTE OF AERONAUTICAL ENGINEERING (Autonomous) Dundigal, Hyderabad

Compiler construction

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

5. Semantic Analysis. Mircea Lungu Oscar Nierstrasz

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

LP - Programming Languages

Compilers and Interpreters

Finding People and Information (1) G53CMP: Lecture 1. Aims and Motivation (1) Finding People and Information (2)

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

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

Compiler Construction D7011E

SRM UNIVERSITY FACULTY OF ENGINEERING AND TECHNOLOGY SCHOOL OF COMPUTING DEPARTMENT OF CSE COURSE PLAN

CS 242. Fundamentals. Reading: See last slide

Compiling and Interpreting Programming. Overview of Compilers and Interpreters

Fall Compiler Principles Lecture 2: LL parsing. Roman Manevich Ben-Gurion University of the Negev

Compilers and Code Optimization EDOARDO FUSELLA

Transcription:

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

Preliminaries Outline of Lecture 1 Preliminaries What Is a Compiler? Aspects of a Compiler The High-Level View Literature 2 of 24 Compiler Construction

Preliminaries People Lectures: Thomas Noll (noll@cs.rwth-aachen.de) Exercise classes: Philipp Berger (berger@cs.rwth-aachen.de) Matthias Volk (matthias.volk@cs.rwth-aachen.de) Student assistant: Justus Fesefeldt 3 of 24 Compiler Construction

Preliminaries Target Audience BSc Informatik: Wahlpflicht Theoretische Informatik MSc Informatik: Wahlpflicht 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 5 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, stacks, trees,...) formal languages and automata theory (regular and context-free languages, finite and pushdown automata,...) 5 of 24 Compiler Construction

Preliminaries Organisation Schedule: Lecture Mon 12:30 14:00 AH 6 (starting 8 Oct) Lecture Thu 12:30 14:00 AH 5 (starting 11 Oct) Exercise class Mon 15:15 16:45 AH 5 (starting 15 Oct) Two special lectures in mid-december (itestra) see overview at https://moves.rwth-aachen.de/teaching/ws-1819/cc/ 6 of 24 Compiler Construction

Preliminaries Organisation Schedule: Lecture Mon 12:30 14:00 AH 6 (starting 8 Oct) Lecture Thu 12:30 14:00 AH 5 (starting 11 Oct) Exercise class Mon 15:15 16:45 AH 5 (starting 15 Oct) Two special lectures in mid-december (itestra) see overview at https://moves.rwth-aachen.de/teaching/ws-1819/cc/ Exercises: 1st assignment sheet next week, presented 22 Oct Work on assignments in groups of threefour people Recap of foundations (finite automata,...) on 15 Oct 6 of 24 Compiler Construction

Preliminaries Organisation Schedule: Lecture Mon 12:30 14:00 AH 6 (starting 8 Oct) Lecture Thu 12:30 14:00 AH 5 (starting 11 Oct) Exercise class Mon 15:15 16:45 AH 5 (starting 15 Oct) Two special lectures in mid-december (itestra) see overview at https://moves.rwth-aachen.de/teaching/ws-1819/cc/ Exercises: 1st assignment sheet next week, presented 22 Oct Work on assignments in groups of threefour people Recap of foundations (finite automata,...) on 15 Oct Exam: Written exams (2 h, 6 Credits) 21.02.2019 and 25.03.2019 Registration between 3 Dec and 10 Jan Admission requires at least 50% of the points in the exercises 6 of 24 Compiler Construction

Preliminaries Organisation Schedule: Lecture Mon 12:30 14:00 AH 6 (starting 8 Oct) Lecture Thu 12:30 14:00 AH 5 (starting 11 Oct) Exercise class Mon 15:15 16:45 AH 5 (starting 15 Oct) Two special lectures in mid-december (itestra) see overview at https://moves.rwth-aachen.de/teaching/ws-1819/cc/ Exercises: 1st assignment sheet next week, presented 22 Oct Work on assignments in groups of threefour people Recap of foundations (finite automata,...) on 15 Oct Exam: Written exams (2 h, 6 Credits) 21.02.2019 and 25.03.2019 Registration between 3 Dec and 10 Jan 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? Outline of Lecture 1 Preliminaries What Is a Compiler? Aspects of a Compiler The High-Level View Literature 7 of 24 Compiler Construction

What Is a Compiler? What Is It All About? https://en.wikipedia.org/wiki/compiler A compiler is computer software that transforms computer code written in one programming language (the source language) into another programming language (the target language)... The name compiler is primarily used for programs that translate source code from a high-level programming language to a lower level language (e.g., assembly language, object code, or machine code) to create an executable program. 8 of 24 Compiler Construction

What Is a Compiler? What Is It All About? https://en.wikipedia.org/wiki/compiler A compiler is computer software that transforms computer code written in one programming language (the source language) into another programming language (the target language)... The name compiler is primarily used for programs that translate source code from a high-level programming language to a lower level language (e.g., assembly language, object code, or machine code) 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 Outline of Lecture 1 Preliminaries What Is a Compiler? Aspects of a Compiler The High-Level View Literature 12 of 24 Compiler Construction

Aspects of a Compiler Expected Properties of a Compiler I Correctness of translation Goals: syntactic correctness: conformance to source and target language specifications accept all (and only) syntactically valid input programs produce correct target code semantic correctness: equivalence of source and target code behaviour of target code corresponds to (expected) behaviour of source code 13 of 24 Compiler Construction

Aspects of a Compiler Expected Properties of a Compiler I Correctness of translation Goals: syntactic correctness: conformance to source and target language specifications accept all (and only) syntactically valid input programs produce correct target code semantic correctness: equivalence of source and target code behaviour of target code corresponds to (expected) behaviour of source code Techniques: compiler validation and verification proof-carrying code,... cf. course on Semantics and Verification of Software (WS 2017/18, SS 2019) 13 of 24 Compiler Construction

Aspects of a Compiler Expected Properties of a Compiler II Efficiency of generated code Goal: target code as fast and/or memory efficient as possible 14 of 24 Compiler Construction

Aspects of a Compiler Expected Properties of a Compiler II Efficiency of generated code Goal: target code as fast and/or memory efficient as possible Techniques: program analysis and optimisation cf. course on Static Program Analysis (SS 2018) 14 of 24 Compiler Construction

Aspects of a Compiler Expected Properties of a Compiler II Efficiency of generated code Goal: target code as fast and/or memory efficient as possible Techniques: program analysis and optimisation cf. course on Static Program Analysis (SS 2018) Efficiency of compiler Goal: translation process as fast and/or memory efficient as possible (for input programs of arbitrary size) 14 of 24 Compiler Construction

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

Aspects of a Compiler Expected Properties of a Compiler II Efficiency of generated code Goal: target code as fast and/or memory efficient as possible Techniques: program analysis and optimisation cf. course on Static Program Analysis (SS 2018) Efficiency of compiler Goal: translation process as fast and/or memory efficient as possible (for input programs of arbitrary size) Techniques: 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,...) 15 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 15 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-Qualität, 2nd ed., Springer 2013) 16 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-Qualität, 2nd ed., Springer 2013) 2. How often is the following loop traversed? FORTRAN IV: once Pascal: never for i := 2 to 1 do... 16 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-Qualität, 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 17 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 17 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 17 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 Outline of Lecture 1 Preliminaries What Is a Compiler? Aspects of a Compiler The High-Level View Literature 18 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 19 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 19 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 19 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 19 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 19 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 19 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 Lexical analysis (Scanner) Syntax analysis (Parser) Semantic analysis Generation of intermediate code Code optimisation Generation of target code Target code 20 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 code Code optimisation Generation of target code Target code 20 of 24 Compiler Construction

The High-Level View Conceptual Structure of a Compiler Source code x1 := y2 + 1; Lexical analysis (Scanner) Syntax analysis (Parser) (id, x1)(gets, )(id, y2)(plus, )(int, 1)(sem, ) regular expressions/ finite automata Semantic analysis Generation of intermediate code Code optimisation Generation of target code Target code 20 of 24 Compiler Construction

The High-Level View Conceptual Structure of a Compiler Source code Lexical analysis (Scanner) Syntax analysis (Parser) Semantic analysis (id, x1)(gets, )(id, y2)(plus, )(int, 1)(sem, ) Asg Var Exp Sum context-free grammars/ pushdown automata Generation of intermediate code Var Con Code optimisation Generation of target code Target code 20 of 24 Compiler Construction

The High-Level View Conceptual Structure of a Compiler Source code Lexical analysis (Scanner) Asg Syntax analysis (Parser) Var Exp Semantic analysis Sum Var Con int Var Asg ok Exp int attribute grammars Generation of intermediate code Code optimisation int Var Sum int Con int Generation of target code Target code 20 of 24 Compiler Construction

The High-Level View Conceptual Structure of a Compiler Source code Lexical analysis (Scanner) Syntax analysis (Parser) Asg ok Semantic analysis int Var Exp int Sum int Generation of intermediate code LOAD y2; LIT 1; ADD; STO x1 Code optimisation int Var Con int tree translations Generation of target code Target code 20 of 24 Compiler Construction

The High-Level View Conceptual Structure of a Compiler Source code Lexical analysis (Scanner) Syntax analysis (Parser) Semantic analysis Generation of intermediate code LOAD y2; LIT 1; ADD; STO x1 Code optimisation... Generation of target code... Target code 20 of 24 Compiler Construction

The High-Level View Conceptual Structure of a Compiler Source code Lexical analysis (Scanner) Syntax analysis (Parser) Semantic analysis Generation of intermediate code Code optimisation Generation of target code Target code [omitted: symbol table, error handling] 20 of 24 Compiler Construction

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 21 of 24 Compiler Construction

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 Outline of Lecture 1 Preliminaries What Is a Compiler? Aspects of a Compiler The High-Level View Literature 23 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 24 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