Top Banner
Dec 16. 2003 Formal Semantics 1 Programming Language Theory Formal Semantics Leif Grönqvist •The national Graduate School of Language Technology (GSLT) •MSI
52

Programming Language Theory Formal Semantics

Jan 04, 2016

Download

Documents

Melissa Stanley

Programming Language Theory Formal Semantics. Leif Grönqvist The national Graduate School of Language Technology (GSLT) MSI. Contents. Leif’s three parts of the course: Functional programming Logical programming Similar ways of thinking, but different from the imperative way - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 1

Programming Language TheoryFormal Semantics

Leif Grönqvist•The national Graduate School of Language Technology (GSLT)

•MSI

Page 2: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 2

Contents

Leif’s three parts of the course:

• Functional programming

• Logical programming

Similar ways of thinking, but different from the imperative way

• Formal semantics

Page 3: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 3

Formal Semantics?

• You have seen informal semantics (meaning) earlier in the course

• Most languages don’t have a complete formal specification

• Why defining a formal specification?– Possibility to make proofs of programs– The compiler may be validated– Easier to build a compiler!

• No agreed standard to describe semantics

Page 4: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 4

Principal methods• Operational semantics

– Define the language by describing its actions as operations of a machine

– The machine has to be precisely defined

• Denotational semantics– Uses mathematical functions on programs– Programs are translated into functions– Standard mathematical theory of functions is used

• Axiomatic semantics– Uses mathematical logic– Pre and post conditions– Aimed specifically at correctness proofs

Page 5: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 5

Principal methods, cont.

• The three methods are based on BNF-rules (Backus-Naur Form)

• Syntax described in BNF – semantics is the rest, i.e. – Static types (could be syntax)– Semantic rules

• Important properties for the semantics:– Completeness: all correct programs will get semantics– Consistence: one program -> one unique description– Independence: should be minimal

Page 6: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 6

A small example language

expr expr + term | expr - term | term

term term * factor | factor

factor ( expr ) | number

number number digit | digit

digit 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

Example: 4 * (50 - 3)

Page 7: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 7

Expand the example

• Let’s add variables, statements, and assignments:

factor ( expr ) | number | identifierprogram stmtListstmtList stmt ; stmtList | stmtstmt identifier := expridentifier identifier letter | letterletter a | b | c | … | z

Page 8: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 8

Example of a programa := 2 + 3 ;b := a * 4 ;a := b - 5 ;• Will result in: b=20 and a=15• {b=20, a=15} represents the semantics of this

program– A function from the set of identifiers to integers– We will call this function an environment

Env (I) = 15 if I = a20 if I = bundef otherwise

Page 9: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 9

Operations on environments

Env : Identifier Integer {undef}• Lookup: Env (I)• Adding: Env & {I = n}• The empty environment:

Env0(I) = undef for all I

• More complex environments include pointers, aliases, scope information

Page 10: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 10

Expand a little bit more

• Let’s add if and while statements:

stmt assignStmt | ifStmt | whileStmtassignStmt identitfier := exprifStmt if expr then stmtList else stmtList fiwhileStmt while expr do stmtList od

• Expressions are True if the value > 0

Page 11: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 11

An example

n := 0 - 5 ;if n then i := n else i := 0 - n fi ;f := 1 ;while i do

f := f * i ;i := i - 1

od• The semantics is {n=5, i=0, f=120}

Page 12: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 12

An abstract syntax

• A simplified version of the syntax• Useful, since the parsing already done• The program is correct• To make it more compact we use:P: Program L: Statement listS: Statement E: ExpressionN: Number D: DigitI: Identifier A: Letter

Page 13: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 13

The abstract syntax

P L

L L1 ; L2 | S

S I := E | if E then L1 else L2 fi | while E do L od

E E1 + E2 | E1 - E2 | E1 * E2 | ( E1 ) | N

N N1 D | D

D 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

I I1 A | A

A a | b | c | … | z

Page 14: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 14

Abstract syntax, cont.

• Semantic rules are defined for each right-hand side in terms of the semantics for their parts

• Note that the indexes on the letters are important

• Important to distinguish between + and the ordinary +

• A rule will tell us to replace + by + later

Page 15: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 15

Operational semantics

• Describes how a program is to be executed on a known machine

• If the machine is a computer, the operational semantics is a translator (compiler) from the language to machine code for the computer

• Fortran and C has been defined this way• The machine could also be an abstract machine,

simple enough to be understood and simulated by hand

Page 16: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 16

A reduction machine

• Our example language may be translated to semantic values using reduction rules:

( 3 + 4 ) * 5 (add the numbers)(7) * 5 (drop parentheses)7 * 5 (multiply the numbers)35

• The rules are similar to logical inference rules

Page 17: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 17

Logical inference rules

• The rules are written in the form:– premise

conclusion

• For example: a + b = c

b + a = c

a b, b c

a c

Page 18: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 18

Logical inference rules, cont.

• If we don’t have a premise, the rule is called an axiom:

a + 0 = a

• Often written as: a + 0 = a

Page 19: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 19

Reduction rules: arithmetics

• We have the following abstract semantics:

E E1 + E2 | E1 - E2 | E1 * E2 | ( E1 ) | N

N N1 D | DD 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9E: Expression, N: Number, D: Digit

• This may look complicated but we have to give the semantics somewhere

Page 20: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 20

Reduction rules, cont.• First all the digits (axioms)

0 0, 1 1, …, 9 9 (rule 1)

• Numbers (rule 2):

V0 10*V, V1 10*V+1,…, V9 10*V+9

• And the operations (rule 3-6):

V1 + V2 V1 + V2 V1 - V2 V1 - V2

V1 * V2 V1 * V2 ( V ) V

Page 21: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 21

Reduction rules, expressions

• Expressions may be reduced in steps if they contain of two expression with an operator between (rule 7-9)

E E1

E + E2 E1 + E2

E E1

E - E2 E1 - E2

E E1

E * E2 E1 * E2

Page 22: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 22

Reduction rules, cont.

• If the left side of an operator has evaluated to a value, then evaluate the right side (rule 10-12):

E E1

V + E V + E1

E E1

V - E V - E1

E E1

V * E V * E1

Page 23: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 23

Reduction rules, cont.

• Reduce the expression inside parentheses:

(rule 13)

• Transitivity – expressions may be evaluated in steps

(rule 14)

E E1

( E ) ( E1 )

E E1, E1 E2

E E2

Page 24: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 24

Example of a reduction

• We start with the expression: 2 * (3 + 4) – 5 (rule 1, 7)2 * (3 + 4) – 5 (rule 1, 10)2 * (3 + 4) – 5 (rule 3)2 * (7) – 5 (rule 1, 12)2 * 7 – 5 (rule 5)14 – 5 (rule 11, 1)14 – 5 (rule 4)9

Page 25: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 25

Adding environments

• Recall the rest of the abstract syntax:P LL L1 ; L2 | SS I := E | if E then L1 else L2 fi | while E do L odE E1 + E2 | E1 - E2 | E1 * E2 | ( E1 ) | NP: Program L: Statement listS: Statement E: Expression• We have to add an environment:

Env : Identifier Integer {undef}• It has to be updated in the reduction rules

Page 26: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 26

Environments, cont.

• <E | Env> indicates that E evaluates in the environment Env

• Most rules do not change Env:

• If Env changes, we have a side effect

<E | Env> <E1 | Env> <E - E2 | Env> <E1 - E2 | Env>

Page 27: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 27

Environments, cont.

• If I has the value V (rule 15):

• A rule for assignment (rule 16):

<I := V | Env> < | Env & {I = V}>

• Expressions in assignments (rule 17):

Env (I) = V <I | Env> <V | Env>

<E | Env> <E1 | Env> <I := E | Env> < | := E1 | Env>

Page 28: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 28

Environments, cont.

• A statement sequence (rule 18):

• A program needs an empty environment (rule 19):

L <L | Env0>

<S | Env> < | Env1 > <S ; L | Env> < L | Env1>

Page 29: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 29

A small example

• The program:

a := 2 + 3 ;

b := a * 4 ;

a := b - 5 ;

• Rule 19 gives:

a := 2 + 3 ; b := a * 4 ; a := b - 5 ;

< a := 2 + 3 ; b := a * 4 ; a := b - 5 | Env0>

Page 30: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 30

Example, cont.

• Rules 3 gives:

< a := 2 + 3 | Env0> < a := 5 | Env0> • And rule 16, 17:

< a := 5 | Env0> < | Env0 & {a=5}> {a=5}• Rule 18:

< a := 2 + 3 ; b := a * 4 ; a := b - 5 | Env0>

<b := a * 4 ; a := b - 5 | {a=5} >

Page 31: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 31

Example, cont.

• Rule 15, 9, 5, 16, 17:

<b := a * 4 | {a=5} > <b := 5 * 4 | {a=5} > <b := 20 | {a=5}> <| {a=5} & {b=20}> <| {a=5, b=20}• Rule 18:

<b := a * 4 ; a := b - 5 | {a=5} > <a := b – 5 | {a=5, b=20}>• And then:<a := b – 5 | {a=5, b=20}> <a := 15 | {a=5, b=20}> {a=5, b=20} & {a=15} = {a=15, b=20}

Page 32: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 32

if and while statements

• Recall the abstract syntax:

S I := E | if E then L1 else L2 fi | while E do L od

I: Identifier L: Statement list

S: Statement E: Expression

• We need three rules for the if statement:

Page 33: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 33

The if statement<E | Env> <E1 | Env>

<if E then L1 else L2 fi | Env>

<if E then L1 else L2 fi | Env>

V > 0

<if V then L1 else L2 fi | Env> <L1 | Env>

V ≤ 0

<if V then L1 else L2 fi | Env> <L2 | Env>

Page 34: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 34

The while statement

<E | Env> <V | Env>, V ≤ 0

<while E do L od | Env> Env

<E | Env> <V | Env>, V > 0

<while E do L od | Env> <L ; while E do L od | Env>

• Note that the second rule is recursive!

Page 35: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 35

A while example

i := 3; f := 1 ;while i do

f := f * i ;i := i - 1

od

<f := f * i | {i=3, f=1}> <f := 1 * 3 | {i=3, f=1}> <f := 3 | {i=3, f=1}> {i=3, f=3} and<i := i - 1 | {i=3, f=3}> {i=2, f=3}

Page 36: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 36

A while example, cont.

< while i do f := f * i ; i := i - 1 od | {i=3, f=1}> <f := f * i ; i := i - 1 ; while i do f := f * i ; i := i - 1 od | {i=3, f=1}> <i := i - 1 ; while i do f := f * i ; i := i - 1 od | {i=3, f=3}> <while i do f := f * i ; i := i - 1 od | {i=2, f=3}> <f := f * i ; i := i - 1 ; while i do f := f * i ; i := i - 1 od | {i=2, f=3}> <i := i - 1 ; while i do f := f * i ; i := i - 1 od | {i=2, f=6}> <while i do f := f * i ; i := i - 1 od | {i=1, f=6}> <f := f * i ; i := i - 1 ; while i do f := f * i ; i := i - 1 od | {i=1, f=6}> <while i do f := f * i ; i := i - 1 od | {i=0, f=6}> {i=0, f=6}• And we are finally done!

Page 37: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 37

Implementing operational semantics

• An “executable specification”• Gives us an interpreter• Now we can test the language before we implement a

real compiler• Easily done in Prolog!• 3 * (4 + 5) is represented as the fact:

times(3, plus(4, 5)).• a := 2 + 3 ; b:= a * 4 ; a := b - 5 becomes:

seq (assign (a, plus(2, 3)), seq (assign (b, times (a, 4)), assign (a, sub (b, 5)))).

• This is actually a tree

Page 38: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 38

Implementing operational semantics, cont.

• Reduction rule #3 could look like:reduce (plus(V1, V2), R) :-

integer(V1), integer(V2), !, R in V1 + V2.• Rule #7 becomes:

reduce (plus (E, E2), plus (E1, E2)) :- reduce (E, E1).• Lookup in an environment (rule 15):reduce (config (I, Env), config (V, Env)) :-

atom (I), !, lookup (Env, I, V).• Update an environment (rule 16):reduce (config (assign (I, V), Env), Env1) :-

integer (V), !, update (Env, value (I, V), Env1).

Page 39: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 39

Denotational semantics

• Now we will use functions to describe the semantics:Val: Expression Integer

• So Val (2 + 3 * 4) should be 14• Val maps a syntactic domain (the set of correct

arithmetic expressions) to a semantic domain (the set of integers)

• We need more function to cover the example language:P: Program (Input Output)

• Syntactic domain: The set of correct programs• Semantic domain: The set of functions that gives us the

correct answer from the possible inputs

Page 40: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 40

Denotational semantics, cont.

• We need three parts– Definitions of the syntactic domains– Definitions of the semantic domains– Definitions of the semantic functions

• The syntactic domain looks almost like the abstract syntax:N N D | DD 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9N: Number, D: Digit

Page 41: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 41

The Semantic domain

• A set that contains all answers to possible inputs• For the numbers, it’s just {0, 1, …}• The integers with its operations could look like:

Domain v: Integer = {…, -2, -1, 0, 1, 2, …}

Operations:

+ : Integer x Integer Integer

- : Integer x Integer Integer

* : Integer x Integer Integer

Page 42: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 42

The Semantic function

• For each syntactic domain we need a semantic function, for example:

D: Digit Integer (defined by:)D[[0]] = 0, D[[1]] = 1, …, D[[9]] = 9

N: Number IntegerN[[ND]] = 10 * N[[N]] + N[[D]]N[[D]] = D[[D]]

Page 43: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 43

Some more parts from the example

• The semantic functions for the arithmetics:E: Expression Integer

E[[E1 + E2]] = E[[E1]] + E[[E2]]

E[[E1 * E2]] = E[[E1]] * E[[E2]]E[[( E )]] = E[[E]]E[[N]] = N[[N]]etc.

• The complete example in section 13.3.4-13.3.5

Page 44: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 44

Environments

• The environments forms a new semantic domainDomain Env: Environment =

Identifier Integer {undef}• And expressions:

E: Expression (Environment Integer┴• The identifier rule:E[[I]] (Env) = Env (I)

Page 45: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 45

Statements

• Recall the syntactic domain:

S I := E | if E then L1 else L2 fi | while E do L odL: Statement list, S: Statement , E: Expression• And the semantic domain is:

S: Statement Environment Environment• The semantic function for the if-statement:

S [[if E then L1 else L2 fi]] (Env) =if E [[E]] (Env) > 0 then

L[[L1]](Env) else L[[L2]](Env)

Page 46: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 46

Implementation• Denotational semantics fits very well into a functional

programming language• The abstract syntax may look like:data Expr = Val Int | Ident String | Plus Expr Expr | Minus

Expr Expr | Times Expr Expr• If we have implemented the environment with lookup and

insert the evaluation function may look like:exprE :: Expr -> Environment -> IntexprE (Plus e1 e2) env = (exprE e1 env) + (exprE e2 env)exprE (Minus e1 e2) env = (exprE e1 env) - (exprE e2 env)exprE (Times e1 e2) env = (exprE e1 env) * (exprE e2 env)exprE (Val n) env = nexprE (Ident a) env = lookup env a

Page 47: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 47

Axiomatic semantics

• The basis for mathematical proofs of programs

• We define what should be true before and after the program is evaluated (sometimes called assertions):x := x + 1

• Precondition: {x = A}• Postcondition: {x = A+1}• This example works fine for all values A

Page 48: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 48

Axiomatic semantics, cont.

• We have to make sure that A0{A0, y=A}x := 1 / y{x = 1 / y}• A sort example:{n≥1, if 1 ≤ i ≤ n then a [i] = A [i]}sort-program{sorted (a), permutation (a, A)}

Page 49: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 49

Assertions

• Some languages have support for assertions, in C for example:

#include <assert.h>…assert (y != 0)x = 1/y;…• If y is 0 the program halts without executing the illegal

division:Assertion failed at test.c line 27: y != 0Exiting due to signal SIGABRT• Throwing exceptions in Java also works

Page 50: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 50

The weakest precondition

• If we think of a program and its pre/post conditions as: {P} C {Q}

• Then the weakest precondition (wp) is the one that is:– Strong enough as a precondition– Not stronger than any of the other possible

preconditions• Example: for C= 1/y, y>0 or y<0 is enough but

y0 is weaker, and strong enough• One way to describe {P} C {Q} is:

{P} C {Q} iff P wp (C, Q)

Page 51: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 51

Examples and properties of wp

• Some examples to get the idea:wp (“x:=1/y”, {x=1/y}) = {y0}wp (“x:=x+1”, {x=A}) = {x=A-1}• Some properties of wp:

– Law of excluded miracle: wp (C, false) = false– Distributive laws:

wp (C, P and Q) = wp (C, P) and wp (C, Q)wp (C, P) or wp (C, Q) wp (C, P or Q)

– Law of monotonicity: if Q R then wp (C, P) wp (C, R)

Page 52: Programming Language Theory Formal Semantics

Dec 16. 2003 Formal Semantics 52

Use of wp in proofs

• So if we want to prove the correctness of a program C according to {P} C {Q}

• We have to prove that P wp (C, Q)

• Very difficult for most programs!

• Useful if correctness is extremely important and difficult to test, example:– The micro code in a processor– Programs in space crafts, power plants, etc.