Formal Semantics of Programming Languages

Similar documents
Formal Semantics of Programming Languages

Formal Semantics of Programming Languages

Formal Syntax and Semantics of Programming Languages

Formal Syntax and Semantics of Programming Languages

Program Analysis: Lecture 02 Page 1 of 32

Exercises on Semantics of Programming Languages

Semantics with Applications 3. More on Operational Semantics

PROGRAM ANALYSIS & SYNTHESIS

Application: Programming Language Semantics

Big-step Operational Semantics (aka Natural Semantics)

Programming Languages Third Edition

Lecture 5 - Axiomatic semantics

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

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

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

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

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

Chapter 3 (part 3) Describing Syntax and 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.

In Our Last Exciting Episode

Formal semantics of loosely typed languages. Joep Verkoelen Vincent Driessen

CMSC 330: Organization of Programming Languages

Introduction to Denotational Semantics. Class Likes/Dislikes Survey. Dueling Semantics. Denotational Semantics Learning Goals. You re On Jeopardy!

Induction and Semantics in Dafny

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

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

Type Inference Systems. Type Judgments. Deriving a Type Judgment. Deriving a Judgment. Hypothetical Type Judgments CS412/CS413

Type Checking. Outline. General properties of type systems. Types in programming languages. Notation for type rules.

Outline. General properties of type systems. Types in programming languages. Notation for type rules. Common type rules. Logical rules of inference

Fall Compiler Principles Lecture 5: Intermediate Representation. Roman Manevich Ben-Gurion University of the Negev

3.7 Denotational Semantics

Pierce Ch. 3, 8, 11, 15. Type Systems

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

Introduction to Denotational Semantics. Brutus Is An Honorable Man. Class Likes/Dislikes Survey. Dueling Semantics

Propositional Logic Formal Syntax and Semantics. Computability and Logic

A Simple Syntax-Directed Translator

Denotational Semantics

Chapter 3. Describing Syntax and Semantics ISBN

Fall Compiler Principles Lecture 6: Intermediate Representation. Roman Manevich Ben-Gurion University of the Negev

Lectures 20, 21: Axiomatic Semantics

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

02157 Functional Programming Interpreters for two simple languages including exercises

Operational Semantics. One-Slide Summary. Lecture Outline

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

Static Program Analysis

Lexical Considerations

The exercises and answer for programming language class

Chapter 3. Describing Syntax and Semantics

CSCE 314 Programming Languages

Principles of Programming Languages

Part II. Hoare Logic and Program Verification. Why specify programs? Specification and Verification. Code Verification. Why verify programs?

Intermediate Code Generation

Chapter 3. Describing Syntax and Semantics

Chapter 3: Syntax and Semantics. Syntax and Semantics. Syntax Definitions. Matt Evett Dept. Computer Science Eastern Michigan University 1999

Lexical Considerations

Computation Club: Gödel s theorem

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

Foundations: Syntax, Semantics, and Graphs

CMSC 330: Organization of Programming Languages. Operational Semantics

1 Lexical Considerations

Static Program Analysis

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

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

More Untyped Lambda Calculus & Simply Typed Lambda Calculus

Computer Science Department Carlos III University of Madrid Leganés (Spain) David Griol Barres

Introduction to Scheme

Syntax vs. semantics. Detour: Natural deduction. Syntax vs. semantics (cont d) Syntax = grammatical structure Semantics = underlying meaning

Programming Languages Third Edition. Chapter 7 Basic Semantics

CSE 12 Abstract Syntax Trees

COS 320. Compiling Techniques

3. DESCRIBING SYNTAX AND SEMANTICS

More on Operational Semantics

7. Introduction to Denotational Semantics. Oscar Nierstrasz

The semantics of a programming language is concerned with the meaning of programs, that is, how programs behave when executed on computers.

Program Representations

More on Syntax. Agenda for the Day. Administrative Stuff. More on Syntax In-Class Exercise Using parse trees

Crafting a Compiler with C (II) Compiler V. S. Interpreter

Type Systems. Today. 1. Organizational Matters. 1. Organizational Matters. Lecture 1 Oct. 20th, 2004 Sebastian Maneth. 1. Organizational Matters

CS422 - Programming Language Design

CS2104 Prog. Lang. Concepts

CHAPTER 10 GRAPHS AND TREES. Alessandro Artale UniBZ - artale/

CONVENTIONAL EXECUTABLE SEMANTICS. Grigore Rosu CS422 Programming Language Design

3.1 IMP: A Simple Imperative Language

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

Verifying Safety Property of Lustre Programs: Temporal Induction

CS152: Programming Languages. Lecture 2 Syntax. Dan Grossman Spring 2011

Principles of Programming Languages

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

YOLOP Language Reference Manual

CS 6110 S14 Lecture 1 Introduction 24 January 2014

Denotational Semantics

Calculating Correct Compilers

The role of semantic analysis in a compiler

Static Program Analysis Part 1 the TIP language

2 Introduction to operational semantics

CSE450. Translation of Programming Languages. Lecture 11: Semantic Analysis: Types & Type Checking

Introduction to Axiomatic Semantics (1/2)

CS558 Programming Languages

Principles of Programming Languages

Motivation was to facilitate development of systems software, especially OS development.

Transcription:

Formal Semantics of Programming Languages Mooly Sagiv Reference: Semantics with Applications Chapter 2 H. Nielson and F. Nielson http://www.daimi.au.dk/~bra8130/wiley_book/wiley.html

Benefits of formal definitions Intellectual Better understanding Formal proofs Mechanical checks by computer Tool generations 2

What is a good formal definition? Natural Concise Easy to understand Permits effective mechanical reasoning 3

Syntax vs. Semantics The pattern of formation of sentences or phrases in a language Examples Regular expressions Context free grammars The study or science of meaning in language Examples Interpreter Compiler Better mechanisms will be given in the course 4

Syntax Programming Languages Which string is a legal program? Usually defined using context free grammar+ contextual constraints Semantics What does a program mean? What is the output of the program on a given run? When does a runtime error occur? A formal definition

Who need formal semantics for PL? Language designers Compiler designers [Programmers] 6

Example C++ Designed with a source to source compiler to C Many issues Especially later 7

Type Safety A programming language is type safe if every well typed program has no undefined semantics No runtime surprise Is C type safe? How about Java? 8

Breaking Safety in C void foo(s) { char c[100]; strcpy(c, s); } 9

Pointers a = malloc( ) ; b = a; free (a); c = malloc ( ); if (b == c) printf( unexpected equality ); 10

A Pathological C Program a = malloc( ) ; b = a; free (a); c = malloc ( ); if (b == c) printf( unexpected equality ); 11

A Pathological C Program a = malloc( ) ; b = a; free (a); c = malloc ( ); if (b == c) printf( unexpected equality ); 12

A Pathological C Program a = malloc( ) ; b = a; free (a); c = malloc ( ); if (b == c) printf( unexpected equality ); 13

Alternative Formal Semantics Operational Semantics The meaning of the program is described operationally Natural Operational Semantics Structural Operational Semantics Denotational Semantics The meaning of the program is an input/output relation Mathematically challenging but complicated Axiomatic Semantics The meaning of the program are observed properties 14

[x 3] int fact(int x) { int z, y; z = 1; y= x while (y>0) { z = z * y ; y = y 1; } return z } [x 3, z, y ] [x 3, z 1, y ] [x 3, z 1, y 3] [x 3, z 1, y 3] [x 3, z 3, y 3] [x 3, z 3, y 2] 15

int fact(int x) { int z, y; z = 1; y= x while (y>0) { z = z * y ; y = y 1; } return z } [x 3, z 3, y 2] [x 3, z 3, y 2] [x 3, z 6, y 2] [x 3, z 6, y 1] 16

int fact(int x) { int z, y; z = 1; y= x while (y>0) { z = z * y ; y = y 1; } return z } [x 3, z 6, y 1] [x 3, z 6, y 1] [x 3, z 6, y 1] [x 3, z 6, y 0] 17

int fact(int x) { int z, y; z = 1; y= x; while (y>0) { z = z * y ; y = y 1; } return z } [x 3, z 6, y 0] [x 3, z 6, y 0] 18

int fact(int x) { int z, y; z = 1; y= x; while (y>0) { z = z * y ; y = y 1; } return 6 } [x 3, z 6, y 0] 19

int fact(int x) { int z, y; z = 1; Denotational Semantics y= x ; while (y>0) { z = z * y ; y = y 1; } return z; f= x. if x = 0 then 1 else x * f(x -1) } 20

{x=n} int fact(int x) { int z, y; z = 1; {x=n z=1} y= x {x=n z=1 y=n} while {x=n y 0 z=n! / y!} (y>0) { {x=n y >0 z=n! / y!} z = z * y ; {x=n y>0 z=n!/(y-1)!} y = y 1; {x=n y 0 z=n!/y!} } return z} {x=n z=n!} Axiomatic Semantics 21

The While Programming Language Abstract syntax S::= x := a skip S 1 ; S 2 if b then S 1 else S 2 while b do S Use parenthesizes for precedence Informal Semantics skip behaves like no-operation Import meaning of arithmetic and Boolean operations 22

Example While Program y := 1; while (x=1) do ( y := y * x; x := x 1; ) 23

General Notations Syntactic categories Var the set of program variables Aexp the set of arithmetic expressions Bexp the set of Boolean expressions Stm set of program statements Semantic categories Natural values N={0, 1, 2, } Truth values T={ff, tt} States State = Var N Lookup in a state s: s x Update of a state s: s [ x 5] 24

Example State Manipulations [x 1, y 7, z 16] y = [x 1, y 7, z 16] t = [x 1, y 7, z 16][x 5] = [x 1, y 7, z 16][x 5] x = [x 1, y 7, z 16][x 5] y = 25

Semantics of arithmetic expressions Assume that arithmetic expressions are side-effect free A Aexp : State N Defined by structural induction on the syntax tree A n s = n A x s = s x A e 1 + e 2 s = A e 1 s + A e 2 s A e 1 * e 2 s = A e 1 s * A e 2 s A ( e 1 ) s = A e 1 s --- not needed A - e 1 s = -A e 1 s 26

Properties of arithmetic expressions The semantics is compositional A e 1 op e 2 = op (A e 1, A e 2 ) Properties can be proved by structural induction We say that e 1 is semantically equivalent to e 2 (e 1 e 2 ) when A e 1 = A e 2 27

Commutativity of expressions Theorem: for every expressions e 1, e 2 : e 1 + e 2 e 2 + e 1 Proof: A e 1 + e 2 s = A e 1 s + A e 2 s = A e 2 s + A e 1 s = A e 2 + e 1 s 28

Semantics of Boolean expressions Assume that Boolean expressions are side-effect free B Bexp : State T Defined by induction on the syntax tree B true s = tt B false s = ff B e 1 = e 2 s = B e 1 e 2 s = tt if A e 1 s = A e 2 s ff if A e 1 s A e 2 s tt if B e 1 s = tt and B e 2 =tt ff if B e 1 s=ff or B e 2 s=ff B e 1 e 2 s = tt if A e 1 s A e 2 s ff if A e 1 s < A e 2 s 29

Natural Operational Semantics Describe the overall effect of program constructs Ignores non terminating computations 30

Natural Semantics Notations <S, s> - the program statement S is executed on input state s s representing a terminal (final) state For every statement S, write meaning rules <S, i> o If the statement S is executed on an input state i, it terminates and yields an output state o The meaning of a program P on an input state i is the set of outputs states o such that <P, i> o The meaning of compound statements is defined using the meaning immediate constituent statements 31

axioms rules Natural Semantics for While [ass ns ] <x := a, s> s[x A a s] [skip ns ] <skip, s> s [comp ns ] <S 1, s> s, <S 2, s > s <S 1 ; S 2, s> s [if tt ns] <S 1, s> s <if b then S 1 else S 2, s> s if B b s=tt [if ff ns] <S 2, s> s <if b then S 1 else S 2, s> s if B b s=ff 32

Natural Semantics for While (More rules) [while ff ns] <while b do S, s> s if B b s=ff [while tt ns] <S, s> s, <while b do S, s > s <while b do S, s> s if B b s=tt 33

Simple Examples Let s 0 be the state which assigns zero to all program variables Assignments [ass ns ] <x := x+1, s 0 > s 0 [x 1] Skip statement [skip ns ] <skip, s 0 > s 0 Composition [comp ns ] <skip,s 0 > s 0, <x := x+1, s 0 > s 0 [x 1] <skip; x := x +1, s 0 > s 0 [x 1] 34

Simple Examples (Cont) Let s 0 be the state which assigns zero to all program variables if-construct [if tt ns] <skip,s 0 > s 0 <if x=0 then skip else x := x +1, s 0 > s 0 35

A Derivation Tree A proof that <S, s> s The root of tree is <S, s> s Leaves are instances of axioms Internal nodes rules Immediate children match rule premises Simple Example <skip; x := x +1, s 0 > s 0 [x 1]> <skip, s 0 > s 0 compns < x := x +1, s 0 > s 0 [x 1]> 36

An Example Derivation Tree <(x :=x+1; y :=x+1) ; z := y), s0> s0[x 1][y 2][z 2] compns <z :=y,s0[x 1][y 2]> s0[x 1][y 2][z 2] <x :=x+1; y :=x+1, s0> s0[x 1][y 2] compns assns assns <x :=x+1; s0> s0[x 1] <y :=x+1, s0[x 1]> s0[x 1][y 2] assns 37

Top Down Evaluation of Derivation Trees Given a program S and an input state s Find an output state s such that <S, s> s Start with the root and repeatedly apply rules until the axioms are reached Inspect different alternatives in order In While s and the derivation tree is unique 38

Example of Top Down Tree Construction Input state s such that s x = 2 Factorial program <y := 1; while (x=1) do (y := y * x; x := x - 1), s> compns s[y 2][x 1] <W, s[y 1] > s[y 2][x 1 <y :=1, s> s[y 1] assns <(y := y * x ; x := x -1, s[y 1]> s[y 2][x 1] > compns while tt ns <W, s[y 2][x 1] s[y 2][x 1 while ff ns <y := y * x ; s[y 1]> s[y 2] > <x := x - 1, s[y 2] > s[y 2][x 1] assns assns 39

Program Termination Given a statement S and input s S terminates on s if there exists a state s such that <S, s> s S loops on s if there is no state s such that <S, s> s Given a statement S S always terminates if for every input state s, S terminates on s S always loops if for every input state s, S loops on s 40

Semantic Equivalence S 1 and S 2 are semantically equivalent if for all s and s (s s ) <S 1, s> s if and only if <S 2, s> s 41

Example of Semantic Equivalence skip ; skip skip (S 1 ; S 2 ) ; S 3 ) (S 1 ;( S 2 ; S 3 )) x := 5 ; y := x * 8 x :=5; y := 40 while b do S if b then (S ; while b do S) else skip 42

Deterministic Semantics for While If <S, s> s 1 and <S, s> s 2 then s 1 =s 2 The proof uses induction on the shape of derivation trees Prove that the property holds for all simple derivation trees by showing it holds for axioms Prove that the property holds for all composite trees: For each rule assume that the property holds for its premises (induction hypothesis) and prove it holds for the conclusion of the rule 43

The Semantic Function S ns The meaning of a statement S is defined as a partial function from State to State S ns : Stm (State State) S ns S s = s if <S, s> s and otherwise S ns S s is undefined Examples S ns skip s =s S ns x :=1 s = s [x 1] S ns while true do skip s = undefined 44

Summary Natural Semantics Simple Useful Enables simple proofs of language properties Automatic generation of interpreters But limited Concurrency 45