EnvironmentPassing Interpreters Programming Language Essentials 2 nd edition

  • Slides: 6
Download presentation
Environment-Passing Interpreters Programming Language Essentials 2 nd edition Chapter 3. 4 Local Binding 1

Environment-Passing Interpreters Programming Language Essentials 2 nd edition Chapter 3. 4 Local Binding 1

Extended Language program: expression: number : id : primitive '(' expression *', ' ')'

Extended Language program: expression: number : id : primitive '(' expression *', ' ')' : 'if' expression 'then' expression 'else' expression : 'let' (id '=' expression)* 'in' expression let-exp (ids rands body) primitive: '+' | '-' | '*' | 'add 1' | 'sub 1' 2

Changes scanner: remains unchanged. parser: new rule for expression. interpreter: new case for let-exp,

Changes scanner: remains unchanged. parser: new rule for expression. interpreter: new case for let-exp, binding will extend environment. hosting the interpreter in Scheme forces complete decisions on the meaning: let x = 5 y = 6 in +(x, y) let x = 1 in let x = +(x, 2) in add 1(x) 3

Parser (define the-grammar '((program (expression) a-program). . (expression ("let" (arbno id "=" expression) "in"

Parser (define the-grammar '((program (expression) a-program). . (expression ("let" (arbno id "=" expression) "in" expression) let-exp). . ) ) 4

Interpreter (define eval-expression (lambda (exp env) (cases expression exp. . (let-exp (ids rands body)

Interpreter (define eval-expression (lambda (exp env) (cases expression exp. . (let-exp (ids rands body) (let ((args (eval-rands env))) (eval-expression body (extend-env ids args env) ) ) ) Scheme's let arranges for the lexical binding in the defined language 5

How to execute $ scheme 48 -I eopl. image > , load environment. scm

How to execute $ scheme 48 -I eopl. image > , load environment. scm > , load 3. 4. scm > , load boilerplate. scm > (run "let x = 5 y = 6 in +(x, y)") 11 > (run "let x = 1 in let x = +(x, 2) in add 1(x)") 4 $ cd 3; make 3. 4 6