EOPL3: Section 3.3 PROC and App B: SLLGEN

Slides:



Advertisements
Similar presentations
Plt /7/ Data Abstraction Programming Language Essentials 2nd edition Chapter 2.2 An Abstraction for Inductive Data Types.
Advertisements

Semantics of PLs via Interpreters: Getting Started CS784: Programming Languages Prabhaker Mateti.
Assignments and Procs w/Params EOPL3 Chapter 4. Expressible vs. Denotable values Expressible Values –the language can express and compute these –represented.
Variables, Environments and Closures. Overview We will Touch on the notions of variable extent and scope Introduce the notions of lexical scope and.
Recap 1.Programmer enters expression 2.ML checks if expression is “well-typed” Using a precise set of rules, ML tries to find a unique type for the expression.
Functional Programming. Pure Functional Programming Computation is largely performed by applying functions to values. The value of an expression depends.
Cs7100(Prasad)L8Interp1 Interpreters Study Semantics of Programming Languages through interpreters (Executable Specifications)
Metacircular Evaluation SICP Chapter 4 Mark Boady.
Cs784(TK)1 Semantics of Procedures and Scopes. Kinds of Scope Static or Lexical scope –determined by structure of program –Scheme, C++, Java, and many.
6.001 SICP SICP – October environment Trevor Darrell 32-D512 Office Hour: W web page:
Denotational Semantics Syntax-directed approach, generalization of attribute grammars: –Define context-free abstract syntax –Specify syntactic categories.
Functional programming: LISP Originally developed for symbolic computing Main motivation: include recursion (see McCarthy biographical excerpt on web site).
Compiler Design Lexical Analysis Syntactical Analysis Semantic Analysis Optimization Code Generation.
SICP Variations on a Scheme Scheme Evaluator – A Grand Tour Techniques for language design: Interpretation: eval/apply Semantics vs. syntax Syntactic.
Functional programming: LISP Originally developed for symbolic computing First interactive, interpreted language Dynamic typing: values have types, variables.
CSC 8310 Programming Languages Meeting 2 September 2/3, 2014.
PPL Syntax & Formal Semantics Lecture Notes: Chapter 2.
PPL Syntax & Formal Semantics Lecture Notes: Chapter 2.
The environment model evaluator and compiler 1 The env model evaluator Motivation In one word: Efficiency Saves repeated renaming and substitution: Using.
2.2 A Simple Syntax-Directed Translator Syntax-Directed Translation 2.4 Parsing 2.5 A Translator for Simple Expressions 2.6 Lexical Analysis.
Syntax & Semantic Introduction Organization of Language Description Abstract Syntax Formal Syntax The Way of Writing Grammars Formal Semantic.
Cs784(tk)1 Implementing Recursion. Recap: Goals Experimenting with PL design alternatives Scoping, parameter passing, arrays,... Runnable prototype of.
PrasadL145OOL1 Managing Environments An Exercise in the Design, Analysis, Specification, and Implementation of the Core of an OOP Language. Object-Oriented.
Cs7100(Prasad)L8Proc1 Procedures. cs7100(Prasad)L8Proc2 Primitive procedures  etc User-defined procedures –Naming a sequence of operations.
Plt /12/ Data Abstraction Programming Language Essentials 2nd edition Chapter 2.3 Representation Strategies for Data Types.
3.5 Procedures Recall procedures (functions) in Scheme: (let ((f (lambda(y z) (+ y (- z 5))) (f 2 28)) We would like something similar in our toy language:
Interpretation Environments and Evaluation. CS 354 Spring Translation Stages Lexical analysis (scanning) Parsing –Recognizing –Building parse tree.
Formal Semantics Chapter Twenty-ThreeModern Programming Languages, 2nd ed.1.
1 Objects and types Typed languages = define a set of types in the language and assign a type to each expression in the program Type checking = how can.
Plt /17/ Environment-Passing Interpreters Programming Language Essentials 2nd edition Chapter 3.8 Parameter-Passing Variations.
The environment-based operational semantics Chapter
Plt /19/ Environment-Passing Interpreters Programming Language Essentials 2nd edition Chapter 3.1 A Simple Interpreter.
CPS 506 Comparative Programming Languages Syntax Specification.
Scheme Profs Tim Sheard and Andrew Black CS 311 Computational Structures.
Comp 311 Principles of Programming Languages Lecture 4 The Scope of Variables Corky Cartwright September 3, 2008.
 Fall Chart 2  Translators and Compilers  Textbook o Programming Language Processors in Java, Authors: David A. Watts & Deryck F. Brown, 2000,
Compiler (javac) vs. Interpreter (drscheme): Chapter 3: Environment-Passing Interpreters Front End Interpreter program textsyntax tree answer > ((lambda.
3.3 Conditional Evaluation --> if 1 then 2 else 3 2 Want to support if/then/else We'll represent false as 0, true as 1: Syntax (BNF): ::= if then else.
Objects and Classes Gul Agha CS 421 Spring /11/2001CS 322 Fall Characteristics of OOP Object-based  encapsulate state  provide interface.
PPL Syntax & Formal Semantics Lecture Notes: Chapter 2.
3.2 The Front End > (a-program ; add1(+(3,x)) (primapp-exp (incr-prim) ((primap-exp (add-prim) ((lit-exp 3) (var-exp x)))))) Want to avoid having to specify.
Operational Semantics of Scheme
Abstract Syntax cs7100 (Prasad) L7AST.
A Simple Syntax-Directed Translator
The interpreter.
Introduction to Scheme
Variables, Environments and Closures
Interpreters Study Semantics of Programming Languages through interpreters (Executable Specifications) cs7100(Prasad) L8Interp.
Organization of Programming Languages
Corky Cartwright January 18, 2017
Implementing Recursion
Env. Model Implementation
Original material by Eric Grimson
Semantics of PLs via Interpreters: Getting Started
Variables, Environments and Closures
Lecture 15 (Notes by P. N. Hilfinger and R. Bodik)
The Metacircular Evaluator
Abstract Syntax Prabhaker Mateti 1.
The Metacircular Evaluator
Procedures App B: SLLGEN 1.
3.4 Local Binding Recall Scheme's let: > (let ((x 5)‏ (y 6))
The Metacircular Evaluator (Continued)
Chapter 1 Review: BNF Grammar for lists:
Abstract Syntax cs7100 (Prasad) L7AST.
3.6 Interpreter: Recursion
6.001 SICP Variations on a Scheme
6.001 SICP Interpretation Parts of an interpreter
Assignments and Procs w/Params
CSE 341 Lecture 11 b closures; scoping rules
Recursive Procedures and Scopes
Presentation transcript:

EOPL3: Section 3.3 PROC and App B: SLLGEN Procedures EOPL3: Section 3.3 PROC and App B: SLLGEN

The PROC language Expression ::= proc (Identifier) Expression AST: proc-exp (var body) Expression ::= (Expression Expression) AST: call-exp (rator rand) PROC includes all of LET language Anonymous procedure One parameter always one arg only CS784(pm)

Semantics of Procedures (This slide is for procedures in general.) Procedure Definition Store formal parameters and body Procedure Invocation Evaluate body in an environment that binds formals to actual argument values Interpretation of free-variables: Two methods Use env at proc definition (lexical/static scoping) Use env at proc call (dynamic scoping) Overloading : Static binding – Dynamic binding :: association of code to function call (cf. deep and shallow binding in the realm of dynamic scoping) (cf. static typing vs dynamic typing) CS784(pm)

Scoping and Binding references declarations lexical scoping rules (f x y) f, x, and y declarations (lambda (x) (+ x 3)) (let ((x (+ y 7))) (+ x 3)) y, and second/right x are refs first/left x is a declaration lexical scoping rules CS784(pm)

Kinds of Scope Static or Lexical scope Dynamic scope Global Scope determined by structure of program Scheme, C++, Java, and many compiled languages Dynamic scope determined by path of execution Lisp dialects, Perl, and many interpreted languages Global Scope File scope Local Scope Block Body of a procedure Body of a loop Scope alters the meaning CS784(pm)

Example-1 of PROC let f = proc (x) --(x,11) in (f (f 77)) Defines an anonymous procedure with one formal parameter named x. Body of the procedure: --(x,11) Binds the name f to this procedure. Invokes f with actual argument 77. Invokes f again with the result of above. (will use two -- just for visibility) CS784(pm)

Example-2 of PROC (proc (f) (f (f 77)) proc (x) --(x,11)) This example is derived from the production Expression ::= (Expression Expression) so is (f (f 77)) so is (f 77) proc (f) (f (f 77)) is the rator. It defines an anonymous procedure with one formal parameter named f. proc (x) --(x,11)) is the rand. It also defines an anonymous procedure with one formal parameter named x. CS784(pm)

Example-3 of PROC let x = 200 in let f = proc (z) --(z, x) in let x = 100 in let g = proc (z) --(z, x) in --((f 1), (g 1)) Illustrates scope issues x and z appear four times each. Lexical scoping In --((f 1), (g 1)), the bodies of f and g must be evaluated in the env they were defined. In f, x is bound to 200 In g, x is bound to 100 CS784(pm)

Example Programs of PROC Example-1 and -2 produce same result, but different mechanisms. Previous two slides gave semantics informally Watch out: a very seductive approach Next few slides: interpreter based CS784(pm)

Example Calc w/ Spec 1 CS784(pm)

Example Calc w/ Spec 2 CS784(pm)

Example Calc w/ Spec 3 CS784(pm)

Example Calc w/ Spec 4 CS784(pm)

Recall value-of value-of is an operator with two operands an AST an environment (value-of ast env) PROC = LET + two more productions Bring in all value-of specs from LET Additions are shown on next few slides … CS784(pm)

additional value-of specs (value-of (proc-exp var body) ρ) = (proc-val (procedure var body ρ)) (value-of (call-exp rator rand) ρ) = (let ( (proc (expval->proc (value-of rator ρ))) (arg (value-of rand ρ))) (apply-procedure proc arg)) To be defined: proc-val, apply-procedure CS784(pm)

Spec of apply-procedure (apply-procedure (procedure var body ρ) val) = (value-of body [var=val]ρ ) apply-procedure takes two arguments: an AST of a procedure definition an argument for the parameter of the procedure yields an expressed value CS784(pm)

Impl of apply-procedure (define proc? (lambda (pc) (procedure? pc))) (define procedure (lambda (var body env) (lambda (val) (value-of body (extend-env var val env))))) (define apply-procedure (lambda (pc val) (pc val))) procedure?  provided from r5rs Names being bound: proc? procedure apply-procedure env is an environment ASTs: body, pc, val, var Use of procedure? is too liberal. procedure is not self-contained; takes three arguments: param name var body AST environment CS784(pm)

Alternate impl called Closures (define-datatype proc proc? (procedure (var identifier?) (body expression?) (saved-env environment?))) (define apply-procedure (lambda (pc val) (cases proc pc (procedure (var body saved-env) (value-of body (extend-env var val saved-env)))))) Defining a new data type called “proc” Has only one variant procedure That has three parts var which must be an id body an expression saved-env an environment apply-procedure takes pc and val. “cases proc pc” pc is expected to be of type proc code for each variant of proc only one variant “procedure” here These data structures are often called closures, because they are self- contained: they contain everything the procedure needs in order to be applied. We sometimes say the procedure is closed over or closed in its creation environment. CS784(pm)

the data type expval is now … (define-datatype expval expval? (num-val (num number?)) (bool-val (bool boolean?)) (proc-val (proc proc?))) CS784(pm)

value-of: two new clauses (proc-exp (var body) (proc-val (procedure var body env))) (call-exp (rator rand) (let ( (proc (expval->proc (value-of rator env))) (arg (value-of rand env))) (apply-procedure proc arg))) CS784(pm)

Curried procedures In PROC, procedures with multiple arguments can be had as in: let f = proc (x) proc (y) ... in ((f 3) 4) proc (x) … yields a procedure Named after Haskell Brooks Curry (1900 – 1982), a combinatory logician. CS784(pm)

chapter3/proc-lang/ Two subdirectories chapter3/proc-lang/proc-rep: procedural implementation chapter3/proc-lang/ds-rep: data type based (i.e., closure) Both directories have the following files data-structures.scm drscheme-init.scm environments.scm interp.scm lang.scm tests.scm top.scm CS784(pm)

EOPL3 Appendix B SLLGEN (define scanner-spec-1 ...) (define grammar-1 ...) (sllgen:make-define-datatypes scanner-spec-1 grammar-1) (define list-the-datatypes (lambda () (sllgen:list-define-datatypes scanner-spec-1 grammar-1))) (define just-scan (sllgen:make-string-scanner scanner-spec-1 grammar-1)) (define scan&parse (sllgen:make-string-parser scanner-spec-1 grammar-1)) (define read-eval-print (sllgen:make-rep-loop "--> " value-of--program (sllgen:make-stream-parser scanner-spec-1 grammar-1))) sllgen:make-define-datatypes: generates a define-datatype for each production of the grammar, for use by cases. sllgen:make-string-scanner takes a scanner spec and a grammar and generates a scanning procedure read-eval-print loop CS784(pm)

Lexical Analysis the-lexical-spec from chapter3/ proc-lang/*/lang.scm (define the-lexical-spec '((whitespace (whitespace) skip) (comment ("%" (arbno (not #\newline))) skip) (identifier (letter (arbno (or letter digit "_" "-" "?"))) symbol) (number (digit (arbno digit)) number) (number ("-" digit (arbno digit)) number) )) the-lexical-spec from chapter3/ proc-lang/*/lang.scm scanners are specified by reg exp – next slide All our languages use this lexical analysis. CS784(pm)

SLLGEN Scanner Spec Scanner-spec ::= ({Regexp-and-action}∗) Regexp-and-action ::= (Name ({Regexp}∗) Action) Name ::= Symbol Regexp ::= String | letter | digit| whitespace|any ::= (not Character) | (or {Regexp}∗) ::= (arbno Regexp) | (concat {Regexp}∗) Action ::= skip | symbol | number | string A scanner specification in SLLGEN is a list that satisfies the grammar at left CS784(pm)

The SLLGEN Parsing System (define the-grammar '((program (expression) a-program) (expression (number) const-exp) (expression ("-" "(" expression "," expression ")") diff-exp) ("zero?" "(" expression ")") zero?-exp) ("if" expression "then" expression "else" expression) if-exp) (expression (identifier) var-exp) ("let" identifier "=" expression "in" expression) let-exp) ("proc" "(" identifier ")" expression) proc-exp) ("(" expression expression ")") call-exp) )) the-grammar of PROC from chapter3/ proc-lang/*/lang.scm Double-quoted items are terminals/tokens. CS784(pm)

Specifying Grammars Grammar ::= ({Production}∗) Production ::= (Lhs ({Ritem}∗) Prod-name) Lhs ::= Symbol Ritem ::= Symbol | String ::= (arbno {Ritem}∗) ::= (separated-list {Ritem}∗ String) Prod-name ::= Symbol A grammar in SLLGEN is a list described by the grammar at left CS784(pm)

HW2 Problem (define closure (lambda (ids body env) (let ((freevars (set-diff (free-vars body) ids))) (let ((saved-env (extend-env freevars (map (lambda (v) (apply-env env v)) freevars) (empty-env)))) (lambda (args) (eval-expression body (extend-env ids args saved-env))))))) http://www.cs.wright.edu/~pmateti/Courses/784/Top/784-HW2.html In our data-structure representation of procedures, we have kept the entire environment in the closure. But of course all we need are the bindings for the free variables. Modify the representation of procedures to retain only the free variables. flat closure rep shown left consists of exactly one rib of free variables and their values. free-vars: ykwim ;-) set-diff:  difference of two sets map  provided from r5rs CS784(pm)