Operational Semantics. One-Slide Summary. Lecture Outline

Similar documents
Operational Semantics of Cool

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

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

Operational Semantics of Cool

Operational Semantics

Compilers. Cool Semantics II. Alex Aiken

Operational Semantics of Cool

More Static Semantics. Static. One-Slide Summary. Lecture Outline. Typing Rules. Dispatch Rules SELF_TYPE

Lecture Outline. Type systems and their expressiveness. Type Checking in COOL (II) Type checking with SELF_TYPE in COOL

Type Checking in COOL (II) Lecture 10

Passing Out Review Forms

Scoping rules match identifier uses with identifier definitions. A type is a set of values coupled with a set of operations on those values.

Semantic Analysis. Lecture 9. February 7, 2018

1 Lexical Considerations

CoolAid: The Cool Reference Manual

Lexical Considerations

Lexical Considerations

More Static Semantics

Lecture Outline. Type systems and their expressiveness. Type Checking in COOL (II) Type checking with SELF_TYPE in COOL

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

Program Abstractions, Language Paradigms. CS152. Chris Pollett. Aug. 27, 2008.

The Cool Reference Manual

Types. Type checking. Why Do We Need Type Systems? Types and Operations. What is a type? Consensus

Overview of Semantic Analysis. Lecture 9

COS 320. Compiling Techniques

type environment updated subtype sound

Grade Weights. Language Design and Overview of COOL. CS143 Lecture 2. Programming Language Economics 101. Lecture Outline

Exceptions. One-Slide Summary. Language System Structure

More Static Semantics

CSE 341: Programming Languages

Informal Semantics of Data. semantic specification names (identifiers) attributes binding declarations scope rules visibility

Programming Languages Third Edition

Semantic Analysis and Type Checking

CS558 Programming Languages

Principles of Programming Languages

Programming Languages Third Edition. Chapter 7 Basic Semantics

Formal Semantics of Programming Languages

CMSC 330: Organization of Programming Languages. Operational 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.

Semantic Analysis. Outline. The role of semantic analysis in a compiler. Scope. Types. Where we are. The Compiler so far

Syntax and Grammars 1 / 21

The Compiler So Far. CSC 4181 Compiler Construction. Semantic Analysis. Beyond Syntax. Goals of a Semantic Analyzer.

} Evaluate the following expressions: 1. int x = 5 / 2 + 2; 2. int x = / 2; 3. int x = 5 / ; 4. double x = 5 / 2.

Cunning Plan. One-Slide Summary. Functional Programming. Functional Programming. Introduction to COOL #1. Classroom Object-Oriented Language

CS1622. Semantic Analysis. The Compiler So Far. Lecture 15 Semantic Analysis. How to build symbol tables How to use them to find

Formal Semantics of Programming Languages

CS 565: Programming Languages. Spring 2008 Tu, Th: 16:30-17:45 Room LWSN 1106

Application: Programming Language Semantics

CS171:Introduction to Computer Science II

Mutable References. Chapter 1

The role of semantic analysis in a compiler

Written Assignment 5 Due??

CSCE 314 Programming Languages. Type System

From IMP to Java. Andreas Lochbihler. parts based on work by Gerwin Klein and Tobias Nipkow ETH Zurich

1 Introduction. 3 Syntax

Project 5 Due 11:59:59pm Tuesday, April 25, 2017

Acknowledgement. CS Compiler Design. Semantic Processing. Alternatives for semantic processing. Intro to Semantic Analysis. V.

Overview. Why Pointers?

Introduction to Axiomatic Semantics

The Compiler So Far. Lexical analysis Detects inputs with illegal tokens. Overview of Semantic Analysis

IC Language Specification

Simply-Typed Lambda Calculus

In Our Last Exciting Episode

Programming Assignment IV Due Thursday, November 18th, 2010 at 11:59 PM

Compilers and computer architecture: A realistic compiler to MIPS

Lecture 15 CIS 341: COMPILERS

(Refer Slide Time: 4:00)

6.184 Lecture 4. Interpretation. Tweaked by Ben Vandiver Compiled by Mike Phillips Original material by Eric Grimson

Programming Project 4: COOL Code Generation

(Not Quite) Minijava

Semantic Analysis. Outline. The role of semantic analysis in a compiler. Scope. Types. Where we are. The Compiler Front-End

LECTURE 16. Functional Programming

CS164: Programming Assignment 5 Decaf Semantic Analysis and Code Generation

COMP 181. Agenda. Midterm topics. Today: type checking. Purpose of types. Type errors. Type checking

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

The Decaf Language. 1 Lexical considerations

Tail Calls. CMSC 330: Organization of Programming Languages. Tail Recursion. Tail Recursion (cont d) Names and Binding. Tail Recursion (cont d)

Lecture 14. No in-class files today. Homework 7 (due on Wednesday) and Project 3 (due in 10 days) posted. Questions?

Project 5 Due 11:59:59pm Wed, Nov 25, 2015 (no late submissions)

Formal Semantics. Chapter Twenty-Three Modern Programming Languages, 2nd ed. 1

Functional Programming. Pure Functional Programming

Winter Compiler Construction Who. Mailing list and forum

Lecture 7: Type Systems and Symbol Tables. CS 540 George Mason University

Syntax-Directed Translation. Lecture 14

Programmiersprachen (Programming Languages)

Compilers. Type checking. Yannis Smaragdakis, U. Athens (original slides by Sam

CS143 Final Spring 2016

CS558 Programming Languages

6.001 Notes: Section 15.1

Basic concepts. Chapter Toplevel loop

Array Basics: Outline. Creating and Accessing Arrays. Creating and Accessing Arrays. Arrays (Savitch, Chapter 7)

Lecture 3 Notes Arrays

A Short Summary of Javali

Programming Language Concepts, cs2104 Lecture 04 ( )

Chapter 4 Defining Classes I

CS143 Final Fall 2009

Chapter 1 Getting Started

CS558 Programming Languages. Winter 2013 Lecture 3

Reference Grammar Meta-notation: hfooi means foo is a nonterminal. foo (in bold font) means that foo is a terminal i.e., a token or a part of a token.

IR Generation. May 13, Monday, May 13, 13

Transcription:

Operational Semantics #1 One-Slide Summary Operational semantics are a precise way of specifying how to evaluate a program. A formal semantics tells you what each expression means. Meaning depends on context: a variable environment will map variables to memory locations and a store will map memory locations to values. #2 Lecture Outline COOL operational semantics Motivation Notation The rules #3 1

Motivation We must specify for every Cool expression what happens when it is evaluated This is the meaning of an expression The definition of a programming language: The tokens lexical analysis The grammar syntactic analysis The typing rules semantic analysis The evaluation rules interpretation #4 Evaluation Rules So Far So far, we specified the evaluation rules intuitively We described how dynamic dispatch behaved in words (e.g., just like Java ) We talked about scoping, variables, arithmetic expressions (e.g., they work as expected ) Why isn t this description good enough? #5 Assembly Language Description of Semantics We might just tell you how to compile it But assembly-language descriptions of language implementation have too many irrelevant details Which way the stack grows How integers are represented on a particular machine The particular instruction set of the architecture We need a complete but not overly restrictive specification #6 2

Programming Language Semantics There are many ways to specify programming language semantics They are all equivalent but some are more suitable to various tasks than others Operational semantics Describes the evaluation of programs on an abstract machine Most useful for specifying implementations This is what we will use for Cool #7 Other Kinds of Semantics Denotational semantics The meaning of a program is expressed as a mathematical object Elegant but quite complicated Axiomatic semantics Useful for checking that programs satisfy certain correctness properties e.g., that the quick sort function sorts an array The foundation of many program verification systems #8 Introduction to Operational Semantics Once, again we introduce a formal notation Using logical rules of inference, just like typing Recall the typing judgment Context e : C (in the given context, expression e has type C) We try something similar for evaluation Context e : v (in the given context, expression e evaluates to value v) #9 3

Example Operational Semantics Inference Rule Context e 1 : 5 Context e 2 : 7 Context e 1 + e 2 : 12 In general the result of evaluating an expression depends on the result of evaluating its subexpressions The logical rules specify everything that is needed to evaluate an expression #10 What Contexts Are Needed? Contexts are needed to handle variables Consider the evaluation of y x + 1 We need to keep track of values of variables We need to allow variables to change their values during the evaluation We track variables and their values with: An environment : tells us at what address in memory is the value of a variable stored A store : tells us what is the contents of a memory location #11 Variable Environments A variable environment is a map from variable names to locations Tells in what memory location the value of a variable is stored Locations = Memory Addresses Environment tracks in-scope variables only Example environment: E = [a : l 1, b : l 2 ] To lookup a variable a in environment E we write E(a) #12 4

Stores A store maps memory locations to values Example store: S = [l 1 5, l 2 7] To lookup the contents of a location l 1 in store S we write S(l 1 ) To perform an assignment of 12 to location l 1 we write S[12/l 1 ] This denotes a new store S such that S (l 1 ) = 12 and S (l) = S(l) if l l 1 #13 Cool Values All values in Cool are objects All objects are instances of some class (the dynamic type of the object) To denote a Cool object we use the notation X(a 1 = l 1,, a n = l n ) where X is the dynamic type of the object a i are the attributes (including those inherited) l i are the locations where the values of attributes are stored #14 Cool Values (Cont.) Special cases (classes without attributes) Int(5) the integer 5 Bool(true) the boolean true String(4, Cool ) the string Cool of length 4 There is a special value void that is a member of all types No operations can be performed on it Except for the test isvoid Concrete implementations might use NULL here #15 5

Operational Rules of Cool The evaluation judgment is so, E, S e : v, S read: Given so the current value of the self object And E the current variable environment And S the current store If the evaluation of e terminates then The returned value is v And the new store is S #16 Notes The result of evaluating an expression is both a value and a new store Changes to the store model side-effects side-effects = assignments to variables The variable environment does not change Nor does the value of self The operational semantics allows for nonterminating evaluations We define one rule for each kind of expression #17 Operational Semantics for Base Values so, E, S true : Bool(true), S i is an integer literal so, E, S i : Int(i), S No side effects in these cases (the store does not change) so, E, S false : Bool(false), S s is a string literal n is the length of s so, E, S s : String(n,s), S #18 6

Operational Semantics of Variable References E(id) = l id S(l id ) = v so, E, S id : v, S Note the double lookup of variables First from name to location Then from location to value The store does not change A special case: so, E, S self : so, S #19 Operational Semantics of Assignment so, E, S e : v, S 1 E(id) = l id S 2 = S 1 [v/l id ] A three step process so, E, S id e : v, S 2 Evaluate the right hand side a value v and a new store S 1 Fetch the location of the assigned variable The result is the value v and an updated store The environment does not change #20 Operational Semantics of Conditionals so, E, S e 1 : Bool(true), S 1 so, E, S 1 e 2 : v, S 2 so, E, S if e 1 then e 2 else e 3 : v, S 2 The threading of the store enforces an evaluation sequence e 1 must be evaluated first to produce S 1 Then e 2 can be evaluated The result of evaluating e 1 is a boolean object The typing rules ensure this There is another, similar, rule for Bool(false) #21 7

Operational Semantics of Sequences so, E, S e 1 : v 1, S 1 so, E, S 1 e 2 : v 2, S 2 so, E, S n-1 e n : v n, S n so, E, S { e 1 ; ; e n ; } : v n, S n Again the threading of the store expresses the intended evaluation sequence Only the last value is used But all the side-effects are collected (how?) #22 Operational Semantics of while (1) so, E, S e 1 : Bool(false), S 1 so, E, S while e 1 loop e 2 pool : void, S 1 If e 1 evaluates to Bool(false) then the loop terminates immediately With the side-effects from the evaluation of e 1 And with result value void The typing rules ensure that e 1 evaluates to a boolean object #23 Operational Semantics of while (2) so, E, S e 1 : Bool(true), S 1 so, E, S 1 e 2 : v, S 2 so, E, S 2 while e 1 loop e 2 pool : void, S 3 so, E, S while e 1 loop e 2 pool : void, S 3 Note the sequencing (S S 1 S 2 S 3 ) Note how looping is expressed Evaluation of while is expressed in terms of the evaluation of itself in another state The result of evaluating e 2 is discarded Only the side-effect is preserved #24 8

Operational Semantics of let Expressions (1) so, E, S e 1 : v 1, S 1 so,?,? e 2 : v, S 2 so, E, S let id : T e 1 in e 2 : v 2, S 2 What is the context in which e 2 must be evaluated? Environment like E but with a new binding of id to a fresh location l new Store like S 1 but with l new mapped to v 1 #25 Operational Semantics of let Expressions (II) We write l new = newloc(s) to say that l new is a location that is not already used in S Think of newloc as the dynamic memory allocation function The operational rule for let: so, E, S e 1 : v 1, S 1 l new = newloc(s 1 ) so, E[l new /id], S 1 [v 1 /l new ] e 2 : v 2, S 2 so, E, S let id : T e 1 in e 2 : v 2, S 2 #26 Operational Semantics of new Consider the expression new T Informal semantics Allocate new locations to hold the values for all attributes of an object of class T Essentially, allocate a new object Initialize those locations with the default values of attributes Evaluate the initializers and set the resulting attribute values Return the newly allocated object #27 9

Default Values For each class A there is a default value denoted by D A D int = Int(0) D bool = Bool(false) D string = String(0, ) D A = void (for all others classes A) #28 More Notation For a class A we write class(a) = (a 1 : T 1 e 1,, a n : T n e n ) where a i are the attributes (including inherited ones) T i are their declared types e i are the initializers This is the class map from PA4! #29 Operational Semantics of new Observation: new SELF_TYPE allocates an object with the same dynamic type as self T 0 = if T == SELF_TYPE and so = X( ) then X else T class(t 0 ) = (a 1 : T 1 e 1,, a n : T n e n ) l i = newloc(s) for i = 1,,n v = T 0 (a 1 = l 1,,a n = l n ) E = [a 1 : l 1,, a n : l n ] S 1 = S[D T1 /l 1,,D Tn /l n ] v, E, S 1 { a 1 e 1 ; ; a n e n ; } : v n, S 2 so, E, S new T : v, S 2 #30 10

Operational Semantics of new The first three lines allocate the object The rest of the lines initialize it By evaluating a sequence of assignments State in which the initializers are evaluated Self is the current object Only the attributes are in scope (same as in typing) Starting value of attributes are the default ones Side-effects of initialization are preserved #31 Operational Semantics of Method Dispatch Consider the expression e 0.f(e 1,,e n ) Informal semantics: Evaluate the arguments in order e 1,,e n Evaluate e 0 to the target object Let X be the dynamic type of the target object Fetch from X the definition of f (with n args) Create n new locations and an environment that maps f s formal arguments to those locations Initialize the locations with the actual arguments Set self to the target object and evaluate f s body #32 More Notation For a class A and a method f of A (possibly inherited) we write: imp(a, f) = (x 1,, x n, e body ) where x i are the names of the formal arguments e body is the body of the method This is the imp map from PA4! #33 11

Operational Semantics of Dispatch so, E, S e 1 : v 1, S 1 so, E, S 1 e 2 : v 2, S 2 so, E, S n-1 e n : v n, S n so, E, S n e 0 : v 0, S n+1 v 0 = X(a 1 = l 1,, a m = l m ) imp(x, f) = (x 1,, x n, e body ) l xi = newloc(s n+1 ) for i = 1,,n E = [x 1 : l x1,, x n : l xn, a 1 : l 1,,a m : l m ] S n+2 = S n+1 [v 1 /l x1,,v n /l xn ] v 0, E, S n+2 e body : v, S n+3 Evaluate arguments Evaluate receiver object Find type and attribtues Find formals and body New environment New store Evaluate body so, E, S e 0.f(e 1,,e n ) : v, S n+3 #34 Operational Semantics of Dispatch The body of the method is invoked with E mapping formal arguments and self s attributes S like the caller s except with actual arguments bound to the locations allocated for formals The notion of the activation frame is implicit New locations are allocated for actual arguments The semantics of static dispatch is similar except the implementation of f is taken from the specified class #35 Runtime Errors Operational rules do not cover all cases Consider for example the rule for dispatch: so, E, S n e 0 : v 0,S n+1 v 0 = X(a 1 = l 1,, a m = l m ) imp(x, f) = (x 1,, x n, e body ) so, E, S e 0.f(e 1,,e n ) : v, S n+3 What happens if imp(x, f) is not defined? Cannot happen in a well-typed program (because of the Type Safety Theorem) #36 12

Runtime Errors There are some runtime errors that the type checker does not try to prevent A dispatch on void Division by zero Substring out of range Heap overflow In such case the execution must abort gracefully With an error message not with segfault #37 Conclusions Operational rules are very precise Nothing is left unspecified Operational rules contain a lot of details Read them carefully Most languages do not have a well specified operational semantics When portability is important an operational semantics becomes essential But not always using the exact notation we used for Cool #38 Homework WA5 due this Today at 1pm PA4 due Friday March 30 th (8 days) For Tuesday: Read Dataflow and Basic Block articles #39 13