3/24/2004 COSC4301 assignment 3 1 Compiler, Interpreter, and Bootstrapping Motivation: When we are asked to write a Compiler for a complex source language or Interpreter for a low level intermediate language or Emulator for a new virtual machine Our strategy?
27
Embed
3/24/2004COSC4301 assignment 31 Compiler, Interpreter, and Bootstrapping Motivation: When we are asked to write a Compiler for a complex source language.
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
3/24/2004 COSC4301 assignment 3 1
Compiler, Interpreter, and Bootstrapping
Motivation:When we are asked to write a
Compiler for a complex source language or Interpreter for a low level intermediate
language or Emulator for a new virtual machine
Our strategy?
3/24/2004 COSC4301 assignment 3 2
Motivation continued
Strategy:
o machine code VS high level language
o scratch VS improve existing code
We introduce some basic concepts and give
some examples to make stuff clear.
3/24/2004 COSC4301 assignment 3 3
Terminology
• Q: Which programming languages play a role in this picture?
input translator output
source program expressed in the target
(expressed in the implementation language
source language) language
3/24/2004 COSC4301 assignment 3 4
Tombstone Diagram
Program P implemented in L
LP S -> T
L
Translator implemented in L
M
Machine implemented in hardware
ML
Language interpreter in L
3/24/2004 COSC4301 assignment 3 5
Tombstone diagram: Combination rules
M
MP
SP P
TS -> T
M
M
LP
S -> T
MM
LP
ok ok
Wrong!Wrong!
3/24/2004 COSC4301 assignment 3 6
Compiler Basics
Host compiler and Cross compiler:Host compiler and Cross compiler:
3/24/2004 COSC4301 assignment 3 7
Compiler Basics continued• Two stage compiler:
• Compile a translator implemented in high level language:
Output of the first compiler is the input of the second one
3/24/2004 COSC4301 assignment 3 8
Interpreter
• A language process accept source code and executes it directly
3/24/2004 COSC4301 assignment 3 9
Interpreters versus Compilers• Each faction hold the inverted set of advantages against
the other.• This part covered in previous presentation.• A comprise exists between two extremes to achieve
reasonable compilation and acceptable run time performance.
• Define an intermediate language
more high-level than machine code => easier to compile to
more low-level than source language => easy to implement as an interpreter
3/24/2004 COSC4301 assignment 3 10
Interpretive CompilersHybrid of compilation and interpretationPascal/Java 2-stage compiler is good examplescompile source into machine independent low-level representation P-code/Byte codeinterpret P-code through machine dependent interpreter/JVM
Machine independent Machine dependent
3/24/2004 COSC4301 assignment 3 11
Portable Compilers
JVMM
Java->JVM
JVM
JVMM
Java->JVM
M
For ideal portability, compilers areFor ideal portability, compilers are
. developed in modules for easy exchange.. developed in modules for easy exchange.
. implemented in high level language.. implemented in high level language.
Given 2 kits, which one is more portable?Given 2 kits, which one is more portable?
k1
k2
3/24/2004 COSC4301 assignment 3 12
Portable Compilers continued
Suppose we have following modules (high level).
We have no way to run Pascal program, why?
3/24/2004 COSC4301 assignment 3 13
Portable Compilers continue
• We need a interpreter
re-implement
We can expect a fairly easy implantation using high level language implementation
3/24/2004 COSC4301 assignment 3 14
Portable Compilers continued
• Now, we can run our Pascal program smoothly
• Note here interpreter plays a dual role in both compiling and execution.
3/24/2004 COSC4301 assignment 3 15
Bootstrapping
• a number of techniques which rely on partial/inefficient compiler version to create a full/better version
• often compiling a translator expressed in its own language
3/24/2004 COSC4301 assignment 3 16
Full Bootstrapping
• A full bootstrap is necessary when we are building a new compiler from scratch.
• Example:• We want to implement an Ada compiler for
machine M. We don’t currently have access to any Ada compiler (not on M, nor on any other machine).
• Idea: Ada is very large, we will implement the compiler in a subset of Ada and bootstrap it from a subset of Ada compiler in another language. (e.g. C)
3/24/2004 COSC4301 assignment 3 17
Full Bootstrapping continued
• Step 1: build a compiler for Ada-S in another language
Ada-S ->M
C
v1
Ada-S ->M
C
v1
Step 1a: build a compiler (v1) for Ada-S in another language.
3/24/2004 COSC4301 assignment 3 18
Full bootstrapping continued
Ada-S ->MC
v1
MAda-S->M
v1
Step 1b: Compile v1 compiler on M
M
C->MM
This compiler can be used for bootstrapping on machine M but we do not want to rely on it permanently!
3/24/2004 COSC4301 assignment 3 19
Full Bootstrapping continued
Ada-S ->M
Ada-S
v2
Step 2a: Implement v2 of Ada-S compiler in Ada-S
Ada-S ->M
Ada-S
v2
M
M
Ada-S->Mv2
Step 2b: Compile v2 compiler with v1 compiler
Ada-S ->M
M
v1
We are now no longer dependent on the availability of a C compiler!
3/24/2004 COSC4301 assignment 3 20
Full Bootstrapping continued
Step 3a: Build a full Ada compiler in Ada-S
Ada->M
Ada-S
v3
Step 3b: Compile with v2 compiler
M
Ada->Mv3
Ada-S ->M
M
v2Ada->M
Ada-S
v3
M
From this point on we can maintain the compiler in Ada. Subsequent versions v4,v5,... of the compiler in Ada and compile each with the the previous version.
3/24/2004 COSC4301 assignment 3 21
Half BootstrappingWe discussed full bootstrapping which is required when we have no access to a compiler for our language at all.
Q: What if we have access to an compiler for our language on a different machine HM but want to develop one for TM ?
Ada->HM
HM
Ada->HM
Ada
Ada->TM
TM
We have We want
Idea: we can use cross compilation from HM to TM to bootstrap the TM compiler
3/24/2004 COSC4301 assignment 3 22
Half Bootstrapping continued
Step 1: Implement Ada->TM compiler in Ada
Ada->TM
Ada
Step 2: Compile on HM
Ada->TM
Ada
HM
Ada->HM
HM
Ada->TM Cross compiler: running on HM but
emits TM codeHM
3/24/2004 COSC4301 assignment 3 23
Half Bootstrapping continued
Step 3: Cross compile our TM compiler.
Ada->TM
Ada Ada->TM
HM
HM
TMDONE!
From now on we can develop subsequent versions of the compiler completely on TM
Ada->TM
3/24/2004 COSC4301 assignment 3 24
Bootstrap to improve efficiency
The efficiency of programs and compilers:Efficiency of programs:
- memory usage- runtime
Efficiency of compilers: - Efficiency of the compiler itself- Efficiency of the emitted code
Idea: We start from a simple compiler (generating inefficient code) and develop more sophisticated version of it. We can then use bootstrapping to improve performance of the compiler.
3/24/2004 COSC4301 assignment 3 25
Bootstrap to improve efficiency
Ada->Mslow
Ada
Ada-> Mslow
Mslow
Ada->Mfast
Ada
Ada->Mfast
Ada
M
Ada->Mfast
Mslow
Step 1
Ada-> Mslow
Mslow
We have We want
3/24/2004 COSC4301 assignment 3 26
Bootstrap to improve efficiency
Step 2 Ada->Mfast
Ada
M
Ada->Mfast
MfastAda-> Mfast
Mslow
Fast compiler that emits fast code!
3/24/2004 COSC4301 assignment 3 27
Conclusion
• To write a good compiler you may be writing several simpler ones first
• You have to think about the source language, the target language and the implementation language.
• The work of a compiler writer is never finished, there is always version 1.x and version 2.0 and …