Overview of Compilation
description
Transcript of Overview of Compilation
![Page 1: Overview of Compilation](https://reader035.fdocuments.us/reader035/viewer/2022070404/56813abf550346895da2cbc3/html5/thumbnails/1.jpg)
Overview of Compilation
Prepared by
Manuel E. Bermúdez, Ph.D.Associate ProfessorUniversity of Florida
Programming Language ConceptsLecture 2
![Page 2: Overview of Compilation](https://reader035.fdocuments.us/reader035/viewer/2022070404/56813abf550346895da2cbc3/html5/thumbnails/2.jpg)
Overview of Translation
• Definition: A translator is an algorithm that converts source programs into equivalent target programs.
• Definition: A compiler is a translator whose target language is at a “lower” level than its source language.
TranslatorSource Target
![Page 3: Overview of Compilation](https://reader035.fdocuments.us/reader035/viewer/2022070404/56813abf550346895da2cbc3/html5/thumbnails/3.jpg)
Overview of Translation (cont’d)
• When is one language’s level “lower” than another’s?
• Definition: An interpreter is an algorithm that simulates the execution of programs written in a given source language.
InterpreterSource
input
output
![Page 4: Overview of Compilation](https://reader035.fdocuments.us/reader035/viewer/2022070404/56813abf550346895da2cbc3/html5/thumbnails/4.jpg)
Overview of Translation (cont’d)
• Definition: An implementation of a programming language consists of a translator (or compiler) for that language, and an interpreter for the corresponding target language.
InterpreterTarget
input
output
CompilerSource
![Page 5: Overview of Compilation](https://reader035.fdocuments.us/reader035/viewer/2022070404/56813abf550346895da2cbc3/html5/thumbnails/5.jpg)
Translation
• A source program may be translated an arbitrary number of times before the target program is generated.
Translator1
Source
Translator2
TranslatorN
Target
...
![Page 6: Overview of Compilation](https://reader035.fdocuments.us/reader035/viewer/2022070404/56813abf550346895da2cbc3/html5/thumbnails/6.jpg)
Translation (cont’d)
• Each of these translations is called a phase, not to be confused with a pass, i.e., a disk dump.
Q: How should a compiler be divided into phases?
A: So that each phase can be easily described by some formal model of computation, and so the phase can be carried out efficiently.
![Page 7: Overview of Compilation](https://reader035.fdocuments.us/reader035/viewer/2022070404/56813abf550346895da2cbc3/html5/thumbnails/7.jpg)
Translation (cont’d)
Q: How is a compiler usually divided?A: Two major phases, with many possibilities
for subdivision.• Phase 1: Analysis (determine correctness)• Phase 2: Synthesis (produce target code)
• Another criterion:• Phase 1: Syntax (form).• Phase 2: Semantics (meaning).
![Page 8: Overview of Compilation](https://reader035.fdocuments.us/reader035/viewer/2022070404/56813abf550346895da2cbc3/html5/thumbnails/8.jpg)
Typical Compiler Breakdown
• Scanning (Lexical analysis).• Goal: Group sequences of characters
that occur on the source, into logical atomic units called tokens.
• Examples of tokens: Identifiers, keywords, integers, strings, punctuation marks, “white spaces”, end-of-line characters, comments, etc., …
Scanner (Lexical analysis)
Source
Sequence of Tokens
![Page 9: Overview of Compilation](https://reader035.fdocuments.us/reader035/viewer/2022070404/56813abf550346895da2cbc3/html5/thumbnails/9.jpg)
Lexical Analysis
• Must deal with end-of-line and end-of-file characters.
• A preliminary classification of tokens is made. For example, both ‘program’ and ‘Ex’ are classified as Identifier.
• Someone must give unambiguous rules for forming tokens.
![Page 10: Overview of Compilation](https://reader035.fdocuments.us/reader035/viewer/2022070404/56813abf550346895da2cbc3/html5/thumbnails/10.jpg)
![Page 11: Overview of Compilation](https://reader035.fdocuments.us/reader035/viewer/2022070404/56813abf550346895da2cbc3/html5/thumbnails/11.jpg)
Screening
• Goals:• Remove unwanted tokens.• Classify keywords.• Merge/simplify tokens.
Screener
Sequence of Tokens
Sequence of Tokens
![Page 12: Overview of Compilation](https://reader035.fdocuments.us/reader035/viewer/2022070404/56813abf550346895da2cbc3/html5/thumbnails/12.jpg)
Screening
• Keywords recognized.• White spaces (and comments) discarded.• The screener acts as an interface between
the scanner and the next phase, the parser.
![Page 13: Overview of Compilation](https://reader035.fdocuments.us/reader035/viewer/2022070404/56813abf550346895da2cbc3/html5/thumbnails/13.jpg)
![Page 14: Overview of Compilation](https://reader035.fdocuments.us/reader035/viewer/2022070404/56813abf550346895da2cbc3/html5/thumbnails/14.jpg)
Parsing (Syntax Analysis)
• Goals• To group together the tokens, into
the correct syntactic structures, if possible.
• To determine whether the tokens appear in patterns that syntactically correct.
![Page 15: Overview of Compilation](https://reader035.fdocuments.us/reader035/viewer/2022070404/56813abf550346895da2cbc3/html5/thumbnails/15.jpg)
Parsing (Syntax Analysis)
• Syntactic structures:• Expressions• Statements• Procedures• Functions• Modules
• Methodology:• Use “re-write” rules (a.k.a. BNF).
![Page 16: Overview of Compilation](https://reader035.fdocuments.us/reader035/viewer/2022070404/56813abf550346895da2cbc3/html5/thumbnails/16.jpg)
String-To-Tree Transduction
• Goal: To build a “syntax tree” from the sequence of rewrite rules. The tree will be the functional representation of the source.
• Method: Build tree “bottom-up,” as the rewrite rules are emitted. Use a stack of trees.
![Page 17: Overview of Compilation](https://reader035.fdocuments.us/reader035/viewer/2022070404/56813abf550346895da2cbc3/html5/thumbnails/17.jpg)
![Page 18: Overview of Compilation](https://reader035.fdocuments.us/reader035/viewer/2022070404/56813abf550346895da2cbc3/html5/thumbnails/18.jpg)
Contextual Constraint Analysis
• Goal: To analyze static semantics, e.g.,• Are variables declared before they are used?• Is there assignment compatibility?
e.g., a:=3• Is there operator type compatibility?
e.g., a+3• Do actual and formal parameter types match?
e.g. int f(int n, char c) {…} ...
f('x', 3); • Enforcement of scope rules.
![Page 19: Overview of Compilation](https://reader035.fdocuments.us/reader035/viewer/2022070404/56813abf550346895da2cbc3/html5/thumbnails/19.jpg)
Contextual Constraint Analysis
• Method: Traverse the tree recursively, deducing type information at the bottom, and passing it up.
– Make use of a DECLARATION TABLE, to record information about names.
– “Decorate” tree with reference information.
![Page 20: Overview of Compilation](https://reader035.fdocuments.us/reader035/viewer/2022070404/56813abf550346895da2cbc3/html5/thumbnails/20.jpg)
![Page 21: Overview of Compilation](https://reader035.fdocuments.us/reader035/viewer/2022070404/56813abf550346895da2cbc3/html5/thumbnails/21.jpg)
Example
Chronologically,1. Enter x into the DCLN table, with its type.2. Check type compatibility for x=5.3. X2 not declared!4. Verify type of ’>’ is boolean.5. Check type compatibility for ‘+’.6. Check type compatibility between x and
int, for assignment.
![Page 22: Overview of Compilation](https://reader035.fdocuments.us/reader035/viewer/2022070404/56813abf550346895da2cbc3/html5/thumbnails/22.jpg)
Code Generation
• Goal: Convert syntax tree to target code.
Target code could be:• Machine language.• Assembly language.• Quadruples for a fictional machine:
• label• opcode• operands (1 or 2)
![Page 23: Overview of Compilation](https://reader035.fdocuments.us/reader035/viewer/2022070404/56813abf550346895da2cbc3/html5/thumbnails/23.jpg)
Code Generation
• Example: • “pc” on UNIX generates assembly code• “pi” on UNIX generates code for the “p”
machine, which is interpreted by… an interpreter.
• pc: slow compilation, fast running code.• pi: fast compilation, slow running code.
• Method: Traverse the tree again.
![Page 24: Overview of Compilation](https://reader035.fdocuments.us/reader035/viewer/2022070404/56813abf550346895da2cbc3/html5/thumbnails/24.jpg)
Code (for a stack machine)
LOAD 5STORE X
LOAD XLOAD 10BGTCOND L1 L2
L1 LOAD XLOAD 1BADDSTORE XGOTO L3
L2 . . .L3
![Page 25: Overview of Compilation](https://reader035.fdocuments.us/reader035/viewer/2022070404/56813abf550346895da2cbc3/html5/thumbnails/25.jpg)
Code Optimization
• Goals:• Reduce the size of the target program.• Decrease the running time of the target.
• Note: “Optimization” is a misnomer. Code improvement would be better.
• Two types of optimization:• Peephole optimization (local).• Global optimization (improve loops, etc.).
![Page 26: Overview of Compilation](https://reader035.fdocuments.us/reader035/viewer/2022070404/56813abf550346895da2cbc3/html5/thumbnails/26.jpg)
Code Optimization (cont’d)
• Example (from previous slide):
LOAD 5 can be LOAD 5
STORE X replaced STND X
LOAD X with
Store non-destructively, i.e., store in X, but do not destroy value on top of stack.
![Page 27: Overview of Compilation](https://reader035.fdocuments.us/reader035/viewer/2022070404/56813abf550346895da2cbc3/html5/thumbnails/27.jpg)
Summary
Parser
Source
Constrainer
Code Generator
Code (for an abstract machine)
Interpreter
Screener
Scanner
Input Output
Table Routines
Error Routines
Tokens
Tokens
Tree
Tree
![Page 28: Overview of Compilation](https://reader035.fdocuments.us/reader035/viewer/2022070404/56813abf550346895da2cbc3/html5/thumbnails/28.jpg)
Overview of Compilation
Prepared by
Manuel E. Bermúdez, Ph.D.Associate ProfessorUniversity of Florida
Programming Language ConceptsLecture 2