Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "Semantics of PLs via Interpreters: Getting Started CS784: Programming Languages Prabhaker Mateti."— Presentation transcript:

1 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)2

3 EOPL3 Source Code All the code in the book, as a zip archive (211 Kb). All the code in the book, as a zip archive tested under PLT Scheme versions 372 and 4.2. It should run unchanged in Racket To make it more consistent with current Racket code, remove (module name (lib "eopl.ss" "eopl").... ) around each file, and write #lang eopl at the top of the file instead. If the module says (module name mzscheme.... ) use #lang mzscheme instead (NOT #lang racket -- the syntax for require/provide is slightly different). CS784 (PM)3

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)4

5 Fig 3.2 The LET language Concrete/Abstract SyntaxComments 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)5

6 Examples in the LET language 1.let x = 5 in -(x,3) 2.let z = 5 in let x = 3 in let y = -(x,1) % here x = 3 in let x = 4 in -(z, -(x,y)) % here x = 4 3.let x = 7 in let y = 2 in let y = let x = -(x,1) in -(x,y) in -(-(x,8), y) CS784 (PM)6

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)7

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)8

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 1.value-of : Exp × Env → ExpVal CS784 (PM)9

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)10

11 Notation Denotes  env []Empty env [ var = val ]  (extend-env var val  ) «exp»AST for expression exp nn (num-val n),  val  (expval->num val). Note: [[n]] =n CS784 (PM)11

12 Figure 3.3 An example calculation CS784 (PM)12

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)13

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)14

15 Fig 3.4 A conditional expression CS784 (PM)15

16 Eval of an example let CS784 (PM)16

17 Eval of an example let (contd) CS784 (PM)17

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)18

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)19

20 Fig 3.7a Expressed values (define-datatype expval expval? (num-val (num number?)) (bool-val (bool boolean?))) CS784 (PM)20

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)21

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)22

23 value-of: Exp × Env → ExpVal CS784 (PM)23

24 run, value-of-program CS784 (PM)24

25 (value-of (zero?-exp exp1) env) CS784 (PM)25

26 (value-of (if-exp e1 e2 e3) env) CS784 (PM)26

27 (value-of (let-exp …) env) CS784 (PM)27


Download ppt "Semantics of PLs via Interpreters: Getting Started CS784: Programming Languages Prabhaker Mateti."

Similar presentations


Ads by Google