chapter 1. overview j. h. wang sep.15, 2015. outline history of compilation what compilers do...
TRANSCRIPT
![Page 1: Chapter 1. Overview J. H. Wang Sep.15, 2015. Outline History of Compilation What Compilers Do Interpreters Syntax and Semantics Organization of a Compiler](https://reader035.vdocuments.net/reader035/viewer/2022062517/56649e925503460f94b97d70/html5/thumbnails/1.jpg)
Chapter 1. Overview
J. H. WangSep.15, 2015
![Page 2: Chapter 1. Overview J. H. Wang Sep.15, 2015. Outline History of Compilation What Compilers Do Interpreters Syntax and Semantics Organization of a Compiler](https://reader035.vdocuments.net/reader035/viewer/2022062517/56649e925503460f94b97d70/html5/thumbnails/2.jpg)
Outline
• History of Compilation• What Compilers Do• Interpreters• Syntax and Semantics• Organization of a Compiler• Programming Language and Compiler Design• Computer Architecture and Compiler Design• Compiler Design Considerations• Integrated Development Environments
![Page 3: Chapter 1. Overview J. H. Wang Sep.15, 2015. Outline History of Compilation What Compilers Do Interpreters Syntax and Semantics Organization of a Compiler](https://reader035.vdocuments.net/reader035/viewer/2022062517/56649e925503460f94b97d70/html5/thumbnails/3.jpg)
Language Processors
• Translators– Transforming human-oriented
programming languages into computer-oriented machine languages
![Page 4: Chapter 1. Overview J. H. Wang Sep.15, 2015. Outline History of Compilation What Compilers Do Interpreters Syntax and Semantics Organization of a Compiler](https://reader035.vdocuments.net/reader035/viewer/2022062517/56649e925503460f94b97d70/html5/thumbnails/4.jpg)
History of Compilation
• Early compilers– 1950s: by Grace Hopper– Late 1950s: Fortran
• Broad applications– Typesetting: TeX, LaTeX– Portable document representation:
PostScript– Symbolic and numeric problem solving:
Mathematica– VLSI: Verilog, VHDL
![Page 5: Chapter 1. Overview J. H. Wang Sep.15, 2015. Outline History of Compilation What Compilers Do Interpreters Syntax and Semantics Organization of a Compiler](https://reader035.vdocuments.net/reader035/viewer/2022062517/56649e925503460f94b97d70/html5/thumbnails/5.jpg)
What Compilers Do
• Compilers may be distinguished in two ways– By the kind of machine code they
generate– By the format of the target code they
generate
![Page 6: Chapter 1. Overview J. H. Wang Sep.15, 2015. Outline History of Compilation What Compilers Do Interpreters Syntax and Semantics Organization of a Compiler](https://reader035.vdocuments.net/reader035/viewer/2022062517/56649e925503460f94b97d70/html5/thumbnails/6.jpg)
Machine Code Generated by Compilers
• Pure machine code– Only instructions from a particular instruction set
• Without dependence on any software (library, OS)– Rare; mostly used in system implementation languages
• Augmented machine code– Augmented with OS and runtime language support routines
• I/O, storage allocation, mathematical functions• Data transfer, procedure call, and dynamic storage
instructions– More often
• Virtual machine code– Only virtual instructions– Virtual machine
• Pascal P-code• Java bytecodes
– Portability, program size reduction
![Page 7: Chapter 1. Overview J. H. Wang Sep.15, 2015. Outline History of Compilation What Compilers Do Interpreters Syntax and Semantics Organization of a Compiler](https://reader035.vdocuments.net/reader035/viewer/2022062517/56649e925503460f94b97d70/html5/thumbnails/7.jpg)
Bootstrapping
![Page 8: Chapter 1. Overview J. H. Wang Sep.15, 2015. Outline History of Compilation What Compilers Do Interpreters Syntax and Semantics Organization of a Compiler](https://reader035.vdocuments.net/reader035/viewer/2022062517/56649e925503460f94b97d70/html5/thumbnails/8.jpg)
Target Code Formats
• Assembly or other source formats– Easy to scrutinize– Useful for prototyping programming language designs
and cross-compilation
• Relocatable binary– More efficient and more control over the translation
process– External references, local instruction addresses, and
data addressed are not bound• A linkage step is required
• Absolute binary– Faster, but limited ability to interface with other code– Useful for exercises and prototyping
• Compilation costs far exceed execution costs
![Page 9: Chapter 1. Overview J. H. Wang Sep.15, 2015. Outline History of Compilation What Compilers Do Interpreters Syntax and Semantics Organization of a Compiler](https://reader035.vdocuments.net/reader035/viewer/2022062517/56649e925503460f94b97d70/html5/thumbnails/9.jpg)
Interpreters
![Page 10: Chapter 1. Overview J. H. Wang Sep.15, 2015. Outline History of Compilation What Compilers Do Interpreters Syntax and Semantics Organization of a Compiler](https://reader035.vdocuments.net/reader035/viewer/2022062517/56649e925503460f94b97d70/html5/thumbnails/10.jpg)
• Capabilities of interpreters– Programs can be easily modified as execution
proceeds• Interactive debugging
– Dynamic object typing can be easily supported• E.g. Lisp and Scheme
– Significant degree of machine independence
• Drawbacks– Direct interpretation of source programs can
involve significant overhead
![Page 11: Chapter 1. Overview J. H. Wang Sep.15, 2015. Outline History of Compilation What Compilers Do Interpreters Syntax and Semantics Organization of a Compiler](https://reader035.vdocuments.net/reader035/viewer/2022062517/56649e925503460f94b97d70/html5/thumbnails/11.jpg)
Syntax and Semantics
• Syntax: structure– E.g. context-free grammars (CFGs)
• a=b+c is legal, but b+c=a is not
• Semantics: meaning– E.g.
• a=b+c is illegal if any of the variables are undeclared or if b or c is of type Boolean
– Static semantics– Runtime semantics
![Page 12: Chapter 1. Overview J. H. Wang Sep.15, 2015. Outline History of Compilation What Compilers Do Interpreters Syntax and Semantics Organization of a Compiler](https://reader035.vdocuments.net/reader035/viewer/2022062517/56649e925503460f94b97d70/html5/thumbnails/12.jpg)
Static Semantics
• A set of rules that specify which syntactically legal programs are actually valid– E.g.: Identifier declaration, type-
compatibility of operators and operands, proper number of parameters in procedure calls
• Can be specified either formally or informally– E.g.: attribute grammars
![Page 13: Chapter 1. Overview J. H. Wang Sep.15, 2015. Outline History of Compilation What Compilers Do Interpreters Syntax and Semantics Organization of a Compiler](https://reader035.vdocuments.net/reader035/viewer/2022062517/56649e925503460f94b97d70/html5/thumbnails/13.jpg)
An Example of Attribute Grammars
• Production rule:– E -> E+T
• Augmented production rule:– Eresult -> Ev1 + Tv2
• if v1.type=numeric and v2.type=numericthen result.type<-numericelse call ERROR()
– Verbose and tedious
![Page 14: Chapter 1. Overview J. H. Wang Sep.15, 2015. Outline History of Compilation What Compilers Do Interpreters Syntax and Semantics Organization of a Compiler](https://reader035.vdocuments.net/reader035/viewer/2022062517/56649e925503460f94b97d70/html5/thumbnails/14.jpg)
Runtime Semantics• To specify what a program computes
– Can be specified informally• E.g.: program states
– a=1: the state component corresponding to a is changed to 1– Formal approaches
• Natural semantics: operational model– Given assertions before evaluations of a construct, we can
infer assertions that will hold after the construct’s evaluation• Axiomatic semantics: relations or predicates that relate
program variables– E.g.: var <- exp
» var is true after statement execution iff. the predicate obtained by replacing all occurrences of var by exp is true beforehand
– Good for deriving proofs of program correctness; but difficult to use
• Denotational semantics: more mathematical in form– E.g: E[T1+T2]m=E[T1]m+E[T2]m
![Page 15: Chapter 1. Overview J. H. Wang Sep.15, 2015. Outline History of Compilation What Compilers Do Interpreters Syntax and Semantics Organization of a Compiler](https://reader035.vdocuments.net/reader035/viewer/2022062517/56649e925503460f94b97d70/html5/thumbnails/15.jpg)
• Difficulty in semantics: imprecise language specification– E.g.: (in Java)
• public static int subr(int b){ if (b != 0) return b+100;}
• public static int subr(int b){ if (b != 0) return b+100; else if (10*b==0) return 1;}
– The problem of deciding whether a particular statement in a program is reachable is undecidable
• In practice, a trusted reference compiler can serve as a de facto language definition– E.g.: Lisp
![Page 16: Chapter 1. Overview J. H. Wang Sep.15, 2015. Outline History of Compilation What Compilers Do Interpreters Syntax and Semantics Organization of a Compiler](https://reader035.vdocuments.net/reader035/viewer/2022062517/56649e925503460f94b97d70/html5/thumbnails/16.jpg)
Organization of a Compiler
Analysis
Synthesis
![Page 17: Chapter 1. Overview J. H. Wang Sep.15, 2015. Outline History of Compilation What Compilers Do Interpreters Syntax and Semantics Organization of a Compiler](https://reader035.vdocuments.net/reader035/viewer/2022062517/56649e925503460f94b97d70/html5/thumbnails/17.jpg)
The Structure of a Compiler
• Tasks performed by compilers– Analysis of the source program
• Syntax analysis• Semantic analysis
– Synthesis of a target program that, when executed, will correctly perform the computations described by the source program• Code generator • Optimizer
![Page 18: Chapter 1. Overview J. H. Wang Sep.15, 2015. Outline History of Compilation What Compilers Do Interpreters Syntax and Semantics Organization of a Compiler](https://reader035.vdocuments.net/reader035/viewer/2022062517/56649e925503460f94b97d70/html5/thumbnails/18.jpg)
The Scanner
• Reading the input text and grouping individual characters into tokens– Identifiers– Integers– Reserved words– Delimiters
• What the scanner does– It puts the program into a compact and uniform format– It eliminates unneeded information– It processes compiler control directives– It sometimes enters preliminary information into symbol
table– It optionally formats and lists the source program
![Page 19: Chapter 1. Overview J. H. Wang Sep.15, 2015. Outline History of Compilation What Compilers Do Interpreters Syntax and Semantics Organization of a Compiler](https://reader035.vdocuments.net/reader035/viewer/2022062517/56649e925503460f94b97d70/html5/thumbnails/19.jpg)
Lexical Analysis (Scanning)[Aho, Lam, Sethi, Ullman]
• Grouping characters into lexemes• Producing tokens
– (token-name, attribute-value)
• E.g. – position = initial + rate * 60– <id,1> <=> <id,2> <+> <id,3> <*>
<60>
![Page 20: Chapter 1. Overview J. H. Wang Sep.15, 2015. Outline History of Compilation What Compilers Do Interpreters Syntax and Semantics Organization of a Compiler](https://reader035.vdocuments.net/reader035/viewer/2022062517/56649e925503460f94b97d70/html5/thumbnails/20.jpg)
• Regular expressions (Chap. 3) – An effective and powerful approach to
describe tokens– As a specification for automatic
generation of finite automata that recognizes regular sets• Scanner generator
![Page 21: Chapter 1. Overview J. H. Wang Sep.15, 2015. Outline History of Compilation What Compilers Do Interpreters Syntax and Semantics Organization of a Compiler](https://reader035.vdocuments.net/reader035/viewer/2022062517/56649e925503460f94b97d70/html5/thumbnails/21.jpg)
The Parser
• Reading tokens and grouping them into phrases according to the syntax specification such as CFGs– Grammars (Chap. 2 & 4)– Parsing (Chap. 5 & 6)– Parser generator
• It usually builds an Abstract Syntax Tree (AST) as a concise representation of program structure– (Chap. 2 & 7)
![Page 22: Chapter 1. Overview J. H. Wang Sep.15, 2015. Outline History of Compilation What Compilers Do Interpreters Syntax and Semantics Organization of a Compiler](https://reader035.vdocuments.net/reader035/viewer/2022062517/56649e925503460f94b97d70/html5/thumbnails/22.jpg)
Syntax Analysis (Parsing)[Aho, Lam, Sethi, Ullman]
• Creating a tree-like intermediate representation (e.g. syntax tree) that depicts the grammatical structure of the token streams– E.g.– <id,1> <=> <id,2> <+> <id,3> <*>
<60>–
=
<id, 1> +
<id, 2> *
<id, 3> 60
![Page 23: Chapter 1. Overview J. H. Wang Sep.15, 2015. Outline History of Compilation What Compilers Do Interpreters Syntax and Semantics Organization of a Compiler](https://reader035.vdocuments.net/reader035/viewer/2022062517/56649e925503460f94b97d70/html5/thumbnails/23.jpg)
The Type Checker (Semantic Analysis)
• Checking the static semantics of each AST node– If the construct is semantically correct,
the type checker decorates the AST node by adding type information to it
– Otherwise, a suitable error message is issued
![Page 24: Chapter 1. Overview J. H. Wang Sep.15, 2015. Outline History of Compilation What Compilers Do Interpreters Syntax and Semantics Organization of a Compiler](https://reader035.vdocuments.net/reader035/viewer/2022062517/56649e925503460f94b97d70/html5/thumbnails/24.jpg)
Semantic Analysis[Aho, Lam, Sethi, Ullman]
• Type checking• Type conversions or coercions• E.g.
– =
<id, 1> +
<id, 2> *
<id, 3>
60
int2float
![Page 25: Chapter 1. Overview J. H. Wang Sep.15, 2015. Outline History of Compilation What Compilers Do Interpreters Syntax and Semantics Organization of a Compiler](https://reader035.vdocuments.net/reader035/viewer/2022062517/56649e925503460f94b97d70/html5/thumbnails/25.jpg)
Translator (Program Synthesis)
• Translating AST nodes into Intermediate Representation (IR) code– E.g. while loops -> two subtrees: expression,
body
• It’s largely dictated by the semantics of the source language
• In simple, nonoptimizing compilers, the translator may generate target code directly
• More elaborate compilers such as GCC may first generate a high-level IR and then translate it into a low-level IR
![Page 26: Chapter 1. Overview J. H. Wang Sep.15, 2015. Outline History of Compilation What Compilers Do Interpreters Syntax and Semantics Organization of a Compiler](https://reader035.vdocuments.net/reader035/viewer/2022062517/56649e925503460f94b97d70/html5/thumbnails/26.jpg)
Intermediate Code Generation
[Aho, Lam, Sethi, Ullman]• Generating a low-level intermediate
representation– It should be easy to produce– It should be easy to translate into the
target machine– E.g. three-address code (in Chap. 6)
• t1 = int2float(60)t2 = id3 * t1t3 = id2 + t2id1 = t3
![Page 27: Chapter 1. Overview J. H. Wang Sep.15, 2015. Outline History of Compilation What Compilers Do Interpreters Syntax and Semantics Organization of a Compiler](https://reader035.vdocuments.net/reader035/viewer/2022062517/56649e925503460f94b97d70/html5/thumbnails/27.jpg)
Symbol Tables
• A mechanism that allows information to be associated with identifiers and shared among compiler phases– Identifier declaration– Identifier use– Type checking
![Page 28: Chapter 1. Overview J. H. Wang Sep.15, 2015. Outline History of Compilation What Compilers Do Interpreters Syntax and Semantics Organization of a Compiler](https://reader035.vdocuments.net/reader035/viewer/2022062517/56649e925503460f94b97d70/html5/thumbnails/28.jpg)
Symbol Table Management[Aho, Lam, Sethi, Ullman]
• To record the variable names and collect information about various attributes of each name– Storage, type, scope– Number and types of arguments,
method of argument passing, and the type returned
Name Type
position …
initial …
rate …
![Page 29: Chapter 1. Overview J. H. Wang Sep.15, 2015. Outline History of Compilation What Compilers Do Interpreters Syntax and Semantics Organization of a Compiler](https://reader035.vdocuments.net/reader035/viewer/2022062517/56649e925503460f94b97d70/html5/thumbnails/29.jpg)
The Optimizer
• Analyzing and transforming the IR code generated by the translator into functionally equivalent but improved code– Complex– Optimizations may be performed in stages
• Optimization can also be done after code generation– E.g. peephole optimization: a few instructions at a time
• Multiplications by 1• Additions of 0• Loading a value into register when it’s already in another
register• Replacing a sequence of instructions by a single instruction
with the same effect
![Page 30: Chapter 1. Overview J. H. Wang Sep.15, 2015. Outline History of Compilation What Compilers Do Interpreters Syntax and Semantics Organization of a Compiler](https://reader035.vdocuments.net/reader035/viewer/2022062517/56649e925503460f94b97d70/html5/thumbnails/30.jpg)
Code Optimization[Aho, Lam, Sethi, Ullman]
• Attempts to improve the intermediate code– Better: faster, shorter code, or code that
consumes less power– E.g.
• t1 = id3 * 60.0id1 = id2 + t1
![Page 31: Chapter 1. Overview J. H. Wang Sep.15, 2015. Outline History of Compilation What Compilers Do Interpreters Syntax and Semantics Organization of a Compiler](https://reader035.vdocuments.net/reader035/viewer/2022062517/56649e925503460f94b97d70/html5/thumbnails/31.jpg)
The Code Generator
• Mapping the IR code generated by the translator into target machine code– Machine-dependent, complex
• Register allocation• Code scheduling
• Automatic construction of code generators has been actively studied– Matching a low-level IR to target-instruction
templates– This makes it easy to retarget a compiler to
a new target machine• E.g. GCC
![Page 32: Chapter 1. Overview J. H. Wang Sep.15, 2015. Outline History of Compilation What Compilers Do Interpreters Syntax and Semantics Organization of a Compiler](https://reader035.vdocuments.net/reader035/viewer/2022062517/56649e925503460f94b97d70/html5/thumbnails/32.jpg)
Code Generation[Aho, Lam, Sethi, Ullman]
• Mapping intermediate representation of the source program into the target language– Machine code: register/memory location
assignments– E.g.
• LDF R2, id3MULF R2, R2, #60.0LDF R1, id2ADDF R1, R1, R2STF id1, R1
![Page 33: Chapter 1. Overview J. H. Wang Sep.15, 2015. Outline History of Compilation What Compilers Do Interpreters Syntax and Semantics Organization of a Compiler](https://reader035.vdocuments.net/reader035/viewer/2022062517/56649e925503460f94b97d70/html5/thumbnails/33.jpg)
Phases of a Compiler [Aho, Lam, Sethi, Ullman]
Syntax Analyzer
character stream
target machine code
Lexical Analyzer
Intermediate Code Generator
Code Generator
token stream
syntax tree
intermediate representation
SymbolTable
Semantic Analyzer
syntax treeMachine-Independent
Code Optimization
Machine-Dependent Code Optimization
(optional)
(optional)
![Page 34: Chapter 1. Overview J. H. Wang Sep.15, 2015. Outline History of Compilation What Compilers Do Interpreters Syntax and Semantics Organization of a Compiler](https://reader035.vdocuments.net/reader035/viewer/2022062517/56649e925503460f94b97d70/html5/thumbnails/34.jpg)
Compiler Writing Tools
• Compiler generators (compiler compilers)– Scanner generator– Parser generator– Symbol table manager– Attribute grammar evaluator– Code-generation tools
• Much of the effort in crafting a compiler lies in writing and debugging the semantic phases– Usually hand-coded
![Page 35: Chapter 1. Overview J. H. Wang Sep.15, 2015. Outline History of Compilation What Compilers Do Interpreters Syntax and Semantics Organization of a Compiler](https://reader035.vdocuments.net/reader035/viewer/2022062517/56649e925503460f94b97d70/html5/thumbnails/35.jpg)
Programming Language and Compiler Design
• Many compiler techniques arise from the need to cope with some programming language construct
• The state of the art in compiler design also strongly affects programming language design
• The advantages of a programming language that’s easy to compile: – Easier to learn, read, understand– Have quality compilers on a wide variety of machines– Better code will be generated– Fewer compiler bugs– The compiler will be smaller, cheaper, faster, more
reliable, and more widely used– Better diagnostic messages and program development
tools
![Page 36: Chapter 1. Overview J. H. Wang Sep.15, 2015. Outline History of Compilation What Compilers Do Interpreters Syntax and Semantics Organization of a Compiler](https://reader035.vdocuments.net/reader035/viewer/2022062517/56649e925503460f94b97d70/html5/thumbnails/36.jpg)
Computer Architecture and Compiler Design
• Compiler designers are responsible for making computing capability available to programmers
• Problems– Instruction sets for some popular architectures are highly
nonuniform– High-level programming language operations are not
always easy to support– Essential architectural features such as hardware caches
and distributed processors and memory are difficult to present to programmers in an architecturally independent manner
– Effective use of a large number of processors has always posed challenges to application developers and compiler writers
– For some programming languages, runtime checks for data and program integrity are dropped in favor of gains in execution speed
![Page 37: Chapter 1. Overview J. H. Wang Sep.15, 2015. Outline History of Compilation What Compilers Do Interpreters Syntax and Semantics Organization of a Compiler](https://reader035.vdocuments.net/reader035/viewer/2022062517/56649e925503460f94b97d70/html5/thumbnails/37.jpg)
Compiler Design Considerations
• Debugging (development) compilers– Detailing programmer errors– E.g. CodeCenter– It can often tolerate or repair minor errors (e.g. inserting a
missing comma or parenthesis)• Optimizing compilers (Chap. 13 & 14)
– Producing efficient target code at the cost of increased compiler complexity and increased compilation times
– Optimal code, even when theoretically possible, is often infeasible in practice
– A variety of transformations might interfere with each other• Retargetable compilers (Chap. 11 & 13)
– Target architecture can be changed without its machine-independent components having to be rewritten
– More difficult to write, but development costs can be shared
![Page 38: Chapter 1. Overview J. H. Wang Sep.15, 2015. Outline History of Compilation What Compilers Do Interpreters Syntax and Semantics Organization of a Compiler](https://reader035.vdocuments.net/reader035/viewer/2022062517/56649e925503460f94b97d70/html5/thumbnails/38.jpg)
Integrated Development Environments
• To integrate program development cycle into a single framework– Editing, compilation, testing, debugging
• Immediate feedback on syntax and semantic problems
• Focus on source program• Providing easy access to information about the
program• Many of the techniques in batch compilation can be
reformulated into incremental form to support IDEs– Parser, type checker, …
• In this book, we concentrate on the translation of C, C++, Java
![Page 39: Chapter 1. Overview J. H. Wang Sep.15, 2015. Outline History of Compilation What Compilers Do Interpreters Syntax and Semantics Organization of a Compiler](https://reader035.vdocuments.net/reader035/viewer/2022062517/56649e925503460f94b97d70/html5/thumbnails/39.jpg)
End of Chapter 1
• Any Questions or Comments?