Denotační sémantika. Marek Běhálek

Podobné dokumenty
Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

Úvod do programovacích jazyků (Java)

Programovací jazyk Pascal

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

Algoritmizace a programování

Algoritmizace prostorových úloh

Algoritmizace prostorových úloh

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Úvod do programování - Java. Cvičení č.4

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Identifikátory označují objekty v programu používané (proměnné, typy, podprogramy).

VISUAL BASIC. Přehled témat

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Odvozené a strukturované typy dat

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Řídicí struktury. alg3 1

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

PŘETĚŽOVÁNÍ OPERÁTORŮ

ALGORITMIZACE A PROGRAMOVÁNÍ

Algoritmy I. Cvičení č. 2, 3 ALGI 2018/19

Zápis programu v jazyce C#

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5

Analýza toku dat. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. 15. listopad, 2012

Programovací jazyk. - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi)

Úvod. Programovací paradigmata

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Funkcionální programování. Kristýna Kaslová

DTP Základy programování Úvod do předmětu

Automaty a gramatiky(bi-aag) Formální překlady. 5. Překladové konečné automaty. h(ε) = ε, h(xa) = h(x)h(a), x, x T, a T.

Inovace výuky prostřednictvím šablon pro SŠ

1 Píklady popisu typických konstrukcí

Spojová implementace lineárních datových struktur

Třídy a struktury v C++

Masarykova střední škola zemědělská a Vyšší odborná škola, Opava, příspěvková organizace

Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný

Jazyk C# a platforma.net

Vstupní požadavky, doporučení a metodické pokyny

Software602 Form Designer

Úvod do databázových systémů

PODPROGRAMY PROCEDURY A FUNKCE

Definice 7.2. Nejmenší přirozené číslo k, pro které je graf G k-obarvitelný, se nazývá chromatické číslo (barevnost) grafu G a značí se χ(g).

Virtuální počítač. Uživatelský program Překladač programovacího jazyka Operační systém Interpret makroinstrukcí Procesor. PGS K.

Paměť počítače. alg2 1

5 Přehled operátorů, příkazy, přetypování

PB161 Programování v jazyce C++ Přednáška 9

2. lekce Algoritmus, cyklus Miroslav Jílek

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Racionální čísla, operátory, výrazy, knihovní funkce

Funkce, intuitivní chápání složitosti

- speciální symboly + - * / =., < > <> <= >= a další. Klíčová slova jsou chráněnými útvary, které nelze použít ve významu identifikátorů.

Obsah. Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13

Algoritmizace, základy programování, VY_32_INOVACE_PRG_ALGO_01

Vlastnosti algoritmu. elementárnost. determinovanost. rezultativnost. konečnost. hromadnost. efektivnost

Komponenty v.net. Obsah přednášky

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

Úvod do teoretické informatiky

PSK3-9. Základy skriptování. Hlavička

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

IAJCE Přednáška č. 6. logický celek, řešící dílčí část problému Příklad velmi špatného zápisu programu na výpočet obsahu obdélníku

Jazyk C++ I. Šablony

Algoritmy. Z. Sawa (VŠB-TUO) Úvod do teoretické informatiky 15. dubna / 39

Úvod do databázových systémů

Strukturu lze funkci předat: (pole[i])+j. switch(výraz) velikost ukazatele

ANOTACE nově vytvořených/inovovaných materiálů

Překladač a jeho struktura

Racionální čísla, operátory, výrazy, knihovní funkce

PARADIGMATA PROGRAMOVÁNÍ 2 PŘÍSLIBY A LÍNÉ VYHODNOCOVÁNÍ

Algoritmizace. Cíle předmětu

Programovací í jazyk Haskell

Struktura programu v době běhu

IB015 Neimperativní programování. Organizace a motivace kurzu, programovací jazyk Haskell. Jiří Barnat

Rekurze. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

Generování vnitřní reprezentace programu

Funkce, podmíněný příkaz if-else, příkaz cyklu for

Správa paměti. doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 /

Programování v jazyce JavaScript

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje

Větvení programů příkaz IF

Sada 1 - Základy programování

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

Programovací jazyk Prolog

Paradigmata programování 1

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

O datových typech a jejich kontrole

Informační systémy 2008/2009. Radim Farana. Obsah. Nástroje business modelování. Business modelling, základní nástroje a metody business modelování.

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

Algoritmizace a programování

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

Příkazy preprocesoru - Před překladem kódu překladačem mu předpřipraví kód preprocesor - Preprocesor vypouští nadbytečné (prázdné) mezery a řádky -

Jazyk C++, některá rozšíření oproti C

Jazyk C Program v jazyku C má následující strukturu: konstanty nebo proměnné musí Jednoduché datové typy: Strukturované datové typy Výrazy operátory

Název předmětu: Školní rok: Forma studia: Studijní obory: Ročník: Semestr: Typ předmětu: Rozsah a zakončení předmětu:

Logické programování I

/1: Teoretická informatika(ti) přednáška 4

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

3. přednáška. Obsah: Řídící struktury sekvence, if-else, switch, for, while, do-while. Zpracování posloupnosti

Pojem algoritmus. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava

DUM 06 téma: Tvorba makra pomocí VBA

Transkript:

Denotační sémantika Marek Běhálek Katedra informatiky, FEI, Vysoká škola báňská Technická universita Ostrava 17. listopadu 15, Ostrava-Poruba 708 33 Česká republika 29. listopadu 2015 M. Běhálek (VŠB-TUO) Denotační sémantika 29. listopadu 2015 1/ 16

WWW stránky Webové stránky k předmětu naleznete na adrese: http://www.cs.vsb.cz/behalek Prezentace byla připravena jako opora k předmětu Paradigmata programování Materiály vycházi z původních materiálu k předmětu Funkcionální a logické programování doc. Dr. Ing. Miroslava Beneše. M. Běhálek (VŠB-TUO) Denotační sémantika 29. listopadu 2015 2/ 16

Princip denotační sémantiky Denotační sémantika programovacího jazyka popisuje význam programu jako funkci program : Input Output Princip kompozicionality význam složené konstrukce je dán kombinací významů jednotlivých složek Pro popis se používá λ-kalkulu lze jednoduše vyjádřit také pomocí funkcionálního jazyka Princip kompozicionality- význam složené konstrukce je dán kombinací významů jednotlivých složek [[E1+E2]] = [[E1]]+[[E2]] není vždy splněno konstrukce pro paralelní výpočty M. Běhálek (VŠB-TUO) Denotační sémantika 29. listopadu 2015 3/ 16

Abstraktní syntax Popisuje zjednodušenou strukturu programu bez detailů, které nenesou žádnou sémantickou informaci(priorita a asociativita operátorů,závorky,...) ano- operátory, operandy ne závorky, priorita, asociativita, oddělovače Pro datovou realizaci abstraktní syntaxe programu se používá obvykle stromová struktura abstraktní syntaktický strom(ast) M. Běhálek (VŠB-TUO) Denotační sémantika 29. listopadu 2015 4/ 16

Sémantické funkce Přiřazují význam jednotlivým syntaktickým konstrukcím Syntaktické konstrukce jsou strukturovány do syntaktických domén (doména výrazů Exp, příkazů Exp, deklarací Dec, programů Prog apod.) Sémantické funkce jsou definovány pro každou doménu zvlášť: e [[1+1]] = 2 p [[i =read;write2 i;]] = λ(x : ).[2 x] M. Běhálek (VŠB-TUO) Denotační sémantika 29. listopadu 2015 5/ 16

Výrazy s konstantami významem výrazu je jeho hodnota: e [[1+1]] = 2 dataexp=addexpexp MulExpExp NegExp NumInt e :: Exp >Int e(adde1e2)=(ee1)+(ee2) e(mule1e2)=(ee1) (ee2) e(nege1) = (ee1) e(numx) =x M. Běhálek (VŠB-TUO) Denotační sémantika 29. listopadu 2015 6/ 16

Výrazy s proměnnými Význam výrazu(jeho hodnota) závisí na konkrétních hodnotách proměnných Funkce přiřazující proměnným hodnotu(valuační funkce) musí být parametrem sémantické funkce e tato funkce modeluje paměť počítače s pojmenovanými buňkami typestore=string >Int dataexp =... VarString e :: Exp >Store >Int e(adde1e2)s=(ee1s)+(ee2s) e(numx) =x e(varv) s=sv M. Běhálek (VŠB-TUO) Denotační sémantika 29. listopadu 2015 7/ 16

Výrazy s přiřazením Hodnoty proměnných(a tedy i valuační funkce) se mohou během vyhodnocení výrazu změnit Změněná valuační funkce musí být součástí funkční hodnoty sémantické funkce e(tj. výsledek musí být uspořádanou dvojicí hodnot) dataexp=... AsgnStringExp e :: Exp >Store >(Int,Store) e(asgnve1)s=let(v1,s ) =ee1s s v =ifv ==vthenv1 elsesv in(v1, s ) e(adde1e2)s=let(v1,s ) =ee1s inlet (v2, s ) =ee2s in(v1+v2,s ) e(numx) s=(x, s) M. Běhálek (VŠB-TUO) Denotační sémantika 29. listopadu 2015 8/ 16

Příkazy Příkaz neprodukuje(na rozdíl od výrazu) hodnotu, jeho významem je vedlejší efekt změna stavu programu(např. hodnot proměnných) datacom=evalexp If ExpCom WhileExpCom Seq ComCom c :: Com >Store >Store c(evale1) s=let(,s ) =ee1s ins c(if e1c1) s=let(v1,s ) =ee1s in if v1==0thens elsecc1s c(whiles1c1) s=let(v1,s ) =ee1s in if v1==0thens elsec(whilee1c1) (cc1s ) c(seqc1c2) s=cc2(cc1s) M. Běhálek (VŠB-TUO) Denotační sémantika 29. listopadu 2015 9/ 16

Vstup a výstup Stav programu je tvořen nejen okamžitými hodnotami proměnnných, ale také nezpracovaným vstupem a již vyprodukovaným výstupem. Místo typu Store je třeba v předchozích definicích používat typ State zahrnující i vstup a výstup programu typeinput =[Int] type Output =[Int] typestate =(Store, Input, Output) dataexp=... Read e :: Exp >State >(Int,State) eread(s,x:xs, o)=(x,(s, xs, o)) datacom=... WriteExp c :: Com >State >State c(writee1) s=let(v1, (s,i,o))=ee1s in(s, i, v1:o) M. Běhálek (VŠB-TUO) Denotační sémantika 29. listopadu 2015 10/ 16

Kontinuace Význam zbytkuprogramu odaktuálníhomístavprogramuažpo jeho ukončení lze modelovat kontinuací funkcí, která na základě aktuálního stavu vrátí výsledek celého programu Sémantická funkce obdrží jednu nebo více kontinuací, kterým po vyhodnocení může(a nemusí) předat řízení Kontinuace výrazu obdrží hodnotu výrazu, stav programu po jeho výpočtu a vrátí výsledek programu: typeecont=int >State >Output Kontinuace příkazu obdrží stav po provedení příkazu a vrátí výsledek programu: typeccont=state >Output M. Běhálek (VŠB-TUO) Denotační sémantika 29. listopadu 2015 11/ 16

Kontinuace Sémantická funkce pro výraz obdrží zpracovávaný výraz, stav před jeho výpočtem a kontinuaci, které má předat nový stav a výsledek; vracívýsledekceléhoprogramu( vyrobený obvyklekontinuací): e :: Exp >State >ECont >Output e(adde1e2)sec= ee1s (\v1s > ee2s (\v2s >ec(v1+v2)s )) Sémantická funkce pro příkaz obdrží zpracovávaný příkaz, stav před jeho provedením a kontinuaci, které má předat nový stav; vrací výsledek celého programu: c :: Com >State >CCont >Output c(seqc1c2) s cc=cc1s(\s > cc2s (\s >ccs )) c(if e1c1) s cc= ee1s (\v1s >ifv1==0thenccs elsecc1s cc) M. Běhálek (VŠB-TUO) Denotační sémantika 29. listopadu 2015 12/ 16

Použití kontinuací reakce na chybové stavy funkce nepředá řízení žádné kontinuaci a tím ukončí vyhodnocení definice významu skokových příkazů(break, goto) při skoku se předá řízení kontinuaci odpovídající cílovému místu skoku definice významu volání podprogramu kontinuace odpovídající zbytku programu za příkazem volání se uschová pro použití v příkazu return M. Běhálek (VŠB-TUO) Denotační sémantika 29. listopadu 2015 13/ 16

Program Modely výpočtu 1 Program nejprve provede výpočet a pak zobrazí výsledek nebo chybu 2 Program vypisuje průběžně výsledky a na konci oznámí úspěch nebo chybu Syntax a sémantika programu program je tvořen posloupností příkazů typeprog=com vstupem programu je posloupnost čísel, výstupem posloupnost čísel zakončená příznakem OK nebo chybovou zprávou typeinput=[int] datavalue=iint OK ErrString type Output =[Value] M. Běhálek (VŠB-TUO) Denotační sémantika 29. listopadu 2015 14/ 16

Stav program stav programu je tvořen obsahem proměnných a nepřečteným vstupem; na počátku není žádná proměnná definována typestore=string >MaybeInt datastate =State {store::store, input::input} emptystore:: Store emptystore id = Nothing initialstate :: Input > State initialstate inp = State {store=emptystore, input=inp} M. Běhálek (VŠB-TUO) Denotační sémantika 29. listopadu 2015 15/ 16

Vyhodnocení programu vyhodnocení programu p :: Prog -> Input -> Output p body inp = c body (initialstate inp) (\_ -> [OK]) ošetření nedefinované proměnné: realizace příkazu Write: e :: Exp >State >ECont >Output e(varv) s ec=case(stores)vof Justv1 >ecv1s Nothing >[Err( Nedef: ++v)] c :: Exp >State >CCont >Output c(writee1) s cc=ee1s(\v1s > (I v1):(cc(state (store s ) (input s )))) M. Běhálek (VŠB-TUO) Denotační sémantika 29. listopadu 2015 16/ 16