Top Banner
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

3/24/2004COSC4301 assignment 31 Compiler, Interpreter, and Bootstrapping Motivation: When we are asked to write a Compiler for a complex source language.

Dec 23, 2015

Download

Documents

Joan Harrell
Welcome message from author
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
Page 1: 3/24/2004COSC4301 assignment 31 Compiler, Interpreter, and Bootstrapping Motivation: When we are asked to write a  Compiler for a complex source language.

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?

Page 2: 3/24/2004COSC4301 assignment 31 Compiler, Interpreter, and Bootstrapping Motivation: When we are asked to write a  Compiler for a complex source language.

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.

Page 3: 3/24/2004COSC4301 assignment 31 Compiler, Interpreter, and Bootstrapping Motivation: When we are asked to write a  Compiler for a complex source language.

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

Page 4: 3/24/2004COSC4301 assignment 31 Compiler, Interpreter, and Bootstrapping Motivation: When we are asked to write a  Compiler for a complex source 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

Page 5: 3/24/2004COSC4301 assignment 31 Compiler, Interpreter, and Bootstrapping Motivation: When we are asked to write a  Compiler for a complex source language.

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!

Page 6: 3/24/2004COSC4301 assignment 31 Compiler, Interpreter, and Bootstrapping Motivation: When we are asked to write a  Compiler for a complex source language.

3/24/2004 COSC4301 assignment 3 6

Compiler Basics

Host compiler and Cross compiler:Host compiler and Cross compiler:

Page 7: 3/24/2004COSC4301 assignment 31 Compiler, Interpreter, and Bootstrapping Motivation: When we are asked to write a  Compiler for a complex source language.

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

Page 8: 3/24/2004COSC4301 assignment 31 Compiler, Interpreter, and Bootstrapping Motivation: When we are asked to write a  Compiler for a complex source language.

3/24/2004 COSC4301 assignment 3 8

Interpreter

• A language process accept source code and executes it directly

Page 9: 3/24/2004COSC4301 assignment 31 Compiler, Interpreter, and Bootstrapping Motivation: When we are asked to write a  Compiler for a complex source language.

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

Page 10: 3/24/2004COSC4301 assignment 31 Compiler, Interpreter, and Bootstrapping Motivation: When we are asked to write a  Compiler for a complex source language.

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

Page 11: 3/24/2004COSC4301 assignment 31 Compiler, Interpreter, and Bootstrapping Motivation: When we are asked to write a  Compiler for a complex source language.

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

Page 12: 3/24/2004COSC4301 assignment 31 Compiler, Interpreter, and Bootstrapping Motivation: When we are asked to write a  Compiler for a complex source language.

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?

Page 13: 3/24/2004COSC4301 assignment 31 Compiler, Interpreter, and Bootstrapping Motivation: When we are asked to write a  Compiler for a complex source language.

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

Page 14: 3/24/2004COSC4301 assignment 31 Compiler, Interpreter, and Bootstrapping Motivation: When we are asked to write a  Compiler for a complex source language.

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.

Page 15: 3/24/2004COSC4301 assignment 31 Compiler, Interpreter, and Bootstrapping Motivation: When we are asked to write a  Compiler for a complex source language.

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

Page 16: 3/24/2004COSC4301 assignment 31 Compiler, Interpreter, and Bootstrapping Motivation: When we are asked to write a  Compiler for a complex source 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)

Page 17: 3/24/2004COSC4301 assignment 31 Compiler, Interpreter, and Bootstrapping Motivation: When we are asked to write a  Compiler for a complex source language.

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.

Page 18: 3/24/2004COSC4301 assignment 31 Compiler, Interpreter, and Bootstrapping Motivation: When we are asked to write a  Compiler for a complex source 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!

Page 19: 3/24/2004COSC4301 assignment 31 Compiler, Interpreter, and Bootstrapping Motivation: When we are asked to write a  Compiler for a complex source language.

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!

Page 20: 3/24/2004COSC4301 assignment 31 Compiler, Interpreter, and Bootstrapping Motivation: When we are asked to write a  Compiler for a complex source language.

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.

Page 21: 3/24/2004COSC4301 assignment 31 Compiler, Interpreter, and Bootstrapping Motivation: When we are asked to write a  Compiler for a complex source language.

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

Page 22: 3/24/2004COSC4301 assignment 31 Compiler, Interpreter, and Bootstrapping Motivation: When we are asked to write a  Compiler for a complex source language.

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

Page 23: 3/24/2004COSC4301 assignment 31 Compiler, Interpreter, and Bootstrapping Motivation: When we are asked to write a  Compiler for a complex source language.

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

Page 24: 3/24/2004COSC4301 assignment 31 Compiler, Interpreter, and Bootstrapping Motivation: When we are asked to write a  Compiler for a complex source language.

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.

Page 25: 3/24/2004COSC4301 assignment 31 Compiler, Interpreter, and Bootstrapping Motivation: When we are asked to write a  Compiler for a complex source language.

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

Page 26: 3/24/2004COSC4301 assignment 31 Compiler, Interpreter, and Bootstrapping Motivation: When we are asked to write a  Compiler for a complex source language.

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!

Page 27: 3/24/2004COSC4301 assignment 31 Compiler, Interpreter, and Bootstrapping Motivation: When we are asked to write a  Compiler for a complex source language.

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 …