Semantics. Semantics

Similar documents
Semantic Analysis. Role of Semantic Analysis

CSC312 Principles of Programming Languages : Type System. Copyright 2006 The McGraw-Hill Companies, Inc.

Syntax Intro and Overview. Syntax

Ensuring a Rigorous Curriculum: Practices and Goals

Variables. Substitution

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

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

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

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

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.

Abstract Interpretation

Application: Programming Language Semantics

10/30/18. Dynamic Semantics DYNAMIC SEMANTICS. Operational Semantics. An Example. Operational Semantics Definition Process

Chapter 3 (part 3) Describing Syntax and Semantics

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

22c:111 Programming Language Concepts. Fall Syntax III

CSC 7101: Programming Language Structures 1. Operational Semantics. Winskel, Ch. 2 Slonneger and Kurtz Ch 8.4, 8.5, 8.6. Operational vs.

1 Lexical Considerations

CS558 Programming Languages

Outline. What is semantics? Denotational semantics. Semantics of naming. What is semantics? 2 / 21

Semantics. There is no single widely acceptable notation or formalism for describing semantics Operational Semantics

known as non-void functions/methods in C/C++/Java called from within an expression.

Functional Programming

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

Relation Overriding. Syntax and Semantics. Simple Semantic Domains. Operational Semantics

Lexical Considerations

Formal Semantics of Programming Languages

Program Syntax; Operational Semantics

Modules, Structs, Hashes, and Operational Semantics

Contents. Chapter 1 SPECIFYING SYNTAX 1

Formal Semantics of Programming Languages

CS4215 Programming Language Implementation

Lexical Considerations

These notes are intended exclusively for the personal usage of the students of CS352 at Cal Poly Pomona. Any other usage is prohibited without

(Not Quite) Minijava

CSc 520 Principles of Programming Languages

Intro to semantics; Small-step semantics Lecture 1 Tuesday, January 29, 2013

Semantic Analysis. Lecture 9. February 7, 2018

CS152 Programming Language Paradigms Prof. Tom Austin, Fall Syntax & Semantics, and Language Design Criteria

The Substitution Model

Program Representations

Denotational Semantics. Domain Theory

CMSC 330: Organization of Programming Languages. Operational Semantics

Programming Languages Third Edition

3.7 Denotational Semantics

Formal Languages and Grammars. Chapter 2: Sections 2.1 and 2.2

LECTURE 17. Expressions and Assignment

The PCAT Programming Language Reference Manual

In Our Last Exciting Episode

Principles of Programming Languages

CA4003 Compiler Construction Assignment Language Definition

Chapter 3. Semantics. Topics. Introduction. Introduction. Introduction. Introduction

Chapter 3. Describing Syntax and Semantics ISBN

Semantics of programming languages

CMSC 330: Organization of Programming Languages

The SPL Programming Language Reference Manual

Static semantics. Lecture 3-6: Semantics. Attribute grammars (2) Attribute grammars. Attribute grammars example. Dynamic semantics

COP 3330 Final Exam Review

High Level Languages. Java (Object Oriented) This Course. Jython in Java. Relation. ASP RDF (Horn Clause Deduction, Semantic Web) Dr.

CS2104 Prog. Lang. Concepts

22c:111 Programming Language Concepts. Fall Types I

Intermediate Code Generation

CS 242. Fundamentals. Reading: See last slide

Introduction to Programming (Java) 2/12

INSTITUTE OF AERONAUTICAL ENGINEERING

4 Bindings and Scope. Bindings and environments. Scope, block structure, and visibility. Declarations. Blocks. 2004, D.A. Watt, University of Glasgow

Programming Languages Lecture 15: Recursive Types & Subtyping

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

Chapter 3. Semantics. Topics. Introduction. Introduction. Introduction. Introduction

Recap: Functions as first-class values

The Substitution Model. Nate Foster Spring 2018

CS 6110 S14 Lecture 38 Abstract Interpretation 30 April 2014

Closures. Mooly Sagiv. Michael Clarkson, Cornell CS 3110 Data Structures and Functional Programming

CPS 506 Comparative Programming Languages. Syntax Specification

CS558 Programming Languages

This book is licensed under a Creative Commons Attribution 3.0 License

Motivation for typed languages

COSC252: Programming Languages: Semantic Specification. Jeremy Bolton, PhD Adjunct Professor

CSCE 314 Programming Languages. Type System

Integrating Formal Models into the Programming Languages Course

St. MARTIN S ENGINEERING COLLEGE Dhulapally, Secunderabad

Chapter 3. Describing Syntax and Semantics

CSc 520 Principles of Programming Languages. 26 : Control Structures Introduction

Compiler construction

CSE443 Compilers. Dr. Carl Alphonce 343 Davis Hall

Chapter 3. Describing Syntax and Semantics ISBN

Principles of Programming Languages

Semantic Analysis. How to Ensure Type-Safety. What Are Types? Static vs. Dynamic Typing. Type Checking. Last time: CS412/CS413

Pointers. Chapter 8. Decision Procedures. An Algorithmic Point of View. Revision 1.0

EI326 ENGINEERING PRACTICE & TECHNICAL INNOVATION (III-G) Kenny Q. Zhu Dept. of Computer Science Shanghai Jiao Tong University

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

The Arithmetic Operators. Unary Operators. Relational Operators. Examples of use of ++ and

Tree-based abstract syntax

The Arithmetic Operators

Induction and Semantics in Dafny

A Simple Syntax-Directed Translator

List Functions, and Higher-Order Functions

Lectures 20, 21: Axiomatic Semantics

Programming Languages Lecture 14: Sum, Product, Recursive Types

CSCI B522 Lecture 11 Naming and Scope 8 Oct, 2009

Transcription:

Semantics Semantics Semantics is a precise definition of the meaning of a syntactically and type-wise correct program. Ideas of meaning: Operational Semantics The meaning attached by compiling using compiler C and executing using machine M. Ex: Fortran on IBM 709 Axiomatic Semantics Formal specification to allow us to rigorously prove what the program does with a systematic logical argument Denotational Semantics Statements as state transforming functions We will focus on denotational semantics 1

Program State Definition: The state of a program is the binding of all active objects to their current values. Maps: 1.The pairing of active objects with specific memory locations, and 2. The pairing of active memory locations with their current values. E.g. given i = 13 and j = -1 Environment = {<i,154>,<j,155>} Memory = {<0, undef>, <154, 13>, <155, -1> } The current statement (portion of an abstract syntax tree) to be executed in a program is interpreted relative to the current state. The individual steps that occur during a program run can be viewed as a series of state transformations. 2

Assignment Semantics Three issues or approaches Multiple assignment Assignment statement vs. expression Copy vs. reference semantics Multiple Assignment Example: a = b = c = 0; Sets all 3 variables to zero. 3

Assignment Statement vs. Expression In most languages, assignment is a statement; cannot appear in an expression. In C-like languages, assignment is an expression. Example: if (a = 0)... // an error? while (*p++ = *q++) ; // strcpy while (p = p->next)... //??? Copy vs. Reference Semantics Copy: a = b; a, b have same value. Changes to either have no effect on other. Used in imperative languages. Reference a, b point to the same object. A change in object state affects both Used by many object-oriented languages. 4

State Transformations Defn: The denotational semantics of a language defines the meanings of abstract language elements as a collection of statetransforming functions. Defn: A semantic domain is a set of values whose properties and operations are independently well-understood and upon which the rules that define the semantics of a language can be based. Partial Functions State-transforming functions in the semantic definition are necessarily partial functions A partial function is one that is not welldefined for all possible values of its domain (input state) 5

C-Like Semantics State represent the set of all program states A meaning function M is a mapping: M: Program State M: Statement x State State M: Expression x State Value Meaning Rule - Program The meaning of a Program is defined to be the meaning of the body when given an initial state consisting of the variables of the decpart initialized to the undef value corresponding to the variable's type. State M (Program p) { // Program = Declarations decpart; Statement body return M(p.body, initialstate(p.decpart)); } public class State extends HashMap {... } 6

State initialstate (Declarations d) { State state = new State( ); for (Declaration decl : d) state.put(decl.v, Value.mkValue(decl.t)); return state; } Statements M: Statement x State State Abstract Syntax Statement = Skip Block Assignment Loop Conditional 7

State M(Statement s, State state) { if (s instanceof Skip) return M((Skip)s, state); if (s instanceof Assignment) return M((Assignment)s, state); if (s instanceof Block) return M((Block)s, state); if (s instanceof Loop) return M((Loop)s, state); if (s instanceof Conditional) return M((Conditional)s, state); throw new IllegalArgumentException( ); } Meaning Rule - Skip The meaning of a Skip is an identity function on the state; that is, the state is unchanged. State M(Skip s, State state) { } return state; 8

Meaning Rule - Assignment The meaning of an Assignment statement is the result of replacing the value of the target variable by the computed value of the source expression in the current state Assignment = Variable target; Expression source State M(Assignment a, State state) { return state.onion(a.target, M(a.source, state)); } // onion replaces the value of target in the map by the source // called onion because the symbol used is sometimes sigma σ to represent state 9

Meaning Rule - Conditional The meaning of a conditional is: If the test is true, the meaning of the thenbranch; Otherwise, the meaning of the elsebranch Conditional = Expression test; Statement thenbranch, elsebranch State M(Conditional c, State state) { if (M(c.test, state).boolvalue( )) return M(c.thenbranch, state); else return M(e.elsebranch, state); } 10

Expressions M: Expression x State Value Expression = Variable Value Binary Unary Binary = BinaryOp op; Expression term1, term2 Unary = UnaryOp op; Expression term Variable = String id Value = IntValue BoolValue CharValue FloatValue Meaning Rule Expr in State The meaning of an expression in a state is a value defined by: 1. If a value, then the value. Ex: 3 2. If a variable, then the value of the variable in the state. 3. If a Binary: a) Determine meaning of term1, term2 in the state. b) Apply the operator according to rule 8.8 (perform addition/subtraction/multiplication/division)... 11

Value M(Expression e, State state) { if (e instanceof Value) return (Value)e; if (e instanceof Variable) return (Value)(state.get(e)); if (e instanceof Binary) { Binary b = (Binary)e; return applybinary(b.op, M(b.term1, state), M(b.term2, state); }... Formalizing the Type System Approach: write a set of function specifications that define what it means to be type safe Basis for functions: Type Map, tm tm = { <v 1,t 1 >, <v 2,t 2 >, <v n,t n >} Each v i represents a variable and t i its type Example: int i,j; boolean p; tm = { <i, int>, <j, int>, <p, boolean> } 12

Declarations How is the type map created? When we declare variables typing: Declarations Typemap i.e. declarations produce a typemap More formally typing(declarations d) = n di. v, di. t i 1 i.e. the union of every declaration variable name and type In Java we implemented this using a HashMap Semantic Domains and States Beyond types, we must determine semantically what the syntax means Semantic Domains are a formalism we will use Environment, γ = set of pairs of variables and memory locations γ = {<i, 100>, <j, 101>} for i at Addr 100, j at Addr 101 Memory, μ = set of pairs of memory locations and the value stored there μ = {<100, 10>, <101, 50>} for Mem(100)=10, Mem(101)=50 State of the program, σ = set of pairs of active variables and their current values σ = {<i,10>, <j, 50>} for i=10, j=50 13

State Example x=1; y=2; z=3; At this point σ = {<x,1>,<y,2>,<z,3>} Notation: σ(y)=2 y=2*z+3; At this point σ = {<x,1>,<y,9>,<z,3>} w=4; At this point σ = {<x,1>,<y,9>,<z,3>, <w,4>} Can also have expressions; e.g. σ(x>0) = true Overriding Union State transformation represented using the Overriding Union X Y =replace all pairs <x,v> whose first member matches a pair <x,w> from Y by <x,w> and then add to X any remaining pairs in Y Example: { x,1 y,2 z,3 } 1 2 { y,9 w,4 { x,1 y,9 z,3 w,4 } 1 2 This will be used for assignment of a variable 14

Denotational Semantics all program states :Set of M : Meaning function Meaning function Input: abstract class, current state Output: new state M : Class Let s revisit our Meaning Rules and redefine them using our more Formal Denotational Semantics M : Program Denotational Semantics M ( Program p) M(p.body, init { v, undef 1 init ) v2, undef..., vn, undef } Meaning of a program: produce final state This is just the meaning of the body in an initial state Java implementation: State M (Program p) { // Program = Declarations decpart; Statement body return M(p.body, initialstate(p.decpart)); } public class State extends HashMap {... } 15

Meaning for Statements M : Statement State State M (Statement s, State σ) = M ((Skip) s, σ) M ((Assignment) s, σ) M ((Conditional) s, σ) M ((Loop) s, σ) M ((Block) s, σ) if s is a Skip if s is Assignment if s is Conditional if s is a Loop if s is a Block Semantics of Skip Skip M ( Skip s, State ) Skip statement can t change the state 16

Semantics of Assignment Evaluate expression and assign to var M : Assignment M ( Assignment a, State ) U{ a. target, M ( a. source, ) } Examples of: x=a+b { a,3 b,1 x,88 } M ( x a b;, ) U{ x, M ( a b, ) } { a,3 b,1 x,4 } Semantics of Conditional M ( Conditiona l c, State ) M ( c. thenbranch, ) M ( c. elsebranch, ) if M ( c. test, ) is otherwise true If (a>b) max=a; else max=b { a,3 b,1 } M (if (a b)max a; else M (max a;, ) M (max b;, ) max b;, ) if M ( a b, ) is true otherwise ; 17

Conditional, continued { a,3 b,1 } M (if (a b)max M (max a; else a;, ) max b;, ) since M ( a b, ) is true U{ max, 3 } { a,3 b,1 max, 3 } Semantics of Block Block is just a sequence of statements M ( Block b, State ) M (( Block ) b Example for Block b: fact = fact * i; i = i 1; if b 2... n, M (( Statement ) b1, )) if b b1b 2... b n 18

Block example b 1 = fact = fact * i; b 2 = i = i 1; M(b,σ) = M(b 2,M(b 1,σ)) = M(i=i-1,M(fact=fact*i,σ)) = M(i=i-1,M(fact=fact*i,{<i,3>,<fact,1>})) =M(i=i-1,{<i,3>,<fact,3>}) ={<i,2>,<fact,3>} b Semantics of Loop Loop = Expression test; Statement body M ( Loop l, State ) M ( l, M ( l. body, )) if M ( l. test, ) is true otherwise Recursive definition 19

Loop Example Initial state σ={<n,3>} fact=1; i=n; while (i>1) { fact = fact * i; i = i -1; } After first two statements, σ = {<fact,1>,<n,3>,<i,3>} Loop Example σ = {<fact,1>,<n,3>,<i,3>} M(while(i>1) { }, σ) = M(while(i>1) { }, M(fact=fact*i; i=i-1;, σ) = M(while(i>1) { }, M(fact=fact*i; i=i-1;,{<fact,3>,<n,3>,<i,2>})) = M(while(i>1) { }, M(fact=fact*i; i=i-1;,{<fact,6>,<n,3>,<i,1>})) = M(σ) ={<fact,6>,<n,3>,<i,1>} 20

Defining Meaning of Arithmetic Expressions for Integers First let s define ApplyBinary, meaning of binary operations: ApplyBinar y : Operator Value Value Value ApplyBinar y( Operator v v 1 1 1 2 v v 2 v v 2 floor v v 1 2 sign ( v op, Value v 1 v 2 ) 1, Value v if op if op if op * if op / 2 ) Denotational Semantics for Arithmetic Expressions Use our definition of ApplyBinary to expressions: M : Expression State Value M ( Expression e, State ) e if e is a Value ( e) if e is a Variable ApplyBinar y( e. op, M ( e. term1, ), M ( e. term 2, )) if e is a Binary Recall: op, term1, term2, defined by the Abstract Syntax term1,term2 can be any expression, not just binary 21

Arithmetic Example Compute the meaning of x+2*y Current state σ={<x,2>,<y,-3>,<z,75>} Want to show: M(x+2*y,σ) = -4 x+2*y is Binary From M(Expression e, State σ) this is ApplyBinary(e.op, M(e.term1, σ), M(e.term2,σ)) = ApplyBinary(+,M(x,σ),M(2*y,σ)) = ApplyBinary(+,2,M(2*y,σ)) M(2*y,σ) is also Binary, which expands to: ApplyBinary(*,M(2,σ), M(y,σ)) = ApplyBinary(*,2,-3) = -6 Back up: ApplyBinary(+,2,-6) = -4 Java Implementation Value M(Expression e, State state) { if (e instanceof Value) return (Value)e; if (e instanceof Variable) return (Value)(state.get(e)); if (e instanceof Binary) { Binary b = (Binary)e; return applybinary(b.op, M(b.term1, state), M(b.term2, state); }... Code close to the denotational semantic definition! 22