n Takes abstract syntax trees as input n In simple cases could be just strings n One procedure for each syntactic category

Similar documents
Programming Languages and Compilers (CS 421)

n <exp>::= 0 1 b<exp> <exp>a n <exp>m<exp> 11/7/ /7/17 4 n Read tokens left to right (L) n Create a rightmost derivation (R)

Programming Languages and Compilers (CS 421)

Example. Programming Languages and Compilers (CS 421) Disambiguating a Grammar. Disambiguating a Grammar. Steps to Grammar Disambiguation

Programming Languages and Compilers (CS 421)

Programming Languages & Compilers. Programming Languages and Compilers (CS 421) I. Major Phases of a Compiler. Programming Languages & Compilers

Programming Languages & Compilers. Programming Languages and Compilers (CS 421) Programming Languages & Compilers. Major Phases of a Compiler

n (0 1)*1 n a*b(a*) n ((01) (10))* n You tell me n Regular expressions (equivalently, regular 10/20/ /20/16 4

Programming Languages and Compilers (CS 421)

Programming Languages and Compilers (CS 421)

n What is its running time? 9/18/17 2 n poor_rev [1,2,3] = n (poor_rev [1] = n ((poor_rev [1] =

Two Problems. Programming Languages and Compilers (CS 421) Type Inference - Example. Type Inference - Outline. Type Inference - Example

# true;; - : bool = true. # false;; - : bool = false 9/10/ // = {s (5, "hi", 3.2), c 4, a 1, b 5} 9/10/2017 4

Programming Languages and Compilers (CS 421)

Booleans (aka Truth Values) Programming Languages and Compilers (CS 421) Booleans and Short-Circuit Evaluation. Tuples as Values.

Programming Languages and Compilers (CS 421)

Programming Languages and Compilers (CS 421)

From the λ-calculus to Functional Programming Drew McDermott Posted

Harvard School of Engineering and Applied Sciences CS 152: Programming Languages. Lambda calculus

Lecture 5: The Untyped λ-calculus

CMSC 330: Organization of Programming Languages. Formal Semantics of a Prog. Lang. Specifying Syntax, Semantics

Note that in this definition, n + m denotes the syntactic expression with three symbols n, +, and m, not to the number that is the sum of n and m.

Last class. CS Principles of Programming Languages. Introduction. Outline

Formal Semantics. Aspects to formalize. Lambda calculus. Approach

Programming Languages and Compilers (CS 421)

Programming Languages and Compilers (CS 421)

CMSC 330: Organization of Programming Languages

COMP 1130 Lambda Calculus. based on slides by Jeff Foster, U Maryland

7. Introduction to Denotational Semantics. Oscar Nierstrasz

The Substitution Model

Abstract register machines Lecture 23 Tuesday, April 19, 2016

Forward Recursion. Programming Languages and Compilers (CS 421) Mapping Recursion. Forward Recursion: Examples. Folding Recursion.

COMP80 Lambda Calculus Programming Languages Slides Courtesy of Prof. Sam Guyer Tufts University Computer Science History Big ideas Examples:

Software Paradigms (Lesson 4) Functional Programming Paradigm

Overview. A normal-order language. Strictness. Recursion. Infinite data structures. Direct denotational semantics. Transition semantics

Programming Languages and Compilers (CS 421)

Operational Semantics. One-Slide Summary. Lecture Outline

axiomatic semantics involving logical rules for deriving relations between preconditions and postconditions.

Programming Languages Third Edition

CS 4110 Programming Languages & Logics. Lecture 17 Programming in the λ-calculus

Lambda Calculus. Variables and Functions. cs3723 1

More Untyped Lambda Calculus & Simply Typed Lambda Calculus

Lambda Calculus.

CS 242. Fundamentals. Reading: See last slide

Functional Programming

The University of Nottingham SCHOOL OF COMPUTER SCIENCE A LEVEL 4 MODULE, SPRING SEMESTER MATHEMATICAL FOUNDATIONS OF PROGRAMMING ANSWERS

Fundamental Concepts. Chapter 1

Lecture Outline. COOL operational semantics. Operational Semantics of Cool. Motivation. Lecture 13. Notation. The rules. Evaluation Rules So Far

9/21/17. Outline. Expression Evaluation and Control Flow. Arithmetic Expressions. Operators. Operators. Notation & Placement

Lambda Calculus. CS 550 Programming Languages Jeremy Johnson

Lambda Calculus. Concepts in Programming Languages Recitation 6:

9/23/2014. Why study? Lambda calculus. Church Rosser theorem Completeness of Lambda Calculus: Turing Complete

The Substitution Model. Nate Foster Spring 2018

Goals: Define the syntax of a simple imperative language Define a semantics using natural deduction 1

CMSC 330: Organization of Programming Languages. Operational Semantics

CITS3211 FUNCTIONAL PROGRAMMING

VU Semantik von Programmiersprachen

Denotational semantics

1 Introduction. 3 Syntax

CSE 505: Concepts of Programming Languages

M. Snyder, George Mason University LAMBDA CALCULUS. (untyped)

Formal Semantics. Prof. Clarkson Fall Today s music: Down to Earth by Peter Gabriel from the WALL-E soundtrack

Chapter 11 :: Functional Languages

CS152: Programming Languages. Lecture 11 STLC Extensions and Related Topics. Dan Grossman Spring 2011

Concepts of programming languages

Lexicografie computationala Feb., 2012

Programming Languages Fall 2013

Lecture 15 CIS 341: COMPILERS

Pure Lambda Calculus. Lecture 17

To figure this out we need a more precise understanding of how ML works

CSc 520 Principles of Programming Languages

Organization of Programming Languages CS3200/5200N. Lecture 11

Constraint-based Analysis. Harry Xu CS 253/INF 212 Spring 2013

Foundations. Yu Zhang. Acknowledgement: modified from Stanford CS242

Denotational Semantics. Domain Theory

Introduction to the λ-calculus

Programming Languages and Compilers (CS 421)

Operational Semantics of Cool

CS 6110 S11 Lecture 25 Typed λ-calculus 6 April 2011

Semantics via Syntax. f (4) = if define f (x) =2 x + 55.

UNIT 3

Programming Language Pragmatics

Chapter 5: The Untyped Lambda Calculus

Handout 10: Imperative programs and the Lambda Calculus

To figure this out we need a more precise understanding of how ML works

Formal Systems and their Applications

Untyped Lambda Calculus

Pure (Untyped) λ-calculus. Andrey Kruglyak, 2010

4/19/2018. Chapter 11 :: Functional Languages

CS152: Programming Languages. Lecture 7 Lambda Calculus. Dan Grossman Spring 2011

1 Lexical Considerations

Semantics with Applications 3. More on Operational Semantics

Fundamentals and lambda calculus. Deian Stefan (adopted from my & Edward Yang s CSE242 slides)

Introduction to the Lambda Calculus. Chris Lomont

CS558 Programming Languages

Chapter 3: Describing Syntax and Semantics. Introduction Formal methods of describing syntax (BNF)

5. Introduction to the Lambda Calculus. Oscar Nierstrasz

General Concepts. Abstraction Computational Paradigms Implementation Application Domains Influence on Success Influences on Design

CS558 Programming Languages

CIS 1.5 Course Objectives. a. Understand the concept of a program (i.e., a computer following a series of instructions)

Transcription:

Interpreter Programming Languages and Compilers (CS 421) Elsa L Gunter 2112 SC, UIUC http://courses.engr.illinois.edu/cs421 Based in part on slides by Mattox Beckman, as updated by Vikram Adve and Gul Agha n Takes abstract syntax trees as input n In simple cases could be just strings n One procedure for each syntactic category (nonterminal) n eg one for expressions, another for commands n If Natural semantics used, tells how to compute final value from code n If Transition semantics used, tells how to compute next state n To get final value, put in a loop 11/12/13 1 11/12/13 2 Natural Semantics Example n compute_exp (Var(v), m) = look_up v m n compute_exp (Int(n), _) = Num (n) n n compute_com(ifexp(b,c1,c2),m) = if compute_exp (b,m) = Bool(true) then compute_com (c1,m) else compute_com (c2,m) Natural Semantics Example n compute_com(while(b,c), m) = if compute_exp (b,m) = Bool(false) then m else compute_com (While(b,c), compute_com(c,m)) n May fail to terminate - exceed stack limits n Returns no useful information then 11/12/13 3 11/12/13 4 Transition Semantics Expressions and Values n Form of operational semantics n Describes how each program construct transforms machine state by transitions n Rules look like (C, m) --> (C, m ) or (C,m) --> m n C, C is code remaining to be executed n m, m represent the state/store/memory/ environment n Partial mapping from identifiers to values n Sometimes m (or C) not needed n Indicates exactly one step of computation n C, C used for commands; E, E for expressions; U,V for values n Special class of expressions designated as values n Eg 2, 3 are values, but 2+3 is only an expression n Memory only holds values n Other possibilities exist 11/12/13 5 11/12/13 6

Evaluation Semantics n Transitions successfully stops when E/C is a value/memory n Evaluation fails if no transition possible, but not at value/memory n Value/memory is the final meaning of original expression/command (in the given state) n Coarse semantics: final value / memory n More fine grained: whole transition sequence Simple Imperative Programming Language n I Identifiers n N Numerals n B ::= true false B & B B or B not B E < E E = E n E::= N I E + E E * E E - E - E n C::= skip C;C I ::= E if B then C else C fi while B do C od 11/12/13 7 11/12/13 8 Transitions for Expressions n Numerals are values n Boolean values = {true, false} n Identifiers: (I,m) --> (m(i), m) Boolean Operations: n Operators: (short-circuit) (false & B, m) --> (false,m) (B, m) --> (B, m) (true & B, m) --> (B,m) (B & B, m) --> (B & B, m) (true or B, m) --> (true,m) (B, m) --> (B, m) (false or B, m) --> (B,m) (B or B, m) --> (B or B,m) (not true, m) --> (false,m) (B, m) --> (B, m) (not false, m) --> (true,m) (not B, m) --> (not B, m) 11/12/13 9 11/12/13 10 Relations (E, m) --> (E,m) (E ~ E, m) --> (E ~E,m) Arithmetic Expressions (E, m) --> (E,m) (E op E, m) --> (E op E,m) (E, m) --> (E,m) (V ~ E, m) --> (V~E,m) (E, m) --> (E,m) (V op E, m) --> (V op E,m) (U ~ V, m) --> (true,m) or (false,m) depending on whether U ~ V holds or not (U op V, m) --> (N,m) where N is the specified value for U op V 11/12/13 11 11/12/13 12

Commands - in English Commands n skip means done evaluating n When evaluating an assignment, evaluate the expression first n If the expression being assigned is already a value, update the memory with the new value for the identifier n When evaluating a sequence, work on the first command in the sequence first n If the first command evaluates to a new memory (ie completes), evaluate remainder with new memory (skip, m) --> m (E,m) --> (E,m) (I::=E,m) --> (I::=E,m) (I::=V,m) --> m[i <-- V ] (C,m) --> (C,m ) (C,m) --> m (C;C, m) --> (C ;C,m ) (C;C, m) --> (C,m ) 11/12/13 13 11/12/13 14 If Then Else Command - in English n If the boolean guard in an if_then_else is true, then evaluate the first branch n If it is false, evaluate the second branch n If the boolean guard is not a value, then start by evaluating it first. If Then Else Command (if true then C else C fi, m) --> (C, m) (if false then C else C fi, m) --> (C, m) (B,m) --> (B,m) (if B then C else C fi, m) --> (if B then C else C fi, m) 11/12/13 15 11/12/13 16 While Command (while B do C od, m) --> (if B then C; while B do C od else skip fi, m) In English: Expand a While into a test of the boolean guard, with the true case being to do the body and then try the while loop again, and the false case being to stop. 11/12/13 17 11/12/13 18

(x > 5, (x, --> (7, (x > 5, 11/12/13 19 11/12/13 20 (x, --> (7, (x > 5, --> (7 > 5, (x, --> (7, (x > 5, --> (7 > 5, --> (if 7 > 5 then y:=2 + 3 else y:=3 + 4 fi, 11/12/13 21 11/12/13 22 n Second Step: (7 > 5, --> (true, (if 7 > 5 then y:=2 + 3 else y:=3 + 4 fi, --> (if true then y:=2 + 3 else y:=3 + 4 fi, n Third Step: (if true then y:=2 + 3 else y:=3 + 4 fi, -->(y:=2+3, {x->7}) n Fourth Step: (2+3, {x-> 7}) --> (5, (y:=2+3, {x->7}) --> (y:=5, {x->7}) Fifth Step: (y:=5, {x->7}) --> {y -> 5, x -> 7} 11/12/13 23 11/12/13 24

Transition Semantics Evaluation Bottom Line: --> (if 7 > 5 then y:=2 + 3 else y:=3 + 4 fi, -->(if true then y:=2 + 3 else y:=3 + 4 fi, -->(y:=2+3, {x->7}) --> (y:=5, {x->7}) --> {y -> 5, x -> 7} n A sequence of steps with trees of justification for each step (C 1,m 1 ) --> (C 2,m 2 ) --> (C 3,m 3 ) --> --> m n Let -->* be the transitive closure of --> n Ie, the smallest transitive relation containing --> 11/12/13 25 11/12/13 26 Adding Local Declarations n Add to expressions: n E ::= let I = E in E fun I -> E E E n fun I -> E is a value n Could handle local binding using state, but have assumption that evaluating expressions doesn t alter the environment n We will use substitution here instead n Notation: E [E / I ] means replace all free occurrence of I by E in E Call-by-value (Eager Evaluation) (let I = V in E, m) --> (E[V/ I ],m) (E, m) --> (E,m) (let I = E in E, m) --> (let I = E in E ) ((fun I -> E) V, m) --> (E[V / I ],m) (E, m) --> (E,m) ((fun I -> E) E, m) --> ((fun I -> E) E, m) 11/12/13 27 11/12/13 28 Call-by-name (Lazy Evaluation) n (let I = E in E, m) --> (E [E / I ],m) n ((fun I -> E ) E, m) --> (E [E / I ],m) n Question: Does it make a difference? n It can depending on the language Church-Rosser Property n Church-Rosser Property: If E-->* E 1 and E-->* E 2, if there exists a value V such that E 1 -->* V, then E 2 -->* V n Also called confluence or diamond property n Example: E= 2 + 3 + 4 E 1 = 5 + 4 E 2 = 2 + 7 V =9 11/12/13 29 11/12/13 30

Does It always Hold? n No. Languages with side-effects tend not be Church-Rosser with the combination of call-byname and call-by-value n Alonzo Church and Barkley Rosser proved in 1936 the λ-calculus does have it n Benefit of Church-Rosser: can check equality of terms by evaluating them (Given evaluation strategy might not terminate, though) Transition Semantics for λ-calculus n Application (version 1) (λ x. E) E --> E[E /x] n Application (version 2) (λ x. E) V --> E[V/x] E --> E (λ x. E) E --> (λ x. E) E 11/12/13 31 11/12/13 32