Programok értelmezése

Hasonló dokumentumok
Formális szemantika. Kifejezések szemantikája. Horpácsi Dániel ELTE Informatikai Kar

Kiterjesztések sek szemantikája

... S n. A párhuzamos programszerkezet két vagy több folyamatot tartalmaz, melyek egymással közös változó segítségével kommunikálnak.

Komputeralgebra Rendszerek

Osztott rendszer. Osztott rendszer informális definíciója

Formális szemantika. Bevezetés. Horpácsi Dániel

Matematikai logika. Nagy Károly 2009

S0-02 Típusmodellek (Programozás elmélet)

NEM-DETERMINISZTIKUS PROGRAMOK HELYESSÉGE. Szekvenciális programok kategóriái. Hoare-Dijkstra-Gries módszere

6. Közös változóval rendelkező párhuzamos program, Közös változó,

Java II. I A Java programozási nyelv alapelemei

Programozás BMEKOKAA146. Dr. Bécsi Tamás 2. előadás

Programozás alapjai. 5. előadás

BASH script programozás II. Vezérlési szerkezetek

Logika es sz am ıt aselm elet I. r esz Logika M asodik el oad as 1/26

Karakterkészlet. A kis- és nagybetűk nem különböznek, a sztringliterálok belsejét leszámítva!

8. Komponens elvű programfejlesztés. Ágens, akció, cél, kontraktus.

Fordítás Kódoptimalizálás

ködös határ (félreértés, hiba)

Dr. Schuster György február / 32

Kifejezések. Kozsik Tamás. December 11, 2016

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

Matematikai programok

Java II. I A Java programozási nyelv alapelemei

1. Fuggveny ertekek. a) f (x) = 3x 3 2x 2 + x 15 x = 5, 10, 5 B I. x = arcsin(x) ha 1 x 0 x = 1, arctg(x) ha 0 < x < + a) f (x) = 4 x 2 x+log

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

Dr. Jelasity Márk. Mesterséges Intelligencia I. Előadás Jegyzet (2008. október 6) Készítette: Filkus Dominik Martin

Kifejezések. Kozsik Tamás. December 11, 2016

Matematikai programok

C programozás. { Márton Gyöngyvér, 2009 } { Sapientia, Erdélyi Magyar Tudományegyetem }

Programozás alapjai. 2. előadás

Memo: Az alábbi, "természetes", Gentzen típusú dedukciós rendszer szerint készítjük el a levezetéseket.

Fordító részei. Fordító részei. Kód visszafejtés. Izsó Tamás szeptember 29. Izsó Tamás Fordító részei / 1

Modellellenőrzés. dr. Majzik István BME Méréstechnika és Információs Rendszerek Tanszék

Memóriagazdálkodás. Kódgenerálás. Kódoptimalizálás

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Logikai ágensek. Mesterséges intelligencia március 21.

Programozás BMEKOKAA146. Dr. Bécsi Tamás 3. előadás

Feldspar: Nyelv digitális jelfeldolgozáshoz

A C# programozási nyelv alapjai

Optimalizálási eljárások GYAKORLAT, MSc hallgatók számára. Analízis R d -ben

Stack Vezérlés szerkezet Adat 2.

Elsőrendű logika szintaktikája és szemantikája. Logika (3. gyakorlat) 0-adrendű szemantika 2009/10 II. félév 1 / 1

A Föld középpontja felé szabadon eső test sebessége növekszik, azaz, a

Funkcionális és logikai programozás. { Márton Gyöngyvér, 2012} { Sapientia, Erdélyi Magyar Tudományegyetem }

MATE-INFO UBB verseny, március 25. MATEMATIKA írásbeli vizsga

ÍTÉLETKALKULUS (NULLADRENDŰ LOGIKA)

Alapok. tisztán funkcionális nyelv, minden függvény (a konstansok is) nincsenek hagyományos változók, az első értékadás után nem módosíthatók

SQL bevezetés. Select-From-Where záradékok Több relációt tartalmazó lekérdezések Alkérdések

Fordító Optimalizálás

f(x) vagy f(x) a (x x 0 )-t használjuk. lim melyekre Mivel itt ɛ > 0 tetszőlegesen kicsi, így a a = 0, a = a, ami ellentmondás, bizonyítva

Alapvető polinomalgoritmusok

Adatok szűrése, rendezése

Komputeralgebra rendszerek

AWK programozás, minták, vezérlési szerkezetek

A C programozási nyelv I. Bevezetés

Numerikus módszerek 1.

A C programozási nyelv I. Bevezetés

Komputeralgebra rendszerek

Logika és informatikai alkalmazásai kiskérdések február Mikor mondjuk, hogy az F formula a G-nek részformulája?

Felügyelt önálló tanulás - Analízis III.

Logika es sz am ıt aselm elet I. r esz Logika 1/36

Operációs Rendszerek II. labor. 2. alkalom

S z á m í t ó g é p e s a l a p i s m e r e t e k

Ítéletkalkulus. 1. Bevezet. 2. Ítéletkalkulus

A félév során előkerülő témakörök

Elsőrendű logika. Mesterséges intelligencia március 28.

Programozás C- és Matlab nyelven C programozás kurzus BMEKOKAM603 Előfeldolgozó rendszer Tömbök. Dr. Bécsi Tamás 4. Előadás

Komputeralgebra Rendszerek

Logika nyelvészeknek, 12. óra A típuselmélet alapjai. Lehetőség van a kvantorfogalom mellett a funktorfogalom általánosítására is.

Bevezetés a programozáshoz I. Feladatok

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás 2. előadás

AWK programozás, minták, vezérlési szerkezetek

BABEŞ BOLYAI TUDOMÁNYEGYETEM MATEMATIKA ÉS INFORMATIKA KAR BBTE Matek-Infó verseny 1. tételsor INFORMATIKA írásbeli. A versenyzők figyelmébe:

BABEŞ-BOLYAI TUDOMÁNYEGYETEM MATEMATIKA-INFORMATIKA KAR Felvételi verseny - minta Informatika írásbeli

Differenciálszámítás. 8. előadás. Farkas István. DE ATC Gazdaságelemzési és Statisztikai Tanszék. Differenciálszámítás p. 1/1

2019, Funkcionális programozás. 2. el adás. MÁRTON Gyöngyvér

Segédanyagok. Formális nyelvek a gyakorlatban. Szintaktikai helyesség. Fordítóprogramok. Formális nyelvek, 1. gyakorlat

Algoritmizálás és adatmodellezés tanítása 1. előadás

Kaposi Ambrus. University of Nottingham Functional Programming Lab. Hackerspace Budapest január 6.

C programozási nyelv

2. Logika gyakorlat Függvények és a teljes indukció

sallang avagy Fordítótervezés dióhéjban Sallai Gyula

Programozás burritokkal

A szemantikus elemzés elmélete. Szemantikus elemzés (attribútum fordítási grammatikák) A szemantikus elemzés elmélete. A szemantikus elemzés elmélete

A programozás alapjai előadás. Amiről szólesz: A tárgy címe: A programozás alapjai

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Függvények július 13. f(x) = 1 x+x 2 f() = 1 ()+() 2 f(f(x)) = 1 (1 x+x 2 )+(1 x+x 2 ) 2 Rendezés után kapjuk, hogy:

5. előadás. Programozás-elmélet. Programozás-elmélet 5. előadás

KOMPUTER-ALGEBRA RENDSZEREK VERIFIKÁCIÓJA

Programozási nyelvek 6. előadás

A PROGRAMOZÁS ALAPJAI 3. Készítette: Vénné Meskó Katalin

FFT. Második nekifutás. Czirbusz Sándor ELTE IK, Komputeralgebra Tanszék október 2.

Informatika terméktervezőknek

BOOLE ALGEBRA Logika: A konjunkció és diszjunkció tulajdonságai

Szkriptnyelvek. 1. UNIX shell

Exponenciális, logaritmikus függvények

Logikai függvények osztályai. A függvényosztály a függvények egy halmaza.

Intermec EasyCoder PM4i nyomtató programozásának alapjai Intermec Fingerprint v8.00 nyelven

Átírás:

Programok értelmezése Kód visszafejtés. Izsó Tamás 2016. szeptember 22. Izsó Tamás Programok értelmezése/ 1

Section 1 Programok értelmezése Izsó Tamás Programok értelmezése/ 2

programok szemantika értelmezése Formális szemantika segítségével precízen megadhatjuk, értelmezhetjük a program, hardware, stb viselkedését. felhasználhatjuk pecíz, egyértelmű, és mindenre kiterjedő dokumentumok készítéséhez. alapjául szolgálhat a programok, berendezések implementálásához, analíziséhez, a működés helyességének bizonyításához. Szemantika és szintaktika fogalma: Szintaktika a programok nyelvi szerkezetével, szemantika a szintaktikailag korrekt program értelmezésével foglakozik. Izsó Tamás Programok értelmezése/ 3

Szemantikák Operációs (más néven műveleti) szemantika azzal foglalkozik, hogy az egyes utasítások hatására egy absztrakt gép belső állapota hogyan változik a program végrehajtása során. Axiomatikus szemantika az absztrakt gép állapotainak tulajdonságait vizsgálja a program végrehajtása során. A módszer a matematikai logikára támaszkodik, és a főbb felhasználási területe a programok helyességének a bizonyítása. Denotációs szemantika valamilyen szintaktikai szabály alapján helyesen leírt szöveg egy másik tartományon (ez általában a matematikai tartomány) történő értelmezésével foglalkozik. Izsó Tamás Programok értelmezése/ 4

Denotációs szemantika [[(1 + 2) 3]] = 9 absztrakt szintaktika Értelmezés szemantikai tartomány S[[.]], A[[.]], B[[.]], N [[.]],... szemantikai függvények Izsó Tamás Programok értelmezése/ 5

Numerikus konstans kiértékelése Szintaktikai tartomány d: Digit decimális számjegy karakter n : Numeral numerikus literál Absztrakt származtatási szabályok d ::= 0 1 2 3 4 5 6 7 8 9 n ::= d n d Szemantikai tartomány Number = 0, 1, 2, 3, 4,... természetes számok Izsó Tamás Programok értelmezése/ 6

Numerikus konstans kiértékelése Szemantikai függvények N : Numeral Number Szemantikai egyenletek N [[n d]] = 10 N [[n]] + N [[d]] N [[0]] = 0 N [[3]] = 3 N [[6]] = 6 N [[8]] = 8 N [[1]] = 1 N [[4]] = 4 N [[7]] = 7 N [[9]] = 9 N [[2]] = 2 N [[5]] = 5 Izsó Tamás Programok értelmezése/ 7

Numerikus konstans kiértékelésre példa N [[165]] = 10 N [[16]] + N [[5]]) = 10 N [[16]] + 5 = 10 (10 N [[1]] + N [[6]]) + 5 = 10 (10 N [[1]] + 6) + 5 = 10 (10 1 + 6) + 5 = 10 16 + 5 = 160 + 5 = 165 Izsó Tamás Programok értelmezése/ 8

Mini imperatív While programozási nyelv n : Numeral x : Var változók a : Aexp aritmetikai kifejezés b : Bexp logikai kifejezés S : Stm utasítás Az egyes kategoriákba tartozó neveket indexeléssel különböztetjük meg, például n 1, n 2.... Izsó Tamás Programok értelmezése/ 9

While nyelv szintaxisa a ::= n x a 1 + a 2 a 1 a 2 a 1 a 2 b ::= true false a 1 = a 2 a 1 a 2 b b 1 b 2 S ::= x := a skip S 1 ; S 2 if b then S 1 else S 2 while b do S Izsó Tamás Programok értelmezése/ 10

Programállapot Változó és memória (program állapot) megfeletetése. Az SV a memóriában tárolható értékek halmaza: SV = Number Boolean {undefined} Példa : s=[x 1 5, x 2 9, x 3 110, x 200 tt] s x 2 = 9 s x 8 = undefined Izsó Tamás Programok értelmezése/ 11

Absztrakt tártoló Programming Language Idealized Store Abstracts (Numbers) Names a b 17.3 29.2 Numerals 23 23 Expression a + b Vector (Name) V 46.5 Szemantikai függvények: Loc = Val Env = Id Loc Store = Loc Val State = Store Env Vector Element (Expr) V[2] Commands a := a + b (Operation) Θ Izsó Tamás Programok értelmezése/ 12

Programállapot kiértékelése β 3 x = α3 x! = α3 β 2 x = α2 x! = α2 x = α1 β 1 x! = α1 s0 x s3 s2 s1 Izsó Tamás Programok értelmezése/ 13

Aritmetikai kifejezések szemantikája A : Aexp (State Number) A[[n]]s = N [[n]] A[[x]]s = s x A[[a 1 +a 2 ]]s = A[[a 1 ]]s + A[[a 2 ]]s A[[a 1 -a 2 ]]s = A[[a 1 ]]s A[[a 2 ]]s A[[a 1 *a 2 ]]s = A[[a 1 ]]s A[[a 2 ]]s Példa: s=[x 1 5, x 2 9, x 3 110, x 200 tt] A[[x 1 + 2]]s = A[[x 1 ]]s + A[[2]]s = s x 1 + N [[2]] = 5 + 2 = 7 Izsó Tamás Programok értelmezése/ 14

Logikai kifejezések szemantikája B : Bexp (State Boolean) B[[true]]s = tt B[[false]]s = ff { tt ha A[[a1 ]]s = A[[a B[[a 1 = a 2 ]]s = 2 ]]s ff ha A[[a 1 ]]s A[[a 2 ]]s { tt ha A[[a1 ]]s A[[a B[[a 1 a 2 ]]s = 2 ]]s ff ha A[[a 1 ]]s > A[[a 2 ]]s { tt ha B[[b]]s = ff B[[ b]]s = ff ha B[[b]]s = tt { tt ha B[[b1 ]]s = tt és B[[b B[[b 1 b 2 ]]s = 2 ]]s = tt ff ha B[[b 1 ]]s = ff vagy B[[b 2 ]]s = ff Izsó Tamás Programok értelmezése/ 15

Utasítások szemantikája S : Stm (State State) S[[x := a]]s = s[x A[[a]]s ] S[[skip]] = id S[[S 1 ; S 2 ]] = S[[S 2 ]] S[[S 1 ]] S[[if b then S 1 else S 2 ]] = cond(b[[b]], S[[S 1 ]], S[[S 2 ]]) S[[while b do S]]s = FixF ahol Fg = cond(b[[b]], g S[[S]], id) Izsó Tamás Programok értelmezése/ 16

Összetett utasítások szemantikája S[[S 1 ; S 2 ]]s = = S[[S 2 ]] S[[S 1 ]] = s ha létezik az s állapot S[[S 1 ]]s = s és S[[S 2 ]]s = s undef ha S[[S 1 ]]s = undef vagy s létezik, de S[[S 2 ]]s = undef Izsó Tamás Programok értelmezése/ 17

cond szemantikai függvény cond : (State T ) (State State) (State State) (State State) S[[if b then S 1 else S 2 ]]s = cond(b[[b]], S[[S 1 ]], S[[S 2 ]])s = s ha B[[b]]s = tt és S[[S 1 ]]s = s vagy B[[b]]s = ff és S[[S 2 ]]s = s undef ha B[[b]]s = tt és S[[S 1 ]]s = undef vagy ha B[[b]]s = ff és S[[S 2 ]]s = undef Izsó Tamás Programok értelmezése/ 18

while utasítás szemantikája Operációs szemantika megadja, hogy egy adott állapotból melyik állapotba kerül a rendszer. Ez alapján mondhatnánk: S[[while b do S]] = S[[if b then( S ; while b do S) else skip]] Denotációs szemantika esetén azonban ez nem adja meg helyesen a while utasítás jelentését. Ugyanakkor S[[while b do S]] = S[[if b then( S ; while b do S) else skip]] = Cond(B[[b]], S[[ S ; while b do S]], S[[skip]]) = Cond(B[[b]], S[[while b do S]] S[[S]], id Σ ) A következő jelölés bevezetésével, g := S[[while b do S]] megkapjuk a g = Cond(B[[b]], g S[[S]], id Σ ) rekurzív definícióval adott függvényt, amelynek a fix pontját kell meghatározni. Izsó Tamás Programok értelmezése/ 19

while utasítás szemantikája S[[while b do S]] = Fix F ahol F g = cond(b[[b]], g S[[S]], id) Fix : ((State State) (State State)) (State State) Program: while (x = 0) do x := x 1; Keressük azt a g függvényt, ami eleget tesz a következő feltételnek { g(s[[x := x 1]]s) ha s x 0 (F g)s = s ha s x = 0 Megoldás: g(s) = { s[x 0] ha s x 0 undefined ha s x < 0 Izsó Tamás Programok értelmezése/ 20

Mi az hogy fixpont Matematikai Illusztráció! F(x, y) if x = y then y + 1 else F(x, F(x 1, y + 1)) f 1 (x, y) : if x = y then y + 1 else x + 1 f 2 (x, y) : if x y then x + 1 else y 1 f 3 (x, y) : if x y (x y páros ) then x + 1 else undefined Izsó Tamás Programok értelmezése/ 21

Fixpont kiszámítása g 0 = undefined { g 1 s[x 0] ha s x = 0 = g 0 (S[[x := x 1]]s) ha s x 0 { s[x 0] ha s x = 0 = undefined ha s x 0 { g 2 s[x 0] ha s x = 0 = g 1 (S[[x := x 1]]s) ha s x 0 s[x 0] ha s x = 0 = s[x 0] ha s x 1 = 0 undefined ha s x < 0 s x > 1 Izsó Tamás Programok értelmezése/ 22

Fixpont kiszámítása folytatás { g 3 s[x 0] ha s x = 0 = g 2 (S[[x := x 1]]s) ha s x 0 s[x 0] ha s x = 0 s[x 0] ha s x 1 = 0 = s[x 0] ha s x 2 = 0 undefined ha s x < 0 s x > 2. lim i gi (s) = { s[x 0] ha s x 0 undefined ha s x < 0 Izsó Tamás Programok értelmezése/ 23

2. példa (feladat) Program: y : = 1 ; while (x = 1) do ( y := y x ; x := x 1); 1 Az utasítások szemantikai értelmezése (16. dia) alapján írja fel a while szematikai értelmezését. 2 Számolja ki felírt függvény fixpontját. Izsó Tamás Programok értelmezése/ 24

2. példa (megoldás) Program: y : = 1 ; while (x = 1) do ( y := y x ; x := x 1); Keressük azt a g függvényt, ami eleget tesz a következő feltételnek { g(s[[y := y x ; x := x 1]]s) ha B[[ (x = 1)]]s = tt (F g)s = s ha B[[ (x = 1)]]s = ff Vagy ezzel ekvivalens, { g(s[y (s y) (s x)][x (s x) 1]) ha s x 1 (F g)s = s ha s x = 1 Izsó Tamás Programok értelmezése/ 25

2. példa Fixpont kiszámítása folytatás I g 0 = undefined { g 1 s ha s x = 1 = undefined ha s x 1 { g 2 s ha s x = 1 = g 1 (s[y (s y) (s x)][x (s x) 1]) ha s x 1 s ha s x = 1 = s[y (s y) 2][x 1] ha s x = 2 undefined ha s x 1 s x 2 Izsó Tamás Programok értelmezése/ 26

2. példa Fixpont kiszámítása folytatás II { g 3 s ha s x = 1 = g 2 (s[y (s y) (s x)][x (s x) 1]) ha s x 1 s ha s x = 1 s[y (s y) 2][x 1] ha s x = 2 = s[y (s y) 2 3][x 1] ha s x = 3 undefined ha s x 1 s x 2 s x 3... ahol s = s 0 [y 1] Izsó Tamás Programok értelmezése/ 27