1 Píklady popisu typických konstrukcí

Podobné dokumenty
Programovací jazyky, syntaxe, sémantika, zpsoby popisu

1 Sémantika a její vztah k syntaxi

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

Programovací jazyk Pascal

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

1. Signatura datového typu

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

Správa obsahu ízené dokumentace v aplikaci SPM Vema

Každý datový objekt Pythonu má minimáln ti vlastnosti. Identitu, datový typ a hodnotu.

Cykly Intermezzo. FOR cyklus

Konzistentnost. Pro a proti replikaci. Vztah ke škálovatelnosti (1)

Promnné. [citováno z

Úvod do programovacích jazyků (Java)

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.

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

C++ Akademie SH. 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory. Michal Kvasni ka. 20. b ezna Za áte níci C++

4 - Architektura poítae a základní principy jeho innosti

2. PÍKLAD DÍLÍ ÁSTI SOUSTAVY - DÍLÍ ÁST SDÍLENÍ TEPLA

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

Algoritmizace a programování

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

27. asové, kmitotové a kódové dlení (TDM, FDM, CDM). Funkce a poslání úzkopásmových a širokopásmových sítí.

Algoritmizace prostorových úloh

Pravdpodobnost výskytu náhodné veliiny na njakém intervalu urujeme na základ tchto vztah: f(x)

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

Implementace LL(1) překladů

1 KOMBINATORIKA, KLASICKÁ PRAVDPODOBNOST

VYTVÁENÍ VÝBROVÝCH DOTAZ

ŘÍKÁME, ŽE FUNKCE JE ČÁSTEČNĚ SPRÁVNÁ (PARTIALLY CORRECT), POKUD KDYŽ JE SPLNĚNA PRECONDITION

IMPORT DAT Z TABULEK MICROSOFT EXCEL

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LL SYNTAKTICKÁ ANALÝZA DOKONČENÍ, IMPLEMENTACE.

Algoritmizace prostorových úloh

KUSOVNÍK Zásady vyplování

Překladač a jeho struktura

PODOBÁ SE JAZYKU C S NĚKTERÝMI OMEZENÍMI GLOBÁLNÍ PROMĚNNÉ. NSWI162: Sémantika programů 2

GENEROVÁNI KÓDU jazyk Mila

Tabulkový procesor Excel

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

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

Logika. 2. Výroková logika. RNDr. Luděk Cienciala, Ph. D.

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

DUM. Databáze - úvod

4. Lineární diferenciální rovnice rovnice 1. ádu

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

Časová a prostorová složitost algoritmů

Formální systém výrokové logiky

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

Rzné algoritmy mají rznou složitost

PÍRUKA A NÁVODY PRO ÚELY: - RUTINNÍ PRÁCE S DATY

2 Formální jazyky a gramatiky

Stanovení požadavk protismykových vlastností vozovek s ohledem na nehodovost

Modely Herbrandovské interpretace

6 Příkazy řízení toku

íslo jednací: /14 íslo žádosti: Dvod vydání Vyjádení : Stavební ízení

3 Co je algoritmus? Trocha historie Definice algoritmu Vlastnosti algoritmu... 3

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

E. Niklíková, J.Tille, P. Stránský Státní ústav pro kontrolu léiv Seminá SLP

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.

Logické programy Deklarativní interpretace

Replikace. Pro a proti replikaci. Vztah ke škálovatelnosti (1)

Úvodní studie (pokraov

Interpret jazyka IFJ2011

OCR (optical character recognition) - rozpoznávání textu v obraze

VLASTNOSTI KOMPONENT MICÍHO ETZCE -ÍSLICOVÁÁST

NPRG030 Programování I, 2010/11

Odvozené a strukturované typy dat

Slepé prohledávání do šířky Algoritmus prohledávání do šířky Při tomto způsobu prohledávání máme jistotu, že vždy nalezneme koncový stav, musíme ale p

O datových typech a jejich kontrole

Diagnostika u voz s 2-místnými diagnostickými kódy

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

Náznak ukázky syntaxe a sémantiky pro projekt. 1 Syntaktické prvky. Poslední aktualizace: 8.

int t1, t2, t3, t4, t5, t6, t7, prumer; t1=sys.readint();... t7=sys.readint(); prume pru r = r = ( 1+t 1+t t3+ t3+ t4 t5+ t5+ +t7 +t7 )/ ;

Párování. Nápovdu k ostatním modulm naleznete v "Pehledu nápovd pro Apollo".

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

Poslední aktualizace: 14. října 2011

METODY OCEOVÁNÍ PODNIKU DEFINICE PODNIKU. Obchodní zákoník 5:

Zbytky zákaznického materiálu

E. Niklíková, J.Tille, P. Stránský Státní ústav pro kontrolu léiv Seminá SLP

Řídicí struktury. alg3 1

NPRG030 Programování I RNDr.Tomáš Holan, Ph.D. 4.patro, č

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

Jazyk C# a platforma.net

Úvod do TI - logika Predikátová logika 1.řádu (4.přednáška) Marie Duží marie.duzi@vsb.cz

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

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

4.2 Syntaxe predikátové logiky

LABORATORNÍ CVIENÍ Stední prmyslová škola elektrotechnická

Internetový mapový server Karlovarského kraje

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

1. Exponenciální rst Spojitý pípad. Rstový zákon je vyjáden diferenciální rovnicí

Sémantika Tabulka symbolů Intermediální kód Typová kontrola, přetypování Statická a dynamická sémantika. Sémantická analýza.

Generování vnitřní reprezentace programu

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b

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

ŠANCE PRO SPOLENOST, obanské sdružení

Software602 Form Designer

IB015 Neimperativní programování. Seznamy, Typy a Rekurze. Jiří Barnat Libor Škarvada

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

DUM 06 téma: Tvorba makra pomocí VBA

Prbh funkce Jaroslav Reichl, 2006

Transkript:

1 Píklady popisu typických konstrukcí V tomto odstavci se pokusíme ilustrovat denotaní popis sémantiky ve funkcionálním modelu pro typické píklady jazykových konstrukcí. Popisované konstrukce budou fragmenty jazyk PL0 a ILPL0, zjednodušené maximáln pro úely demonstrace. 1.1 Popis sémantiky výraz Jednou ze syntaktických konstrukcí jazyka PL0 jsou výrazy. Uvažme fragment gramatiky, popisující syntaxi výraz. p 1 : Výraz konst p 2 : Výraz ident p 3 : Výraz Výraz + Výraz Výrazy jazyka se skládají ze symbol konstant (jisté signatury), identifikátor promnných a operátoru "+". Nap. zápis "x+1" je správn vytvoený výraz. Každý takový výraz nabývá jisté hodnoty v závislosti na stavu promnných, které se v nm vyskytují. Význam výrazu proto obecn mže záviset na stavu pamti, ve kterém výraz vyhodnocujeme. Uživatel jazyka PL0 má k dispozici pam skládající se z bunk, do nichž lze ukládat celá ísla. Jednotlivé buky pamti (promnné) jsou oznaeny identifikátory. Aktuální stav pamti jazyka PL0 pak lze modelovat jako zobrazení: Pam = Id Val, kde Id je množina pípustných identifikátor a Val je množina pípustných hodnot, tj. Val = Int. Význam výraz závisí na aktuálním stavu pamti a má tedy charakter zobrazení: M Výraz = Pam Val = (Id Val) Val. Sémantika výraz bude zobrazení, které každému výrazu piadí jeho význam, tj. Sem Výraz : Výraz M Výraz. Popíšeme ji sadou sémantických rovností ízenou popisem syntaxe výraz. rp 1 : Sem Výraz [konst] = λp:pam.konst (konstanta oznauje sebe sama, bez ohledu na stav pamti) rp 2 : Sem Výraz [ident] = λp:pam.p(ident) (promnná ve výrazu oznauje obsah píslušné buky pamti) rp 3 : Sem Výraz [v 1 +v 2 ] = λp:pam.sem Výraz [v 1 ](p)+sem Výraz [v 2 ](p) (výraz s operátorem + oznauje souet hodnot operand). Karel Richta 1

1.1.1 Píklad Sémantickou interpretaci výrazu "x+1" získáme: Sem Výraz [x+1] = = λp:pam.(semvýrazx(p)+semvýraz1(p)) = = λp:pam.((λq:pam.q(x))(p)+(λr:pam.1)(p)) = = λp:pam.(p(x)+1). Výrazem tedy bude funkce, jejíž hodnotu pro aktuální stav pamti p získáme jako souet obsahu pamti na adrese x a konstanty 1. Poznámka: Použitý fragment gramatiky popisující syntaxi výraz není jednoznaný, nebo nap. pro výraz "x+y+z" existují dv možné derivace p 3 (p 3 (p 2,p 2 ),p 2 ) a p 3 (p 2,p 3 (p 2,p 2 )). Vzhledem k asociativit sítání však v obou pípadech dospíváme ke stejnému významu. Sem [x+y+z] = λp:pam.sem[x+y](p)+sem[z](p) = = λp:pam.sem[x](p)+sem[y](p)+sem[z](p) = = λp:pam.sem[x](p)+sem[y+z](p) Nejednoznanost této gramatiky pak pi popisu sémantiky není na závadu, naopak pináší zjednodušené vyjádení. Pevod na jednoznanou gramatiku a odpovídající úpravu sémantických rovností ponecháme jako cviení tenái. 1.2 Popis statické sémantiky Jazyk PL0 je kontextový. Jeden z dvod kontextového charakteru jazyka je podmínka, aby každý identifikátor byl nejdíve deklarován a teprve poté použit. Tuto kontextovou závislost korektnosti výskytu identifikátoru nejsme schopni zachytit bezkontextovou gramatikou. Vyjádíme ji proto statickou sémantikou jazyka, jako doplující podmínky k bezkontextové gramatice. Uvažme opt fragment gramatiky: p 4 : Deklarace var ident Pi zpracování deklarace "var x" je nutno si poznamenat, že výskyt identifikátoru x v dalším textu programu je korektní. Rozšííme proto model stavu výpoetních prostedk o tabulku identifikátor: Tab = Id Bool, kde pro t:tab fakt t(x)=true vyjaduje, že identifikátor x již byl deklarován. Významy výraz modelujeme opt zobrazením ze stavu do hodnot. Významy deklarací modelujeme jako zmnu stavu, kdy do tabulky identifikátor zaneseme informaci o píslušné deklaraci. Stav = Pam Tab M výraz = Stav Val M deklarace = Stav Stav. Význam deklarace definujeme: rp 4 : Sem Deklarace [var ident] = λs:stav.<s.1,s.2[ident true]> Karel Richta 2

nebo alternativn zapsáno: rp 4 : Sem Deklarace [var ident](<p,t>) = <p,t[ident true]>. Sémantická rovnost rp 4 vyjaduje fakt, že deklarací "var x" se nemní stav pamti, ale do tabulky identifikátor se deklarace poznamená. Novému modelu je samozejm nutno pizpsobit i ostatní sémantické rovnosti, nap.: rp 2 : Sem Výraz [ident](<p,t>) = if t(ident) then p(ident) else Val {chyba kontextové syntaxe - výskyt nedeklarovaného identifikátoru ve výrazu}. 1.3 Popis sémantiky operaních píkaz Základními operaními píkazy jazyka PL0 jsou piazení, vstup a výstup. Ostatní píkazy slouží pro ízení výpotu, tj. správné uspoádání operaních píkaz tak, aby se dosáhlo zamýšleného efektu programu. Pro každý píkaz použijeme zjednodušený model, nutný pro popis jeho sémantiky. Popis sémantiky piazovacího píkazu musí vyjadovat fakt, že tento píkaz slouží pro zmnu stavu pamti. Nech tedy: p 5 : Píkaz ident := Výraz M píkaz = Pam Pam M Výraz = Pam Val rp 5 : Sem Píkaz [ident := V] = λp:pam.p[ident SemVýraz[V](p)] Pro popis sémantiky vstupu a výstupu musíme rozšíit model stavu o vstupní a výstupní zaízení: Stav = Pam Vstup Výstup. Vstupní i výstupní zaízení použitelná v jazyce PL0 jsou zaízení se sekvenním pístupem bez možnosti návratu. Vstupující i vystupující údaje jsou celá ísla. Stav vstupu proto mžeme modelovat jako posloupnost i Val*, zastupující soubor dosud nepetených dat. Podobn stav výstupu lze modelovat jako posloupnost o Val*, zastupující soubor již zapsaných dat. Vstup = Val* Výstup = Val* Stav = Pam Vstup Výstup. M Píkaz = Stav Stav Zavedeme nový píkaz pro vstup: p 6 : Píkaz read ident Nech <p,i,o> Pam Vstup Výstup je stav ped provedením píkazu "read x". Popis sémantiky píkazu read vyjádí fakt, že píkaz pete jedno íslo ze vstupu a uloží jej na adresu x. Pokud byl vstup, tj. posloupnost i prázdná, dojde pi provádní píkazu read k chyb. Karel Richta 3

rp 6 : Sem Píkaz [read ident](<p,i,o>) = = if not null(i) then <p[ident head(i)],tail(i),o> else chyba(<p,i,o>) {chyba dynamické sémantiky - tení za koncem vstupních dat}, kde chyba je funkce pro hlášení chyb dynamické sémantiky definovaná nap. chyba = λs:stav.s. Pro výstup údaj zavedeme píkaz: p 7 : Píkaz write Výraz Nech opt <p,i,o> je stav ped provedením píkazu "write V". Sémantický efekt píkazu zpsobí pipsání hodnoty výrazu V na konec výstupní posloupnosti o. rp 7 : Sem Píkaz [write V](<p,i,o>) = <p,i,append(o,sem Výraz [V](p))> 1.4 Popis sémantiky ídících píkaz Základní ídící strukturou procedurálních jazyk je zetzení píkaz, nap.: p 8 : Píkaz Píkaz ; Píkaz. Poznámka: Nejednoznanost jsme již diskutovali u výraz. Provedení posloupnosti píkaz "P;Q" znamená nejprve provedení píkazu P a poté píkazu Q. kde: rp 8 : Sem Píkaz [P;Q] = Sem Píkaz [P].SemPíkaz[Q], f.q = λx:t.q(f(x)), pro f,q:t T, je kompozice zobrazení (kompozice zobrazení je asociativní). Strukturované jazyky dále zavádjí strukturované ídící konstrukce - podmínný píkaz a píkaz cyklu. p 9 : Píkaz if Výraz then Píkaz else Píkaz Kvli zjednodušení jsme nezavádli nový neterminální symbol "Logický-výraz". Jako podmínku použijeme test na nulu. rp 9 : Sem Píkaz [if V then P 1 else P 2 ] = = λs:stav.if Sem Výraz [V](s)==0 then Sem Píkaz [P 1 ](s) else Sem Píkaz [P 2 ](s). Podobn zavedeme píkaz cyklu: p 10 : Píkaz while Výraz do Píkaz rp 10 : Sem Píkaz [while V do P] = = λs:stav.if Sem Výraz [V](s)==0 then Sem Píkaz [while V do P](Sem Píkaz [P](s)) else s. S využitím znalostí modelu λ-kalkulu lze ešení této rekurzivní rovnosti zapsat explicitn Karel Richta 4

pomocí operátoru pevného bodu následovn: rp 10 : Sem Píkaz [while V do P] = = fix(λf:(stav Stav).λs:Stav.if Sem Výraz [V](s)==0 then f(sem Píkaz [P](s)) else s). 1.5 Popis sémantiky výjimek Nestrukturované jazyky používají jako základní ídící konstrukci píkaz skoku (podmínného skoku). Obvykle i strukturované jazyky pipouštjí konstrukce pro ešení výjimek, nap. práv píkaz skoku. Popis sémantiky píkazu skoku si vynucuje komplikovanjší sémantický model, než jsme dosud využívali. Uvažme nap. popis sémantiky zetzení píkaz rovností rp 8. Pokud píkaz P v konstrukci "P;Q" bude píkaz skoku, nebude význam konstrukce "P;Q" závislý na významu píkazu Q, ale bude záviset na významu cílového místa skoku P. Rozšime tedy jazyk o možnost oznaení píkaz návštím a o píkaz skoku na návští. p 11 : Píkaz Návští: Píkaz p 12 : Píkaz goto Návští. Pro vyjádení významu píkazu "goto n" bude podstatné, jaký píkaz je oznaen návštím n. Význam skoku bude pímo význam programu, který zaíná píkazem, oznaeným odpovídajícím návštím. Zavedeme proto tabulku význam návští jako zobrazení: Env = (Návští C), kde: C = Stav Stav je model význam program. Tabulku Env budeme nazývat prostedí programu (environment). Pi urení významu konstrukce "goto n;q" budeme ignorovat "normální" pokraování Q a význam najdeme pímo v odpovídajícím prostedí. Pokud ovšem v konstrukci "P;Q" není P píkaz skoku, musíme do celkového významu zapoítat i význam pokraování Q. To nás pivádí k myšlence, abychom význam píkazu popsali pomocí jeho efektu na význam programu, který pipojíme za nj. Bude-li nap. Q píkaz takový, že: c = Sem[Q]: (Stav Stav), pak význam konstrukce "x:=1;q" získáme aplikací c na stav, který vznikne provedením píkazu "x:=1", tj. c(sem[x:=1]). Význam "goto n;q" však na c závislý nebude. Významy píkaz proto popíšeme zobrazením, které bude závislé na prostedí (Env) a významu pokraování píkazu (C). Výsledkem bude opt dvojice: nové prostedí a význam celku. M Píkaz = (Env C Env C) Sem Píkaz : Píkaz (Env C Env C) Nejprve vyjádíme význam píkazu oznaeného návštím: rp 11 : Sem Píkaz [n:p](<e,c>) = Sem Píkaz [P](<e',c>) kde e' = e[n Sem Píkaz [P](<e',c>)]. Karel Richta 5

Návští tedy nemní význam píkazu, ale mní prostedí, ve kterém se význam programu hledá. Píkaz skoku prostedí nemní, ale využívá pro zjištní významu cílového návští. rp 12 : Sem Píkaz [goto a](<e,c>) = <e,e(n)> Skok ignoruje význam pokraování c a pímo vybírá význam z prostedí. Pro nový sémantický model by samozejm bylo nutné upravit i všechny ostatní rovnosti, nap. sémantické rovnosti pro piazení a zetzení píkaz by mly tvar: rp 5 ': Sem Píkaz [ident := V](<e,c>) = <e,λs:stav.c(s[ident Sem Výraz [V](s)])> rp 8 ': Sem Píkaz [P;Q](<e,c>) = Sem Píkaz [P](Sem Píkaz [Q](<e,c>)). V pípadech sémantických rovností jsme nkdy použili rekurze (nap. rp 11 ). Aby bylo použití rekurzivních definic oprávnné, musí být zaruena jejich jednoznaná interpretace. Pi použití doménového modelu λ kalkulu má však každá soustava rekurzivních rovností jednoznané ešení. Karel Richta 6