Programspråkssemantik Hur programspråk ska tolkas
Programspråkssemantik Läran om språklig betydelse Tolkning av uttryck Hur datatyper och uttryck kan manipuleras och hur de ska hanteras
Statisk semantik Tillstånd vid tidpunkt för kompilering Beskriver de regler som är svåra för syntaxregler att beskriva Exempel: Variabeldeklaration innan referering Definierar ofta olika typer av objekt Hur ska dessa hanteras? Hur interagerar dessa?
Metoder för semantikbeskrivning Operationell semantik Axiomatisk semantik Denotationssemantik
Operationell semanik Översätt till lättförståeligt språk Olika abstraktionsnivåer Naturlig: Beskriver programmets slutresultat Strukturerad: Beskriver exakt mening med ett uttryck
Axiomatisk semantik Utvecklad för att bevisa korrekthet Grundad i predikatlogiken Logiska uttryck innan och efter alla uttryck som beskriver begränsningar Generellt: {P} S {Q} Exempel: {x > 0} sum = 2 * x + 1 {sum > 1}
Axiomatisk semantik Inferering: Generellt:S1, S2,...,Sn S Exempel: {x>3} x=x-3 {x>0}, (x>5)=>(x>3),(x>0)=>(x>0) {x>5} x=x-3 {x>0} Korrekthet: Räkna ut precondition utifrån postcondition från programmets slut
Denotationssemantik Matematiska objekt kallade denotationer Delarnas innebörd ger objektets innebörd Rekursiva funktioner Använder parse trees
Denotationssemantik Exempel: → ’0’ | ’1’ | ’0’ | ’1’ Mbin(’0’) = 0 Mbin(’1’) = 1 Mbin( ’0’) = 2 * Mbin( ) Mbin( ’1’) = 2 * Mbin( ) + 1
Skillnad mellan statisk och dynamisk semantik Statisk Givet ögonblick Vid kompilering Exempel Typkontroll
Skillnad mellan statisk och dynamisk semantik (2) Dynamisk Hur förändring sker Vid exekvering Exempel Division med noll Indexeringkontroll