{[ promptMessage ]}

Bookmark it

{[ promptMessage ]}

basics_of_compiler_design - Basics of Compiler Design...

Info iconThis preview shows pages 1–6. Sign up to view the full content.

View Full Document Right Arrow Icon
Basics of Compiler Design Torben Ægidius Mogensen DIKU University of Copenhagen
Background image of page 1

Info iconThis preview has intentionally blurred sections. Sign up to view the full version.

View Full Document Right Arrow Icon
Publishing address: DIKU University of Copenhagen Universitetsparken 1 DK-2100 Copenhagen DENMARK c Torben Ægidius Mogensen 2000 – 2007 [email protected] Book homepage: http://www.diku.dk/˜torbenm/Basics First published 2000 This edition: April 10, 2007
Background image of page 2
Contents 1 Introduction 13 1.1 What is a compiler? . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.2 The phases of a compiler . . . . . . . . . . . . . . . . . . . . . . 14 1.3 Interpreters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 1.4 Why learn about compilers? . . . . . . . . . . . . . . . . . . . . 16 1.5 The structure of this book . . . . . . . . . . . . . . . . . . . . . . 17 1.6 To the lecturer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 1.7 Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . . 19 1.8 Permission to use . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2 Lexical Analysis 21 2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.2 Regular expressions . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.2.1 Shorthands . . . . . . . . . . . . . . . . . . . . . . . . . 24 2.2.2 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2.3 Nondeterministic finite automata . . . . . . . . . . . . . . . . . . 27 2.4 Converting a regular expression to an NFA . . . . . . . . . . . . . 30 2.4.1 Optimisations . . . . . . . . . . . . . . . . . . . . . . . . 30 2.5 Deterministic finite automata . . . . . . . . . . . . . . . . . . . . 32 2.6 Converting an NFA to a DFA . . . . . . . . . . . . . . . . . . . . 34 2.6.1 Solving set equations . . . . . . . . . . . . . . . . . . . . 35 2.6.2 The subset construction . . . . . . . . . . . . . . . . . . . 37 2.7 Size versus speed . . . . . . . . . . . . . . . . . . . . . . . . . . 40 2.8 Minimisation of DFAs . . . . . . . . . . . . . . . . . . . . . . . 41 2.8.1 Example . . . . . . . . . . . . . . . . . . . . . . . . . . 42 2.8.2 Dead states . . . . . . . . . . . . . . . . . . . . . . . . . 45 2.9 Lexers and lexer generators . . . . . . . . . . . . . . . . . . . . . 46 2.9.1 Lexer generators . . . . . . . . . . . . . . . . . . . . . . 51 2.10 Properties of regular languages . . . . . . . . . . . . . . . . . . . 52 2.10.1 Relative expressive power . . . . . . . . . . . . . . . . . 53 2.10.2 Limits to expressive power . . . . . . . . . . . . . . . . . 54 3
Background image of page 3

Info iconThis preview has intentionally blurred sections. Sign up to view the full version.

View Full Document Right Arrow Icon
4 CONTENTS 2.10.3 Closure properties . . . . . . . . . . . . . . . . . . . . . 55 2.11 Further reading . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 3 Syntax Analysis 63 3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 3.2 Context-free grammars . . . . . . . . . . . . . . . . . . . . . . . 64 3.2.1 How to write context free grammars . . . . . . . . . . . . 66 3.3 Derivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 3.3.1 Syntax trees and ambiguity . . . . . . . . . . . . . . . . . 70 3.4 Operator precedence . . . . . . . . . . . . . . . . . . . . . . . . 72 3.4.1 Rewriting ambiguous expression grammars . . . . . . . . 74 3.5 Other sources of ambiguity . . . . . . . . . . . . . . . . . . . . . 76 3.6 Syntax analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 3.7 Predictive parsing . . . . . . . . . . . . . . . . . . . . . . . . . . 78 3.8 Nullable and FIRST . . . . . . . . . . . . . . . . . . . . . . . . . 79 3.9 Predictive parsing revisited . . . . . . . . . . . . . . . . . . . . . 82 3.10 FOLLOW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 3.11 LL(1) parsing . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 3.11.1 Recursive descent . . . . . . . . . . . . . . . . . . . . . . 86 3.11.2 Table-driven LL(1) parsing . . . . . . . . . . . . . . . . . 87 3.11.3 Conflicts . . . . . . . . . . . . . . . . . . . . . . . . . . 88 3.12 Rewriting a grammar for LL(1) parsing . . . . . . . . . . . . . . 90 3.12.1 Eliminating left-recursion . . . . . . . . . . . . . . . . . 90 3.12.2 left-factorisation . . . . . . . . . . . . . . . . . . . . . . 92 3.12.3 Construction of LL(1) parsers summarized . . . . . . . . 93 3.13 SLR parsing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 3.14 Constructing SLR parse tables . . . . . . . . . . . . . . . . . . . 95 3.14.1 Conflicts in SLR parse-tables . . . . . . . . . . . . . . . 100 3.15 Using precedence rules in LR parse tables . . . . . . . . . . . . . 101 3.16 Using LR-parser generators . . . . . . . . . . . . . . . . . . . . . 103 3.16.1 Declarations and actions . . . . . . . . . . . . . . . . . . 103 3.16.2 Abstract syntax . . . . . . . . . . . . . . . . . . . . . . . 104 3.16.3 Conflict handling in parser generators . . . . . . . . . . . 107 3.17 Properties of context-free languages . . . . . . . . . . . . . . . . 108 3.18 Further reading . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 4 Symbol Tables 117 4.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 4.2 Symbol tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 4.2.1 Implementation of symbol tables . . . . . . . . . . . . . . 118
Background image of page 4
CONTENTS 5 4.2.2 Simple persistent symbol tables . . . . . . . . . . . . . . 119 4.2.3 A simple imperative symbol table . . . . . . . . . . . . . 120 4.2.4 Efficiency issues . . . . . . . . . . . . . . . . . . . . . . 120 4.2.5 Shared or separate name spaces . . . . . . . . . . . . . . 121 4.3 Further reading . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 5 Type Checking 123 5.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 5.2 Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 5.3 A small example language . . . . . . . . . . . . . . . . . . . . . 124 5.4 Environments for type checking . . . . . . . . . . . . . . . . . . 124 5.5 Type-checking expressions . . . . . . . . . . . . . . . . . . . . . 126 5.6 Type checking of function declarations . . . . . . . . . . . . . . . 128 5.7 Type-checking a program . . . . . . . . . . . . . . . . . . . . . . 129 5.8 Advanced type checking . . . . . . . . . . . . . . . . . . . . . . 130 5.9 Further reading . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 6 Intermediate Code Generation 135 6.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 6.2 Choosing an intermediate language . . . . . . . . . . . . . . . . . 136 6.3 The intermediate language . . . . . . . . . . . . . . . . . . . . . 138 6.4 Generating code from expressions . . . . . . . . . . . . . . . . . 139 6.4.1 Examples of translation . . . . . . . . . . . . . . . . . . . 143 6.5 Translating statements . . . . . . . . . . . . . . . . . . . . . . . 143 6.6 Logical operators . . . . . . . . . . . . . . . . . . . . . . . . . . 146 6.6.1 Sequential logical operators . . . . . . . . . . . . . . . . 147 6.7 Advanced control statements . . . . . . . . . . . . . . . . . . . . 150 6.8 Translating structured data . . . . . . . . . . . . . . . . . . . . . 152 6.8.1 Floating-point values . . . . . . . . . . . . . . . . . . . . 152 6.8.2
Background image of page 5

Info iconThis preview has intentionally blurred sections. Sign up to view the full version.

View Full Document Right Arrow Icon
Image of page 6
This is the end of the preview. Sign up to access the rest of the document.

{[ snackBarMessage ]}