27
Semantics of PLs via Interpreters: Getting Started CS784: Programming Languages Prabhaker Mateti

Semantics of PLs via Interpreters: Getting Started CS784: Programming Languages Prabhaker Mateti

Embed Size (px)

Citation preview

Semantics of PLs via Interpreters: Getting Started

CS784: Programming Languages

Prabhaker Mateti

2

Study …

• EOPL3 Chapter 3: 3.1, 3.2

• source code: chapter3/let-lang/*• 1722 data-structures.scm

• 4415 drscheme-init.scm

• 1450 environments.scm

• 2057 interp.scm

• 1501 lang.scm

• 1857 tests.scm

• 2007 top.scm

CS784 (PM)

3

EOPL3 Source Code

• All the code in the book, as a zip archive (211 Kb).• http://www.eopl3.com/allcode.zip

• tested under PLT Scheme versions 372 and 4.2.

• It should run unchanged in Racket 5.1.3 .

• To make it more consistent with current Racket code, remove(module name (lib "eopl.ss" "eopl") .... )around each file, and write #lang eoplat the top of the file instead.

• If the module says(module name mzscheme .... ) use #lang mzschemeinstead (NOT #lang racket -- the syntax for require/provide is slightly different).

CS784 (PM)

4

Interpreter vs Compiler

Input: Abstract Syntax of a program (AST)

Output:“Meaning” of the program

An interpreter carries out the meaning of a program.

A compiler transforms a program in one language into a program in a lower-level language preserving the meaning.

CS784 (PM)

5

Fig 3.2 The LET language

Concrete/Abstract Syntax Comments on the syntax• Six kinds of expressions.

• Assume Scheme syntax for id and number.

• Minus is used as a function name.

• Uses std math notation for apply.

• then-body and else-body are single expressions.

• exp1 is the first expression and body is the second expression.

CS784 (PM)

6

Examples in the LET language

1. let x = 5 in -(x,3)2. let z = 5

in let x = 3in let y = -(x,1) % here x = 3

in let x = 4in -(z, -(x,y)) % here x = 4

3. let x = 7in let y = 2

in let y =let x = -(x,1)in -(x,y)

in -(-(x,8), y)

CS784 (PM)

7

scan&parse

(scan&parse "-(55, -(x,11))")#(struct:a-program #(struct:diff-exp #(struct:const-exp 55) #(struct:diff-exp #(struct:var-exp x) #(struct:const-exp 11))))

CS784 (PM)

8

Values Of The Language

• Expressed values are the values of exp.

• Denoted values are bound to variables.

• Not always the same, in general.

• In LET, they are the same:• ExpVal = Int + Bool

• DenVal = Int + Bool

CS784 (PM)

9

Functions in our LET-Interpreter

constructors

1. const-exp : Int →Exp

2. zero?-exp : Exp → Exp

3. if-exp : Exp × Exp × Exp → Exp

4. diff-exp : Exp × Exp → Exp

5. var-exp : Var → Exp

6. let-exp : Var × Exp × Exp → Exp

observer

7. value-of : Exp × Env → ExpVal

CS784 (PM)

10

Spec of value-of

1. (value-of (const-exp n) ρ) = (num-val n)

2. (value-of (var-exp var) ρ)= (apply-env ρ var)

3. (value-of (diff-exp exp1 exp2) ρ)= (num-val

(-(expval->num (value-of exp1 ρ))(expval->num (value-of exp2 ρ))))

Three more remaining.

CS784 (PM)

11

Notation

Notation Denotes env

[] Empty env

[ var = val ] (extend-env var val )«exp» AST for expression exp

n (num-val n),

val (expval->num val).

Note: [[n]] =n

CS784 (PM)

12

Figure 3.3 An example calculation

CS784 (PM)

13

Specifying Programs

• initial environment

[i=1, v=5, x=10]

• (value-of-program exp)= (value-of exp [i=[1],v=[5], x=

[10]])

CS784 (PM)

14

Spec of value-of

4. (value-of (if-exp exp1 exp2 exp3) ρ)= (if (expval->bool (value-of exp1

ρ))(value-of exp2 ρ)(value-of exp3 ρ))

5. (value-of (let-exp var exp1 body) ρ)= (value-of body

[var = (value-of exp1 ρ)] ρ)CS784 (PM)

15

Fig 3.4 A conditional expression

CS784 (PM)

16

Eval of an example let

CS784 (PM)

17

Eval of an example let (contd)

CS784 (PM)

18

Fig 3.6 LET lang AST def

(define-datatype program program?(a-program

(exp1 expression?)))

(define-datatype expression expression?

(const-exp (num number?))

(diff-exp (exp1 expression?)

(exp2 expression?))

(zero?-exp (exp1 expression?))

(if-exp (exp1 expression?)

(exp2 expression?)

(exp3 expression?))

(var-exp (var identifier?))

(let-exp (var identifier?)

(exp1 expression?)

(body expression?)))

CS784 (PM)

19

(init-env) = [i= 1,v= 5,x=10]

(define init-env

(lambda ()

(extend-env

'i (num-val 1)

(extend-env

'v (num-val 5)

(extend-env

'x (num-val 10)

(empty-env))))))

CS784 (PM)

20

Fig 3.7a Expressed values

• (define-datatype expval expval?(num-val

(num number?))(bool-val

(bool boolean?)))

CS784 (PM)

21

Fig 3.7b Expressed values

• (define expval->num (lambda (val)

(cases expval val(num-val (num) num)(else (report-expval-

extractor-error’num val)))))

CS784 (PM)

22

Fig 3.7c Expressed values

• (define expval->bool(lambda (val)

(cases expval val (bool-val (bool) bool) (else (report-expval-extractor-

error `bool val)))))

CS784 (PM)

23

value-of: Exp × Env → ExpVal

CS784 (PM)

24

run, value-of-program

CS784 (PM)

25

(value-of (zero?-exp exp1) env)

CS784 (PM)

26

(value-of (if-exp e1 e2 e3) env)

CS784 (PM)

27

(value-of (let-exp …) env)

CS784 (PM)