Chapter%203:%20Environment-Passing%20Interpreters - PowerPoint PPT Presentation

About This Presentation
Title:

Chapter%203:%20Environment-Passing%20Interpreters

Description:

Chapter 3: Environment-Passing Interpreters Compiler (javac) vs. Interpreter (drscheme): Front End Interpreter answer program text syntax tree ((lambda (x) (* x x) 6) – PowerPoint PPT presentation

Number of Views:54
Avg rating:3.0/5.0
Slides: 11
Provided by: Levy70
Category:

less

Transcript and Presenter's Notes

Title: Chapter%203:%20Environment-Passing%20Interpreters


1
Chapter 3 Environment-Passing Interpreters
Compiler (javac) vs. Interpreter (drscheme)
Front End
Interpreter
answer
program text
syntax tree
gt ((lambda (x) ( x x) 6) 36
2
Front End
Compiler
program text
syntax tree
object code
VM/OS
answer
javac square6.java java square6 36 g -o
square6 square6.cpp ./square6 36
3
3.1 A Simple Interpreter
  • Defining language will be Scheme (of course).
  • Defined language will be simple arithmetic
    expressions

3 x (3,x) add1((3,x))
4
A Simple Interpreter
Syntax ltprogramgt ltexpressiongt ltexpressiongt
ltnumbergt ltidentifiergt ltprimit
ivegt (ltexpressiongt(,)) ltprimitivegt -
add1 sub1
a-program (exp)
lit-exp (datum)
var-exp (id)
primapp-exp (prim rands)
5
A Simple Interpreter
(define-datatype program program? (a-program
(exp expression?)) (define-datatype expression
expression? (lit-exp (datum number?))
(var-exp (id symbol?)) (primapp-exp
(prim primitive?) (rands (list-of
expression?)))
6
A Simple Interpreter
(define-datatype primitive primitive?
(add-prim) (subtract-prim) (mult-prim)
(incr-prim) (decr-prim)) gt (a-program
add1((3,x)) (primapp-exp
(incr-prim) ((primapp-exp
(add-prim) ((lit-exp 3) (var-exp
'x))))))
7
Interpreter Code
(define eval-program (lambda (pgm) (cases
program pgm (a-program (body)
(eval-expression body (init-env))))))
(define init-env (lambda () (extend-env
'(i v x) '(1 5 10) (empty-env))))
8
Interpreter Code
(define eval-expression (lambda (exp env)
(cases expression exp (lit-exp (datum)
datum) (var-exp (id) (apply-env env id))
(primapp-exp (prim rands) (let ((args
(eval-rands rands env)))
(apply-primitive prim args))))))
9
Interpreter Code
(define eval-rands (lambda (rands env) (map
(lambda (x) (eval-rand x env))rands))) (define
eval-rand (lambda (rand env)
(eval-expression rand env)))
10
Interpreter Code
(define apply-primitive (lambda (prim args)
(cases primitive prim (add-prim () (
(car args) (cadr
args))) (subtract-prim () (- (car args)
(cadr args)))
(mult-prim () ( (car args)
(cadr args))) (incr-prim ()
( (car args) 1)) (decr-prim () (- (car
args) 1)))))
Write a Comment
User Comments (0)
About PowerShow.com