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

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

Programovací jazyk Pascal

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

Úvod do programovacích jazyků (Java)

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

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

NPRG030 Programování I, 2010/11

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

NPRG030 Programování I, 2016/17 1 / :58:13

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

Generování vnitřní reprezentace programu

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

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

Algoritmizace a programování

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

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

Programovací í jazyk Haskell

Zápis programu v jazyce C#

O datových typech a jejich kontrole

Konstruktory překladačů

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

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

Poslední aktualizace: 14. října 2011

Program a životní cyklus programu

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

VISUAL BASIC. Přehled témat

Implementace LL(1) překladů

Definice uživatelského typu. Uživatelem definované typy. Součinové datové typy. Součtové datové typy. FLP - Uživatelem definované typy

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

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

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

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

Přednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu.

type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik;

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

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.

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LEXIKÁLNÍ ANALÝZA

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

Dotazování nad stromem abstraktní syntaxe

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

Jazyk C# a platforma.net

Syntaktická analýza. Implementace LL(1) překladů. Šárka Vavrečková. Ústav informatiky, FPF SU Opava

Řídicí struktury. alg3 1

Struktura programu v době běhu

Dynamické datové typy a struktury

ALGORITMIZACE A PROGRAMOVÁNÍ

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

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

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

1 Píklady popisu typických konstrukcí

Interpret jazyka IFJ2011

Programovací jazyk Haskell

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

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE REALIZACE PŘEKLADAČE I

Preprocesor. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016

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

Motivace. Vstup a výstup. Minimální komunikace. Motivace. ÚDPJ - Vstup a výstup. Ing. Lumír Návrat katedra informatiky, A

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Algoritmizace prostorových úloh

Software602 Form Designer

Úvod do programování

2. lekce Algoritmus, cyklus Miroslav Jílek

Algoritmizace prostorových úloh

Paradigmata programování 1

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

Programování v C++ 1, 1. cvičení

Paradigmata programování 1

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

Stručný návod k programu Octave

Překladač a jeho struktura

Programování v jazyce JavaScript

Činnost: 1) Vyhodnotí se výraz E. 2) Jeho hodnota se uloží do proměnné V.

ŘÍDÍCÍ STRUKTURY - PODMÍNKY

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

Semestrální práce z předmětu. Jan Bařtipán / A03043 bartipan@studentes.zcu.cz

Příklady: (y + (sin(2*x) + 1)*2)/ /2 * 5 = 8.5 (1+3)/2 * 5 = /(2 * 5) = 1.3. Pavel Töpfer, 2017 Programování 1-3 1

Implementace aritmetického stromu pomocí směrníků

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

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

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

KTE / ZPE Informační technologie

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Algoritmizace. Cíle předmětu

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

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

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

Úvod. Programovací paradigmata

Programy v prostředí operačního systému

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

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

6 Příkazy řízení toku

Souhrn Apendixu A doporučení VHDL

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).

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE PŘEKLADY TYPICKÝCH JAZYKOVÝCH KONSTRUKCÍ PROGRAMOVACÍCH JAZYKŮ.

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

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

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

SPJA, cvičení 1. ipython, python, skripty. základy syntaxe: základní datové typy, řetězce. podmínky: if-elif-else, vyhodnocení logických výrazů

Strojový kód k d a asembler procesoru MIPS SPIM. MIPS - prostředí NMS NMS. 32 ks 32bitových registrů ( adresa registru = 5 bitů).

Transkript:

Denotační sémantika programovacího jazyka doc. Dr. Ing. Miroslav Beneš katedra informatiky, A-1007 59 732 4213 Obsah přednášky Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program 2 Motivace Specifikace programovacího jazyka syntaxe struktura jazykových konstrukcí sémantika význam jazykových konstrukcí Metody popisu sémantiky slovní popis nepřesný formální definice axiomatická sémantika operační sémantika denotační sémantika Denotační sémantika Popis významu programu pomocí funkcí program :: Input Output využit ití λ-kalkulu popis prostředky funkcionáln lního jazyka Princip kompozicionality význam složen ené konstrukce je dán d n kombinací významů jednotlivých složek [[E 1 +E 2 ]] = [[E 1 ]] + [[E 2 ]] není vždy splněno no konstrukce pro paralelní výpočty 3 4

Abstraktní syntaxe Příklad AST Zjednodušená struktura programu ano - operátory, operandy ne závorky, priorita, asociativita, oddělovače E E+E E-E E E E*E E/E num var Abstraktní syntaktický strom (AST) vnitřní uzly jsou tvořeny operátory listy obsahují operandy E E+E E-E E E E*E E/E num var var A * num 5 + A * (5 + B) var B 5 6 Sémantické funkce Příklady sémantických funkcí Přiřazují význam jednotlivým syntaktickým konstrukcím výraz hodnota příkaz akce Syntaktické domény představují pojmenované třídy syntaktických konstrukcí výraz: Exp,, příkaz: p Com,, deklarace: Dec,, program: Prog apod. Sémantické funkce jsou definovány ny pro každou doménu samostatně e :: Exp -> Int e [[1 + 1]] = e[[1]] + e[[2]] = 2 významem výrazu je číslo p :: Prog -> > ([Int Int] -> > [Int[ Int]) p [[i = read; write 2*i]] = λ (x:_). [2 * x] p [[write 40+2]] = λ _. [42] významem programu je funkce, která transformuje seznam vstupních hodnot na seznam hodnot výstupních 7 8

Výrazy s konstantami data Exp = Add Exp Exp -- x+y Mul Exp Exp -- x*y Neg Exp -- -x Num Int -- num e :: Exp -> Int e (Add e1 e2) = (e e1) + (e e2) e (Mul( e1 e2) = (e e1) * (e e2) e (Neg( e1) = - (e e1) e (Num x) = x Výrazy s proměnnými Význam (hodnota) výrazu závisí na hodnotách proměnných e [[x + 3]] {x 7} = 10 Hodnota proměnných se během výpočtu nemění (tento předpoklad brzy opustíme!) Valuační funkce přiřazuje hodnotu proměnným model paměti type Store = String -> Int musí být parametrem sémantické funkce e 9 10 Výrazy s proměnnými Výrazy s přiřazením data Exp =... Var String type Store = String -> Int e :: Exp -> > Store -> Int e (Add e1 e2) s = (e e1 s) + (e e2 s) e (Mul( e1 e2) s = (e e1 s) * (e e2 s) e (Neg( e1) s = - (e e1 s) e (Num x) _ = x e (Var( v) s = s v Hodnoty proměnných (valuační( funkce) se mohou během vyhodnocení výrazu změnit a + 2 * (a = c + 3) + 5 * a Sémantická funkce e musí vrátit i novou valuační funkci e :: Exp -> > Store -> > (Int( Int,, Store) 11 12

Výrazy s přiřazením data Exp =... Asgn String Exp e :: Exp -> > Store -> > (Int( Int,, Store) e (Asgn( v e1) s = let (v1,s1) = e e1 s s2 v = if v =v then v1 else s1 v in (v1, s2) e (Add e1 e2) s = let (v1, s ) = e e1 s (v2, s ) = e e2 s in (v1+v2, s ) e (Num x) s = (x, s) Příkazy Neprodukují hodnotu Významem je vedlejší efekt příkazu změna stavu programu např. hodnot proměnných, vstup/výstup apod. data Com = Eval Exp -- e; If Exp Com -- if e then c While Exp Com -- while e do c Seq Com Com -- c1; c2 c :: Com -> > Store -> > Store 13 14 Příkazy Vstup a výstupv c :: Com -> > Store -> > Store c (Eval e1) s = let (_,s ) = e e1 s in s c (If e c1) s = let (v1,s ) = e e1 s in if v1 == 0 then s else c c1 s Stav programu zahrnuje okamžité hodnoty proměnných Store nezpracovaný vstup seznam čísel (vytvořený výstup seznam čísel) c p@(while s1 c1) = let (v1, s ) = e e1 s in if v1 == 0 then s else c p (c c1 s ) c (Seq( c1 c2) s = c c2 (c c1 s) type Input = [Int[ Int] type Output = [Int[ Int] type State = (Store, Input, Output) 15 16

Čtení hodnoty ze vstupu Zápis hodnoty na výstup data Exp = Read data Com = Write Exp e :: Exp -> > State -> > (Int( Int,, State) e Read (s, (x:xs( x:xs), os) = (x, (s, xs, os)) e Read (_, [], _) = error Konec vstupu c :: Com -> > State -> > State c (Write e1) s = let (v1, (s, is, os)) = e e1 s in (s, is, os++[v1])) vyhodnotí í se výraz v operandu hodnota se přidá do výstupu 17 18 Kontinuace Kontinuace write (3 + 5) * 2 vypočtu 3+53 hodnotu 8 a nový stav předám zbytku programu zbytek programu vypočte hodnotu 8*2,, zobrazí hodnotu 16 a skončí kontinuace výrazu je funkce, která dostane hodnotu,, nový ý stav výpočtu a vrátí výsledek zbývající části programu type ECont = Int -> State -> > Output write 3; write 5; zobrazím 3 nový stav předám zbytku programu zbytek programu zobrazí ještě hodnotu 5 a skončí kontinuace příkazu je funkce, která dostane nový stav výpočtu a vrátí výsledek zbývající části programu type CCont = State -> > Output 19 20

Kontinuace Výrazy s kontinuacemi Sémantické funkce obdrží jednu nebo více kontinuací mohou (ale nemusí) jim předat řízení Výraz type ECont = Int -> > State -> > Output e :: Exp -> > State -> ECont -> > Output Příkaz type CCont = State -> > Output c :: Com -> > State -> CCont -> > Output type ECont = Int -> > State -> > Output e :: Exp -> > State -> ECont -> > Output e (Add e1 e2) s ec = e e1 s (\v1( s -> e e2 s (\v2( s -> ec (v1+v2) s )) 21 22 Příkazy s kontinuacemi Použití kontinuací type CCont = State -> > Output c :: Com -> > State -> CCont Cont -> > Output c (Seq c1 1 c2) s cc = c c1 s (\s ( -> c c2 s (\s ( -> > cc s )) c (If e1 c1) s cc = e e1 s (\v1( s -> if v1 == 0 then cc s else c c1 s cc Ošetření chyb žádná kontinuace se nevyvolá, ukončí se výpočet výjimky v případě chyby se předá řízení kontinuaci svázané s ošetřením výjimky Sémantika příkazů skoku (break( break, goto,,...) s cílem skoku je svázána kontinuace ta se použije při realizaci skoku Volání podprogramů kontinuace příkazu volání podprogramu představuje návratovou adresu pro příkaz return 23 24

Modely výpočtu programu Zobrazení výsledku až na konci výpočtu výsledkem je seznam čísel nebo chyba data Output = OK [Int[ Int] Err String Průběžné zobrazování výsledků výsledkem je seznam čísel ukončený příznakem OK nebo chybou data Value = I Int OK Err String type Output = [Value] Počáteční valuační funkce Všechny proměnné mají nulovou hodnotu type Store = String -> Int emptystore :: Store emptystore id = 0 Všechny proměnné jsou nedefinované type Store = String -> > Maybe Int emptystore :: Store emptystore id = Nothing 25 26 Počáteční stav programu Vyhodnocení í programu Proměnné počáteční valuační funkce Vstup celý vstupní seznam Výstup není í součástí stavu data State = State store :: Store, input :: Input initialstate :: Input -> > State initialstate inp = State store = inp, input = emptystore Program je tvořen příkazem type Prog = Com Sémantická funkce pro program p :: Prog -> > Input -> > Output p body inp = c body (initialstate( inp) ) (\_->[OK])( 27 28

Úkoly pro cvičení Seznamte se s ukázkovou implementací interpretu jazyka tiny Rozšiřte interpret o následující konstrukce: logické operátory And, Or,, Not příkaz For funkci Eof Pro testování využijte dodaného překladače jazyka tiny do datových struktur pro Haskell Domácí úkoly Definujte abstraktní syntaxi a sémantiku podmíněného příkazu if-then then-elseelse bez použití kontinuací s kontinuacemi Definujte abstraktní syntaxi a sémantiku příkazu repeat-until (do-while while) bez použití kontinuací s kontinuacemi 29 30