the interpreter

58
The interpreter

Upload: lumina

Post on 25-Feb-2016

41 views

Category:

Documents


3 download

DESCRIPTION

The interpreter. Derived Expressions. (define derived? ( lambda (exp) ( or (if? exp) (function-definition? exp) (let? exp )))). Shallow-derive. (define shallow-derive ( lambda (exp) ( cond ((if? exp) (if-> cond exp)) (( function-definition? exp) - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: The interpreter

The interpreter

Page 2: The interpreter

Derived Expressions

(define derived? (lambda (exp) (or (if? exp) (function-definition? exp) (let?

exp))))

Page 3: The interpreter

Shallow-derive

(define shallow-derive (lambda (exp) (cond ((if? exp) (if->cond exp)) ((function-definition? exp) (function-define->define exp)) ((let? exp) (let->combination exp)) (else (error ’shallow-derive

"unhandled derivation: ~s" exp)))))

Page 4: The interpreter

Recursive derivation

(define (derive exp) (if (atomic? exp) exp (let ((mapped-derive-exp (map derive exp))) (if (not (derived? exp)) mapped-derive-exp (shallow-derive mapped-derive-exp)))

Page 5: The interpreter

Concrete derivation

Page 6: The interpreter
Page 7: The interpreter

Cont .

Page 8: The interpreter

let

Page 9: The interpreter

Function-definition

Page 10: The interpreter

Reminder

Page 11: The interpreter

Core (applicative-substitution)

• Language expressions– ASP

• The global environment– Data structures+core

• Values– Data structures+ core

Page 12: The interpreter

• We will start with the data structures, that actually do most of the work

• Then the core – evaluation rules will be rather easy

Page 13: The interpreter

Values

The Primitive-procedure ADT:1. Constructor make-primitive-procedure: Attaches a tag to

an implemented codeargument.Type: [T -> Primitive-procedure].2. Identification predicate primitive-procedure?.Type: [T –> Boolean].3. Selector primitive-implementation: It retrieves the

implemented code from a primitive procedure value.Type: [Primitive-procedure –> T].

Page 14: The interpreter

Usage

Page 15: The interpreter

(User )Procedure

• (define (make-procedure pars body)(attach-tag (cons pars body) ‘procedure))

..…

Page 16: The interpreter

Other values

(define (make-value x) (attach-tag (list x) ‘value))

Page 17: The interpreter

Environment

Page 18: The interpreter

frame

Page 19: The interpreter

Initialization with primitives

Page 20: The interpreter

Before introducing the constructor: A word on mutation

• So far we kept our code fully functional– That is, no state required– “define” is somewhat an exception, but mainly for convenience

• Recursive function definition is an exception to that, can be done without define, but requires fixpoint operation

• For implementing the global environment we want to be able to change bindings– A functional solution is possible but messy

• We use an abstraction of mutation through the Box ADT of Dr. Racket

• It basically “wrappes” the object and allows (sort of ) a “pointer” to it

Page 21: The interpreter

Global-env constructor

Page 22: The interpreter
Page 23: The interpreter

Defining the global-env

(define the-global-environment (make-the-global-environment))

This expression is in the global scope of the interperter…

Page 24: The interpreter

Selector:lookup

Page 25: The interpreter

MUTATOR:add-binding!

Page 26: The interpreter

Binding ADT

Page 27: The interpreter

Using the environment

Page 28: The interpreter

Eval-apply loop

(applicative-eval exp)(apply-procedure proc args)

Mutually recursive (why?)

Page 29: The interpreter

eval

Page 30: The interpreter

Eval-atomic

Page 31: The interpreter

Lambda+definitions

Page 32: The interpreter

If

Page 33: The interpreter

application

Page 34: The interpreter

Apply-primitive

Page 35: The interpreter

substitute

Page 36: The interpreter
Page 37: The interpreter
Page 38: The interpreter

“main” code of substitute

Page 39: The interpreter

rename(exp)

Page 40: The interpreter
Page 41: The interpreter

“main” code of rename

Page 42: The interpreter

Environment Model

• Formal algorithm

• Interpreter

Page 43: The interpreter

Environment Model (Diagram)

Page 44: The interpreter
Page 45: The interpreter
Page 46: The interpreter

Dynamic env-model

Page 47: The interpreter

Interpreter for env. model

• What should be changed?

Page 48: The interpreter

List of main changes

• ASP stays intact• Data structures: – Support an Environment ADT– Procedure ADT should include an environment pointer

• Core:– Every eval function gets an environment as an additional

parameter– Uses it e.g. for lookup, and passes it on to recursive eval and

apply calls– apply of user procedures (closures) change to manage envs.

Page 49: The interpreter
Page 50: The interpreter

env

Page 51: The interpreter

lookup

Page 52: The interpreter

Adding binding in global env

Page 53: The interpreter

Core:eval

Page 54: The interpreter

Every eval now has env argument

Page 55: The interpreter

apply-procedure

Page 56: The interpreter

apply-procedure (cont.)

Page 57: The interpreter
Page 58: The interpreter

Dynamic-env interpreter

• What would you change?