Implementace interpretu imperativního jazyka IFJ12

Rozměr: px
Začít zobrazení ze stránky:

Download "Implementace interpretu imperativního jazyka IFJ12"

Transkript

1 Dokumetace k projektu do předmětů IFJ a IAL Implementace interpretu imperativního jazyka IFJ12 Tým 78, varianta b/3/ii 9. prosince 2012 Seznam autorů: Blanárik, Martin xblana00@stud.fit.vutbr.cz 20% Čulen, Jozef xculen01@stud.fit.vutbr.cz 20% Kadlec, Peter xkadle30@stud.fit.vutbr.cz 20% Přikryl, Vojtěch xprikr28@stud.fit.vutbr.cz 20% Šoková, Veronika xsokov00@stud.fit.vutbr.cz 20% Seznam rozšíření: BYTECODE

2 Obsah 1 Úvod 3 2 Zadání a návrh implementace 4 3 Implementace Správa paměti Lexikální analyzátor Syntaxí řízený překlad Syntaktický analyzátor Statický sémantický analyzátor Generování vnitřního kódu Interpret Implementované algoritmy Hashovací tabulka Shell sort Boyer-Mooreův algoritmus Testování Rozšíření BYTECODE Práce v týmu Schůzky a komunikace v rámci týmu Rozdělení úkolů Správa zdrojového kódu Závěr Metriky kódu A Konečný automat pro implementaci lexikálního analyzátoru 11 B LL-gramatika 12 C Precedenční tabulka 13 D Instrukční sada 14 2

3 1. Úvod Tato dokumentace popisuje vývoj a implementaci interpretu imperativního jazyka IFJ12. Úlohou tohoto interpretu je kontrola vstupního zdrojového kódu a jeho interpretaci v případě, že je v pořádku. V opačném případě pak program informuje o typu chyby. Dokumentace je logicky členěna na kapitoly a postupně popisuje jednotlivé komponenty interpretu, způsob jejich implementace a společnou provázanost tvořící fungující celek. Také jsou rozebrány nejvýznamnější algoritmy, použité při implementaci. Také je zmíněn způsob práce v rámci týmu a problémy s tím spojené. V závěru dokumentace je shrnutí naší práce a hodnocení a přínos celého projektu. Také jsou přiloženy přílohy, popisující teoretický podklad pro implementaci zásadních prvků interpretu. 3

4 2. Zadání a návrh implementace Jazyk IFJ12 je podmnožinou jazyka Falcon 1, který patří mezi open-source skriptovací jazyky. IFJ12 je case-sensitive (rozlišují se malá/velká písmena) a je jazykem dynamicky typovaným (datový typ proměnné se určí na základě hodnoty do ní vložené). Naším úkolem bylo pro tento jazyk naprogramovat interpret a to v jazyku C. Při analýze problému implementace interpretu jsme tento problém rozdělili na několik dílčích částí: 1. Lexikální analyzátor 2. Syntaxí řízený překlad (a) Syntaktický analyzátor (b) Sémantický analyzátor 3. Interpret 4. Vestavěné funkce interpretu 5. Testování Toto rozčlenění nám umožnilo rozdělit úkoly mezi jednotlivé členy týmu a tím pádem pracovat paralelně a částečně nezávisle na ostatních. Více o tomto rozdělení a celkové týmové práci v kapitole 4. 1 Oficiální webové stránky: 4

5 3. Implementace V této kapitole popíšeme způsob implementace jednotlivých části interpretu. 3.1 Správa paměti Při prvotních návrzích implementace jednotlivých částí interpretu jsme narazili na celkem nepříjemnou věc - práce s dynamicky alokovanou pamětí. S tím spojené problémy jsou zejména častá nutnost ověření, jestli se alokace zdařila a dále uvolnění veškeré paměti v případě predčasného ukončení překladu. Pro vyhnutí se těmto problémům jsme implementovali jednoduchý správce paměti nazvaný Garbage Collector. Je navržen tak, aby při každém pokusu o alokování nebo realokování paměti nejdříve ošetřil úspěšné provedení dané operace a následně si uložil ukazatel na pamět právě alokovanou. Tím pádem je již velice jednoduché kdykoliv uvolnit veškerou aktuálně používanou pamět. Garbage Collector byl implementován v souboru gc.c pomoci lineárně zřetězeného seznamu a poskytuje funkce GCMalloc, GCRealloc, GCFree a GCClearAll. První tři funkce se navenek chovají identicky vůči knihovním funkcím malloc, realloc a free. Funkce GCClearAll pak uvolní najednou veškerou používanou pamět a připraví tak program k ukončení. 3.2 Lexikální analyzátor Úloha lexikálního analyzátoru spočívá v načítání vstupního zdrojového kódu jazyka IFJ12 a jeho rozdělení na jednotlivé lexémy. Spravně načtené lexémy pak vrací jako tokeny. Lexikální analyzátor jsme realizovali jako 29-stavový konečný automat (jeho grafický model lze nalézt v příloze A). Tokeny, které lexikální analyzátor vrací funkcí getnexttoken, jsou řešeny pomocí abstraktní datové struktury, která obsahuje informace o typu lexému, řádek na kterém se nachází a pro některé typy lexému i jeho obsah (např. string). Implementace byla přímočará a obešla se bez větších komplikací. Jedna komplikace nastala při více po sobě následujících EOL 1. V tomto případě bylo třeba přeskočit až na poslední z nich a vrátit jen ten (původně navrhovný automat toto neumožňoval). 3.3 Syntaxí řízený překlad Syntaxí řízený překlad řídí chod interpretu. Skládá se ze dvou částí. Modul parser.c je založený na metodě rekurzivního sestupu podle LL(1)-gramatiky (viz příloha B) a řeší analýzu bez výrazů. Modul expr parser.c je založený na precedenční syntaktické analýze a je volaný parserem pro výrazy. Současně probíhá jak syntaktická, tak i statická sémantická kontrola a generování vnitřního kódu. 1 EOL = end of line = konec řádku 5

6 3.3.1 Syntaktický analyzátor Pomocí LL-tabulky jsou implementované funkce příslušné jednotlivým nonterminálům. Terminály zpracovává funkce expect, která porovná aktuálně načtený token s očekávaným a od lexikální analýzy si vyžádá další. Pokud se nezhodují, je program ukončen syntaktickou chybou. Pokud syntaktický analyzátor narazí na výraz, volá modul expr parser.c. Ten postupně načíta všechny tokeny obsažené ve výrazu, kontroluje jejich výskyt v tabulce symbolů a zároveň doplňuje tabulku konstant. Pro práci s načítaným výrazem využívá precedenční tabulku (viz příloha C). Začátek kontroly nastává při zavolání funkce prog Statický sémantický analyzátor Pro potřeby sémantické analýzy byla navrhnuta tabulka symbolů implementovaná jako tabulka s rozptýlenými položkami (podrobněji popsána v kapitole 3.5.1). Do něj jsou vkládaná id proměnných a funkcí. Konstanty se ukládají zvlášt do tabulky, která je řešena jako pole unionů. Jelikož jazyk IFJ12 povoluje volání uživatelem vytvořené funkce dříve než byla definována, bylo potřeba zabezpečit zpětnou kontrolu. Ta se vykoná po proběhnutí celé analýzy voláním funkce funcisdef nad 0. úrovní tabulky Generování vnitřního kódu Vnitřní kód se skládá z jednoduchých instrukcí založených na indexaci, které generuje funkce geninstruction. Tento postup jsme zvolili, aby výsledný výstup nebyl závislý na adrese operandu v případě rekurzivního volání funkce. Jelikož jazyk umožňuje definovat funkce přímo mezi příkazy hlavního programu, bylo nutno zavést 2 instrukční pásky, které se podle kontextu střídají. Byly implementovány jako pole. Indexy na dosud nedefinované funkce se ukládají na zásobník, který je řešený lineárně zřetězeným seznamem. 3.4 Interpret V této části již probíhá samotná interpretace kódu z instrukční pásky (instrukční sadu lze nalézt v příloze D. Nejdříve se zpracují operandy pomocí funkce getop, která vrátí dle zadaného indexu správný ukazatel na položku z pole unionů. Pro nezáporný index vrací ukazatel do tabulky konstant, pro záporný pak ukazatel do zásobníku. Volání podporgramů je řešené již zmiňovaným zásobníkem, návratové hodnoty se ukládají do pomocné proměnné retval. Řídící instrukce, aritmetické a relační operace jsou řešené v rámci samostatného modulu interpret.c a pro vestavěné funkce se předává řízení modulu builtin.c. Při interpretaci se zároveň vykonává dynamická sémantická kontrola nad typy operandů a ošetřuje se dělení nulou. 3.5 Implementované algoritmy V rámci implementace interpretu jsme použili některé významené algoritmy. Při realizaci těchto algoritmů jsme využili znalosti získané z předmětu IAL. 6

7 3.5.1 Hashovací tabulka Podle varianty zadání jsme měli tabulku symbolů implementovat jako hashovací tabulku. Zvolili jsme typ jednoúrovňové blokově strukturované tabulky 2. Důvod tohoto výběru je ten, že vyhledávání probíhá paralelně nad všemi úrovněmi a to nám zaručilo, že identifikátor proměnné nebude současně identifikátorem funkce a naopak. Při použití jazyka IFJ12 může nastat maximálně dvojnásobné zanoření, přičemž se vždy vytváří úroveň 0 pro globální id funkcí a úroveň 1 pro hlavní program. Pokud zpracováváme tělo funkce, otevře se 2. úroveň (funkce openscope) a proměnné 1. úrovně jsou skryté. Při následném uzavření této úrovně (funkce closescope) se obnoví 1. úroveň, symboly se smažou a obnoví se skryté položky. Při vkládání identifikátoru pomocí funkce htable lookup se vytvoří (popř. upraví) položka hashovací tabulky s klíčem a nastaví se ukazatel na konkrétní symbol. Pokud nastane kolize, vytvoří se lineárně zřetězený seznam položek, ve kterém se vyhledává lineárně. Vrací se ukazatel na příslušný symbol, nebo NULL (v případě, že nastala kolize mezi id funkce a lokální proměnnou a jedná se tedy o sémantickou chybu). Nové klíče jsou vkládané do vytvořeného řetězce příslušnému aktuální úrovni, aby nedocházelo k časté alokaci paměti. V tabulce se pak uchovávají jen adresy Shell sort Vestavěnou funkci sort jsme dle naší varianty zadání měli implementovat pomocí řadícího algoritmu Shell sort. Tento řadící algoritmus je podobný Insert sortu, nicméně využívá tzv. snižující se přírustek. Algoritmus tedy neřadí prvky, které jsou výhradně vedle sebe, ale i takové, mezi kterými je určitá mezera (až polovina velikosti seřazovaného pole). V každém kroku je tato mezera zmenšena. Díky tomu je možno řadit prvky, které jsou dále od sebe a tím pádem jsou prvky vysokých a nízkých hodnot rychle přemístěny na správnou stranu pole. Pro dosažení co nejlepší časové složitosti je zásadní, jakým způsobem zmenšujeme mezeru. Empiricky byl nalezen optimální způsob - dělení konstantou Pro tuto hodnotu pak algoritmus dosahuje časové složitosti O(n 3 2 ). Tento řadící algoritmus je tedy pomalejší, než ty nejvýkonnější (QuickSort, HeapSort,...) a také je nutno podotknout, že je nestabilní 4, což ale v našem případě není podstatné Boyer-Mooreův algoritmus Vestavěnou funkci find jsme implementovali na základě Boyer-Mooreova algoritmu. Tento algoritmus je velmi rozšířeným způsobem hledání podřetězce v řetězci. Nabízí několik typů heuristiky, díky nimž je možno při porovnávání přeskakovat velké množství znaků a tím tedy algoritmus značně zrychlit. My jsme použili tzv. bad-character heuristiku Testování Testování je při vývoji softwaru velmi podstatné, proto jsme se snažili jej nepodcenit. Každá dílčí část interpretu byla proto důsledně otestována, aby se chyby odhalily již na nízké úrovni a bylo jednodušší je správně detekovat a odstranit. Výsledný program byl pak 2 Zdroj: (str ) 3 Zdroj: 4 Tzn. nezachovává původní pořadí dvou prvků se stejným klíčem 5 Studijní metariál: 7

8 komplexně testován na různých příkladech kódu jazyka IFJ12, které byly koncipovány tak, aby odhalily co možná největší množství možných chyb a pokryly i různé speciální situace (např. prázdný zdrojový soubor, práce s řetězci nulové délky, použití nepřímé rekurze, atd.). 3.7 Rozšíření Nad rámec zadání jsme se rozhodli implementovat jedno rozšíření BYTECODE Program generuje binární výstup bez interpretace, který je možno později interpretovat již bez potřeby načtení původního vstupu. Binární výstup má následující formát: "IFJ12"<ws 6 >+ <pocet instrukci> <ws>+ <pocet dat> <ws>+ <pocatecni ip> <ws> <instrukcie> <data> 6 ws = white-space = bílý znak 8

9 4. Práce v týmu 4.1 Schůzky a komunikace v rámci týmu Během práce na projektu se uskutečnily celkem 4 schůzky celého týmu. Obsahem byla celková strategie pro řešení projektu, návrh datových struktur pro snadnou komunikaci mezi jednotlivými částmi interpretu a řešení některých problémů a nejasností. Délka schůzky byla průměrně asi 40 minut. Jako hlavní komunikační prostředek na dálku jsme zvolili Facebook - zde jsme vytvořili skupinu pro náš projekt a zároveň používali vestavěný chat systém pro rychlou komunikaci. 4.2 Rozdělení úkolů K prvotnímu rozdělení úkolů došlo poměrně brzy a to následovně: Blanárik, Martin Čulen, Jozef Kadlec, Peter Přikryl, Vojtěch Šoková, Veronika Syntaktická analýza pro výrazy Lexikální analýza Interpret Správa paměti, vestavěné funkce Syntaktická analýza bez výrazů, generování instrukcí Toto rozdělení se postupem času ještě upřesňovalo a v ojedinělých případech se některé úkoly přerozdělovali. Na jednotlivé úkoly nebyly stanoveny nějaké deadliny. S tímto přístupem nebyly nějaké značné problémy, protože přístup všech členů týmu byl v rámci možností svědomitý. 4.3 Správa zdrojového kódu Důležitým aspektem pro vývoj týmového projektu je bezesporu sdílení zdrojového kódu. K tomu jsme využili systém SVN, který byl hostován na školním serveru Merlin. Zde byly sdíleny jak všechny zdrojové kódy týkající se projektu, tak i nějaké další informace, teoretické podklady a zápisy ze schůzek. Počet revizí nakonec přesáhl hodnotu 200. S použitím tohoto systému nebyly výrazné problémy ani u členů týmu, kteří s podobným systémem pracovali poprvé. Praktické zkušenosti s tímto systémem vnímali všichni vesměs pozitivně. 9

10 5. Závěr Práce na projektu nám přinesla určitě hodně zkušeností. Jak z pohledu implementačních dovedností v programovacím jazyku C, tak i z hlediska vývoje aplikace v týmu. V průběhu práce nebyly v týmu žádné problémy s komunikací a na většině rozhodnutí jsme se jednomyslně shodli. Problémy, se kterými jsme se potýkali, tak byly vesměs technického rázu. Někteří členové měli výrázné problémy s implementací některých svých úkolů a tyto problémy musely být následně řešeny přerozdělením úkolů. Nakonec jsme se však shodli na rovnoměrném rozdělení bodů. Výsledný interpret pracuje dle zadání a je obohacen o rozšíření BYTECODE. Jelikož byl vyvíjen v normě ISO C99, měl by být plně přenosný. Byl testovaný na 32- i 64- bitové architektuře na systémech GNU/Linux (Ubuntu), Unix (CentOS), BSD (FreeBSD) a Microsoft Windows Metriky kódu Počet souborů: 25 Počet řádků zdrojového textu: 5026 Velikost statických dat: 1080 B Velikost spustitelného souboru: B (systém Linux, 32-bitová architektura, bez ladících informací) 10

11 A. Konečný automat pro implementaci lexikálního analyzátoru 11

12 B. LL-gramatika 1. <prog> <telo> eof 2. <telo> ɛ 3. <telo> <func> <telo> 4. <telo> <p> <telo> 5. <prikazy> <p> <prikazy> 6. <prikazy> ɛ 7. <func> function id func ( <param> ) eol <prikazy> end eol 8. <param> ɛ 9. <param> id <n param> 10. <n param>, id <n param> 11. <n param> ɛ 12. <prirad> id = 13. <p> <prirad> <zvysok> 14. <zvysok> vyraz eol 15. <zvysok> <str term> [ <num term> : <num term> ] eol 16. <str term> string 17. <str term> id 18. <num term> ɛ 19. <num term> numeric 20. <num term> id 21. <p> if vyraz eol <prikazy> else eol <prikazy> end eol 22. <p> while vyraz eol <prikazy> end eol 23. <zvysok> id func ( <term> ) eol 24. <term> ɛ 25. <term> <typ term> <n term> 26. <n term>, <typ term> <n term> 27. <n term> ɛ 28. <typ term> numeric 29. <typ term> nil 30. <typ term> boolean 31. <typ term> <str term> 32. <p> return vyraz eol 12

13 C. Precedenční tabulka + - * / ** < > <= >=!= == ( ) ID ID FUNC, $ NUM STRING BOOL NIL + > > < < < > > > > > > < > < < > > < < < < - > > < < < > > > > > > < > < < > > < Ss Ss < * > > > > < > > > > > > < > < < > > < < Ss < / > > > > < > > > > > > < > < < > > < Ss Ss < ** > > > > > > > > > > > < > < < > > < Ss Ss < < < < < < < > > > > > > < > < < > > < < < < > < < < < < > > > > > > < > < < > > < < < < <= < < < < < > > > > > > < > < < > > < < < < >= < < < < < > > > > > > < > < < > > < < < <!= < < < < < > > > > > > < > < < > > < < < < == < < < < < > > > > > > < > < < > > < < < < ( < < < < < < < < < < < < = < < = Sx < < < < ) > > > > > > > > > > > Sx > Sx Sx > > Sx Sx Sx Sx ID > > > > > > > > > > > Sx > Sx Sx > > Sx Sx Sx Sx ID FUNC Sx Sx Sx Sx Sx Sx Sx Sx Sx Sx Sx = Sx Sx Sx Sx Sx Sx Sx Sx Sx, < < < < < < < < < < < < = < < = Sx < < < < $ < < < < < < < < < < < < Sx < < Sx Sx < < < < NUM > > > > > > > > > > > Sx > Sx Sx > > Sx Sx Sx Sx STRING > Ss > Ss Ss > > > > > > Sx > Sx Sx > > Sx Sx Sx Sx BOOL Ss Ss Ss Ss Ss > > > > > > Sx > Sx Sx > > Sx Sx Sx Sx NIL > > > > > > > > > > > Sx > Sx Sx > > Sx Sx Sx Sx $ - začátek a konec výrazu Sx - Syntaktická chyba Ss - Sémantická chyba 13

14 D. Instrukční sada legenda: ip proměnná: -1..-n (zásobník) ik konstanta: 0..n (tabulka konstant) ii instrukce: 0..n (instrukční páska) T typ pro pole unionů P počet - NIL kód operandy popis I NOP -,-,- prázdná operace I EXIT -,-,- konec programu I LAB -,-,- návěští vestavěné funce: I INPUT -,-,ip načítání znaků ze standardního vstupu I NUM ip/ik,-,ip vrátí číslo vzniklé převodem termu typu řetězec nebo číslo I TYPE ip/ik,-,ip vrátí typ proměnné nebo termu I LEN ip/ik,-,ip vrátí délku řetězce I FIND ip/ik,ip/ik,ip hledá 1. výskyt podřetězce v zadaném řetězci a vrátí jeho pozici I SORT ip/ik,-,ip seřadí znaky v řetězci tak, aby ordinálně nižší znak byl před vyšším I PRINT P,-,iP vypíše hodnoty termu (P = počet parametrů předaných na zásobník) I SUBSTR1 ip/ik,-,- výběr podřetězce (načítá řetězec) I SUBSTR2 ip/ik,ip/ik,ip výběr podřetězce (pozicie od, pozice do, výsledek) řídíci instrukce: I PUSH ip/ik,t,- vložení na zásobník I PUSHN -,P,- vloží na zásobník P-počet NILů I MOV ik,t,ip přesun hodnoty I CALL P,P,iI volání funkce (počet parametrů, počet lok. proměnných, návěští funkce) I RET -,T,iP návrat z funkce (ip = návratová hodnota) I JMP ip/ik,-,ii podmíněný skok aritmetické instrukce: I ADD ip/ik,ip/ik,ip a + b I SUB ip/ik,ip/ik,ip a b I MUL ip/ik,ip/ik,ip a b I DIV ip/ik,ip/ik,ip a/b I POW ip/ik,ip/ik,ip a b I POWSTR ip/ik,ip/ik,ip mocnina řetězce I CONCAT ip/ik,ip/ik,ip konkatenance řetězce relační instrukce: I CMP ip/ik,ip/ik,ip a = b I EXCLEQ ip/ik,ip/ik,ip a b I LOWER ip/ik,ip/ik,ip a < b I HIGHER ip/ik,ip/ik,ip a > b I LOWEREQ ip/ik,ip/ik,ip a b I HIGHEREQ ip/ik,ip/ik,ip a b I PLUS ip/ik,ip/ik,ip rozhoduje, jestli použít I ADD nebo I CONCAT I ASTERISK ip/ik,ip/ik,ip rozhoduje, jestli použít I MUL nebo I POWSTR 14

Implementace překladače imperativního jazyka IFJ05

Implementace překladače imperativního jazyka IFJ05 Dokumentace ke společnému projektu IFJ a IAL Implementace překladače imperativního jazyka IFJ05 16. prosince 2005 řešitelé David Bařina xbarin02 Kamil Dudka xdudka00 Jakub Filák xfilak01 Lukáš Hefka xhefka00

Více

Interpret jazyka IFJ2011

Interpret jazyka IFJ2011 Dokumentace projektu Interpret jazyka IFJ2011 Tým číslo 093, varianta b/3/i: 20 % bodů: Cupák Michal (xcupak04) vedoucí týmu 20 % bodů: Číž Miloslav (xcizmi00) 20 % bodů: Černá Tereza (xcerna01) 20 % bodů:

Více

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

Maturitní otázky z předmětu PROGRAMOVÁNÍ Wichterlovo gymnázium, Ostrava-Poruba, příspěvková organizace Maturitní otázky z předmětu PROGRAMOVÁNÍ 1. Algoritmus a jeho vlastnosti algoritmus a jeho vlastnosti, formy zápisu algoritmu ověřování správnosti

Více

Implementace LL(1) překladů

Implementace LL(1) překladů Překladače, přednáška č. 6 Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz Poslední aktualizace: 30. října 2007 Postup Programujeme syntaktickou analýzu: 1 Navrhneme vhodnou LL(1) gramatiku

Více

Konstruktory překladačů

Konstruktory překladačů Konstruktory překladačů Miroslav Beneš Dušan Kolář Konstruktor Lex generátor lexikálních analyzátorů M. E. Lesk, 1975 - pro OS Unix flex - Vern Paxson, 1990 - GNU verze určeno pro generování výstupu v

Více

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

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu: Čtvrtek 8 prosince Pascal - opakování základů Struktura programu: 1 hlavička obsahuje název programu, použité programové jednotky (knihovny), definice konstant, deklarace proměnných, všechny použité procedury

Více

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

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

Více

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

Syntaktická analýza. Implementace LL(1) překladů. Šárka Vavrečková. Ústav informatiky, FPF SU Opava Implementace LL(1) překladů Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz Poslední aktualizace: 6. ledna 2012 Postup Programujeme syntaktickou analýzu: 1 Navrhneme vhodnou LL(1) gramatiku

Více

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

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

Více

Struktura programu v době běhu

Struktura programu v době běhu Struktura programu v době běhu Miroslav Beneš Dušan Kolář Struktura programu v době běhu Vztah mezi zdrojovým programem a činností přeloženého programu reprezentace dat správa paměti aktivace podprogramů

Více

Západočeská univerzita v Plzni Dokumentace překladače PL/0 v PHP Předmět KIV/FJP

Západočeská univerzita v Plzni Dokumentace překladače PL/0 v PHP Předmět KIV/FJP Západočeská univerzita v Plzni Dokumentace překladače PL/0 v PHP Předmět KIV/FJP Petr Sládek slady@slady.cz 27. ledna 2005 Zadání Cílem této semestrální práce je kontrola zdrojového kódu překladače jazyka

Více

Programovací jazyk Pascal

Programovací jazyk Pascal Programovací jazyk Pascal Syntaktická pravidla (syntaxe jazyka) přesná pravidla pro zápis příkazů Sémantická pravidla (sémantika jazyka) pravidla, která každému příkazu přiřadí přesný význam Všechny konstrukce

Více

Lexikální analýza Teorie programovacích jazyků

Lexikální analýza Teorie programovacích jazyků Lexikální analýza Teorie programovacích jazyků doc. Ing. Jiří Rybička, Dr. ústav informatiky PEF MENDELU v Brně rybicka@mendelu.cz Osnova dnešní přednášky 1 Úvod do teorie překladačů kompilátor a interpret

Více

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

Sémantika Tabulka symbolů Intermediální kód Typová kontrola, přetypování Statická a dynamická sémantika. Sémantická analýza. Sémantická analýza Šárka Vavrečková Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz Poslední aktualizace: 19. listopadu 2009 Definice (Sémantická analýza) Vstup: konstrukce symbolů vytvořená

Více

Roman Lukáš email: lukas@fit.vutbr.cz

Roman Lukáš email: lukas@fit.vutbr.cz ZADÁNÍ PROJEKTU Z PŘEDMĚTŮ IFJ A IAL Roman Lukáš email: lukas@fit.vutbr.cz 22. září 2008 1 Obecné informace Název projektu: Implementace interpretu imperativního jazyka IFJ08. Informace: diskusní skupina

Více

Poslední aktualizace: 14. října 2011

Poslední aktualizace: 14. října 2011 Lexikální analýza Překladače, přednáška č. 2 Šárka Vavrečková Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz http://fpf.slu.cz/ vav10ui Poslední aktualizace: 14. října 2011 Symboly Co je to

Více

1 2 3 4 5 6 součet cvičení celkem. známka. Úloha č.: max. bodů: skut. bodů:

1 2 3 4 5 6 součet cvičení celkem. známka. Úloha č.: max. bodů: skut. bodů: Úloha č.: max. bodů: skut. bodů: 1 2 3 4 5 6 součet cvičení celkem 20 12 20 20 14 14 100 známka UPOZORNĚNÍ : a) Písemná zkouška obsahuje 6 úloh, jejichž řešení musí být vepsáno do připraveného formuláře.

Více

ALGORITMIZACE A PROGRAMOVÁNÍ

ALGORITMIZACE A PROGRAMOVÁNÍ Metodický list č. 1 Algoritmus a jeho implementace počítačovým programem Základním cílem tohoto tematického celku je vysvětlení pojmů algoritmus a programová implementace algoritmu. Dále je cílem seznámení

Více

8. Laboratoř: Aritmetika a řídicí struktury programu

8. Laboratoř: Aritmetika a řídicí struktury programu 8. Laboratoř: Aritmetika a řídicí struktury programu Programy v JSA aritmetika, posuvy, využití příznaků Navrhněte a simulujte v AVR studiu prográmky pro 24 bitovou (32 bitovou) aritmetiku: sčítání, odčítání,

Více

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku Znaky - standardní typ char var Z, W: char; - znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku - v TP (často i jinde) se používá kódová

Více

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632

Více

Program a životní cyklus programu

Program a životní cyklus programu Program a životní cyklus programu Program algoritmus zapsaný formálně, srozumitelně pro počítač program se skládá z elementárních kroků Elementární kroky mohou být: instrukce operačního kódu počítače příkazy

Více

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

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7 Pascal Katedra aplikované kybernetiky Ing. Miroslav Vavroušek Verze 7 Proměnné Proměnná uchovává nějakou informaci potřebnou pro práci programu. Má ve svém oboru platnosti unikátní jméno. (Připadne, musí

Více

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

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

Více

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

Programování v C++, 2. cvičení Programování v C++, 2. cvičení 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 Operátory new a delete 2 3 Operátory new a delete minule

Více

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

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 KAPITOLA 1 Úvod do programo vání v jazyce C++ 17 Základní pojmy 17 Proměnné a konstanty 18 Typy příkazů 18 IDE integrované vývojové

Více

Princip funkce počítače

Princip funkce počítače Princip funkce počítače Princip funkce počítače prvotní úlohou počítačů bylo zrychlit provádění matematických výpočtů první počítače kopírovaly obvyklý postup manuálního provádění výpočtů pokyny pro zpracování

Více

Datové struktury 2: Rozptylovací tabulky

Datové struktury 2: Rozptylovací tabulky Datové struktury 2: Rozptylovací tabulky prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní algoritmy

Více

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

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje f1(&pole[4]); funkci f1 předáváme hodnotu 4. prvku adresu 4. prvku adresu 5. prvku hodnotu 5. prvku symbolická konstanta pro konec souboru je eof EOF FEOF feof Správné vytvoření a otevření textového souboru

Více

email: {ikroustek, krivka}@fit.vutbr.cz

email: {ikroustek, krivka}@fit.vutbr.cz ZADÁNÍ PROJEKTU Z PŘEDMĚTŮ IFJ A IAL Jakub Křoustek, Zbyněk Křivka email: {ikroustek, krivka}@fit.vutbr.cz 21. září 2010 1 Obecné informace Název projektu: Implementace interpretu imperativního jazyka

Více

Úvod z historie. Kompilátory. Kompilace / Kompilátor Compile / Compiler. Pojem kompilátoru. Úvod z historie

Úvod z historie. Kompilátory. Kompilace / Kompilátor Compile / Compiler. Pojem kompilátoru. Úvod z historie Úvod z historie RNDr. Miroslav Benedikovič John Louis von Neumann r. 1946 nová koncepce počítače (společná paměť pro kód programu a zpracovávaná data) vytvořila podmínky pro vznik softvéru na přípravu

Více

Překladač a jeho struktura

Překladač a jeho struktura Překladač a jeho struktura Překladače, přednáška č. 1 Šárka Vavrečková Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz http://fpf.slu.cz/ vav10ui Poslední aktualizace: 23. září 2008 Definice

Více

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

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky Vyučovací hodina 1vyučovací hodina: Opakování z minulé hodiny Nová látka Procvičení nové látky Shrnutí 5 min 20 min 15 min 5 min 2vyučovací hodiny: Opakování z minulé hodiny Nová látka Procvičení nové

Více

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

Vstupní požadavky, doporučení a metodické pokyny Název modulu: Základy PHP Označení: C9 Stručná charakteristika modulu Modul je orientován na tvorbu dynamických stánek aktualizovaných podle kontextu volání. Jazyk PHP umožňuje velmi jednoduchým způsobem

Více

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.

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. Informatika 10. 9. 2013 Jméno a příjmení Rodné číslo 1) Napište algoritmus pro rychlé třídění (quicksort). 2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus

Více

Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě

Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě Metody přidělování paměti Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě Důležitá hlediska jazykových konstrukcí: Dynamické typy Dynamické

Více

PROGRAMOVÁNÍ V JAZYCE C V PŘÍKLADECH 11 Dynamické datové struktury 11.1 Spojové struktury... 11-1 11.2 Příklad PROG_11-01... 11-2 11.

PROGRAMOVÁNÍ V JAZYCE C V PŘÍKLADECH 11 Dynamické datové struktury 11.1 Spojové struktury... 11-1 11.2 Příklad PROG_11-01... 11-2 11. David Matoušek Programování v jazyce C v pøíkladech Praha 2011 David Matoušek Programování v jazyce C v pøíkladech Bez pøedchozího písemného svolení nakladatelství nesmí být kterákoli èást kopírována nebo

Více

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

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LEXIKÁLNÍ ANALÝZA PROGRAMOVACÍ JAZYKY A PŘEKLADAČE LEXIKÁLNÍ ANALÝZA 2011 Jan Janoušek BI-PJP Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti LEXIKÁLNÍ ANALÝZA Kód ve vstupním jazyku Lexikální analyzátor

Více

TÉMATICKÝ OKRUH Softwarové inženýrství

TÉMATICKÝ OKRUH Softwarové inženýrství TÉMATICKÝ OKRUH Softwarové inženýrství Číslo otázky : 24. Otázka : Implementační fáze. Postupy při specifikaci organizace softwarových komponent pomocí UML. Mapování modelů na struktury programovacího

Více

Základy programování (IZP)

Základy programování (IZP) Základy programování (IZP) Deváté počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Petr Veigend, iveigend@fit.vutbr.cz 27.11.2017,

Více

Přednáška 8. Proměnné. Psaní a ladění skriptů. Parametry skriptu. Vstup a výstup. Konfigurační soubory shellu. Úvod do Operačních Systémů Přednáška 8

Přednáška 8. Proměnné. Psaní a ladění skriptů. Parametry skriptu. Vstup a výstup. Konfigurační soubory shellu. Úvod do Operačních Systémů Přednáška 8 Přednáška 8 Proměnné. Psaní a ladění skriptů. Parametry skriptu. Vstup a výstup. Konfigurační soubory shellu. 1 Proměnné Jména nových proměnných by neměly kolidovat se jmény předdefinovaných proměnných.

Více

Základy algoritmizace. Hašování

Základy algoritmizace. Hašování Základy algoritmizace Hašování Problematika hašování Hašování - nástroj na jednoduchý způsob "zakódování vstupních dat. Vstupní data jsou zpracována hašovací funkcí jsou jistým způsobem komprimována. Relativně

Více

Činnost CPU. IMTEE Přednáška č. 2. Několik úrovní abstrakce od obvodů CPU: Hodinový cyklus fáze strojový cyklus instrukční cyklus

Činnost CPU. IMTEE Přednáška č. 2. Několik úrovní abstrakce od obvodů CPU: Hodinový cyklus fáze strojový cyklus instrukční cyklus Činnost CPU Několik úrovní abstrakce od obvodů CPU: Hodinový cyklus fáze strojový cyklus instrukční cyklus Hodinový cyklus CPU je synchronní obvod nutné hodiny (f CLK ) Instrukční cyklus IF = doba potřebná

Více

Da D to t v o é v ty t py IB111: Datové typy

Da D to t v o é v ty t py IB111: Datové typy Datové typy IB111: Datové typy Data a algoritmizace jaká data potřebuji pro vyřešení problému? jak budu data reprezentovat? jaké operaci s nimi potřebuji provádět? Navržení práce s daty je velice důležité

Více

Časová a prostorová složitost algoritmů

Časová a prostorová složitost algoritmů .. Časová a prostorová složitost algoritmů Programovací techniky doc. Ing. Jiří Rybička, Dr. ústav informatiky PEF MENDELU v Brně rybicka@mendelu.cz Hodnocení algoritmů Programovací techniky Časová a prostorová

Více

Uplatnění metod na zvolený jazyk

Uplatnění metod na zvolený jazyk Uplatnění metod na zvolený jazyk Při výběru mezi metodami výše popsanými se řídíme především podle typu symbolů, které jazyk obsahuje. Výhodná bývá často kombinace těchto metod nejdřív použijeme metodu

Více

Rozšíření ksh vůči sh při práci s proměnnými

Rozšíření ksh vůči sh při práci s proměnnými Rozšíření ksh vůči sh při práci s proměnnými (X36UNX, Jan Skalický, 2006) Pole homogenní lineární struktura implicitn ě s číselným rozsahem index ů 0...1023 (někde 4095) implicitn ě řetězcov ě orientovaná

Více

Generování vnitřní reprezentace programu

Generování vnitřní reprezentace programu Generování vnitřní reprezentace programu Miroslav Beneš Dušan Kolář Možnosti překladu Interpretace Okamžité provádění programu Překlad do instrukcí procesoru Závislost na konkrétním typu procesoru Překlad

Více

Maturitní témata. IKT, školní rok 2017/18. 1 Struktura osobního počítače. 2 Operační systém. 3 Uživatelský software.

Maturitní témata. IKT, školní rok 2017/18. 1 Struktura osobního počítače. 2 Operační systém. 3 Uživatelský software. Maturitní témata IKT, školní rok 2017/18 1 Struktura osobního počítače Von Neumannova architektura: zakreslete, vysvětlete její smysl a popište, jakým způsobem se od ní běžné počítače odchylují. Osobní

Více

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20 Obsah 5 Obsah Předmluva k aktuálnímu vydání 15 1 Úvod k prvnímu vydání z roku 2000 16 Typografické a syntaktické konvence................ 20 2 Základní pojmy 21 2.1 Trocha historie nikoho nezabije................

Více

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

5 Přehled operátorů, příkazy, přetypování 5 Přehled operátorů, příkazy, přetypování Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně budou uvedeny detaily týkající se operátorů. Doba nutná k nastudování

Více

Konstruktory a destruktory

Konstruktory a destruktory Konstruktory a destruktory Nedostatek atributy po vytvoření objektu nejsou automaticky inicializovány hodnota atributů je náhodná vytvoření metody pro inicializaci, kterou musí programátor explicitně zavolat,

Více

ADT/ADS = abstraktní datové typy / struktury

ADT/ADS = abstraktní datové typy / struktury DT = datové typy obor hodnot, které může proměnná nabývat, s operacemi na tomto oboru určen: obor hodnot + výpočetní operace např. INT = { 2 147 483 648 až +2 147 483 647} + {+,,*,/,} ADT/ADS = abstraktní

Více

ISU Cvičení 7. Marta Čudová

ISU Cvičení 7. Marta Čudová ISU Cvičení 7 Marta Čudová Supercomputing Technologies Research Group Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole icudova@fit.vutbr.cz Osnova

Více

Aplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2006/2007 Radim Farana. Obsah. Obsah předmětu

Aplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2006/2007 Radim Farana. Obsah. Obsah předmětu 1 Podklady předmětu pro akademický rok 2006/2007 Radim Farana Obsah 2 Obsah předmětu, Požadavky kreditového systému, Datové typy jednoduché, složené, Programové struktury, Předávání dat. Obsah předmětu

Více

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ 1) PROGRAM, ZDROJOVÝ KÓD, PŘEKLAD PROGRAMU 3 2) HISTORIE TVORBY PROGRAMŮ 3 3) SYNTAXE A SÉMANTIKA 3 4) SPECIFIKACE

Více

Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě

Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě Metody přidělování paměti Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě Důležitá hlediska jazykových konstrukcí: Dynamické typy Dynamické

Více

Standardní algoritmy vyhledávací.

Standardní algoritmy vyhledávací. Standardní algoritmy vyhledávací. Vyhledávací algoritmy v C++ nám umožňují vyhledávat prvky v datových kontejnerech podle různých kritérií. Také se podíváme na vyhledávání metodou půlením intervalu (binární

Více

Algoritmizace řazení Bubble Sort

Algoritmizace řazení Bubble Sort Algoritmizace řazení Bubble Sort Cílem této kapitoly je seznámit studenta s třídícím algoritmem Bubble Sort, popíšeme zde tuto metodu a porovnáme s jinými algoritmy. Klíčové pojmy: Třídění, Bubble Sort,

Více

ŠVP Gymnázium Ostrava-Zábřeh. 4.8.16. Úvod do programování

ŠVP Gymnázium Ostrava-Zábřeh. 4.8.16. Úvod do programování 4.8.16. Úvod do programování Vyučovací předmět Úvod do programování je na naší škole nabízen v rámci volitelných předmětů v sextě, septimě nebo v oktávě jako jednoletý dvouhodinový kurz. V případě hlubšího

Více

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

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI EVROPSKÝ SOCIÁLNÍ FOND Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI Úvod do PHP PHP Personal Home Page Hypertext Preprocessor jazyk na tvorbu dokumentů přípona: *.php skript je součást HTML stránky!

Více

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

type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik; Vícerozměrné pole type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik; M[2,3] := 3145; - počet indexů není omezen (v praxi obvykle nejvýše tři) - více indexů pomalejší přístup k prvku (počítá

Více

Sdílení dat mezi podprogramy

Sdílení dat mezi podprogramy Sdílení dat mezi podprogramy Datové objekty mohou být mezi podprogramy sdíleny pomocí ne-lokálních referenčních prostředí, která jsou vytvářena na základě æ explicitních modifikací (formální parametry

Více

Úvod. Programovací paradigmata

Úvod. Programovací paradigmata .. Úvod. Programovací paradigmata Programovací techniky doc. Ing. Jiří Rybička, Dr. ústav informatiky PEF MENDELU v Brně rybicka@mendelu.cz Cíl: programování efektivně a bezpečně Programovací techniky

Více

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

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí) Programovací jazyky Programovací jazyky nižší assembler (jazyk symbolických instrukcí) vyšší imperativní (procedurální) Pascal, C/C++, Java, Basic, Python, php neimperativní (neprocedurální) Lisp, Prolog

Více

Datové typy a struktury

Datové typy a struktury atové typy a struktury Jednoduché datové typy oolean = logická hodnota (true / false) K uložení stačí 1 bit často celé slovo (1 byte) haracter = znak Pro 8-bitový SII kód stačí 1 byte (256 možností) Pro

Více

Matematika v programovacích

Matematika v programovacích Matematika v programovacích jazycích Pavla Kabelíková am.vsb.cz/kabelikova pavla.kabelikova@vsb.cz Úvodní diskuze Otázky: Jaké programovací jazyky znáte? S jakými programovacími jazyky jste již pracovali?

Více

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

Spojová implementace lineárních datových struktur Spojová implementace lineárních datových struktur doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 13. března 2017 Jiří Dvorský (VŠB

Více

Algoritmizace prostorových úloh

Algoritmizace prostorových úloh INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Datové struktury Daniela Szturcová

Více

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody Dynamická alokace paměti Jazyky C a C++ poskytují programu možnost vyžádat si část volné operační paměti pro

Více

09. Memory management. ZOS 2006, L.Pešička

09. Memory management. ZOS 2006, L.Pešička 09. Memory management ZOS 2006, L.Pešička Správa paměti paměťová pyramida absolutní adresa relativní adresa počet bytů od absolutní adresy fyzický prostor adres fyzicky k dispozici výpočetnímu systému

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Řídicí struktury jazyka Java Struktura programu Příkazy jazyka Blok příkazů Logické příkazy Ternární logický operátor Verze pro akademický rok 2012/2013 1 Struktura programu

Více

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

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií 1 Fakulta elektrotechniky a informatiky Katedra softwarových technologií 12. října 2009 Organizace výuky Přednášky Teoretické základy dle normy jazyka C Cvičení Praktické úlohy odpřednášené látky Prostřední

Více

Návrh designu: Radek Mařík

Návrh designu: Radek Mařík Návrh designu: Radek Mařík 1. Hashovací (=rozptylovací) funkce a) převádí adresu daného prvku na jemu příslušný klíč b) vrací pro každý klíč jedinečnou hodnotu c) pro daný klíč vypočte adresu d) vrací

Více

Ukazka knihy z internetoveho knihkupectvi www.kosmas.cz

Ukazka knihy z internetoveho knihkupectvi www.kosmas.cz Ukazka knihy z internetoveho knihkupectvi www.kosmas.cz Upozornění pro čtenáře a uživatele této knihy Všechna práva vyhrazena. Žádná část této tištěné či elektronické knihy nesmí být reprodukována a šířena

Více

IB111 Úvod do programování skrze Python

IB111 Úvod do programování skrze Python Vyhledávání, řazení, složitost IB111 Úvod do programování skrze Python 2012 Otrávené studny 8 studen, jedna z nich je otrávená laboratorní rozbor dokáže rozpoznat přítomnost jedu ve vodě je drahý (je časově

Více

Jazyk symbolických adres

Jazyk symbolických adres Jazyk symbolických adres 1 Proč programovat v JSA Pro některé procesory resp. MCU jsou překladače JSA dostupnější. Některé překladače vyšších jazyků neumí využít určité speciální vlastnosti procesoru.

Více

1. D Y N A M I C K É DAT O V É STRUKTUR Y

1. D Y N A M I C K É DAT O V É STRUKTUR Y 1. D Y N A M I C K É DAT O V É STRUKTUR Y Autor: Petr Mik Abychom se mohli pustit do dynamických datových struktur, musíme se nejdřív podívat na datový typ ukazatel. 1. D AT O V Ý TYP U K A Z AT E L Datové

Více

Strojový kód. Instrukce počítače

Strojový kód. Instrukce počítače Strojový kód Strojový kód (Machine code) je program vyjádřený v počítači jako posloupnost instrukcí procesoru (posloupnost bajtů, resp. bitů). Z hlediska uživatele je strojový kód nesrozumitelný, z hlediska

Více

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

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632

Více

Lineární datové struktury

Lineární datové struktury Lineární datové struktury doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 13. března 2017 Jiří Dvorský (VŠB TUO) Lineární datové

Více

Lokální definice (1) plocha-kruhu

Lokální definice (1) plocha-kruhu Lokální definice (1) syntaxe: (local (seznam definic) výraz) definice jsou dostupné pouze uvnitř příkazu local příklad: (local ( (define Pi 3.1415926) (define (plocha-kruhu r) (* Pi r r)) ) (plocha-kruhu

Více

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

Programování v C++ 1, 1. cvičení Programování v C++ 1, 1. cvičení opakování látky ze základů programování 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 Shrnutí procvičených

Více

Rekurzivní algoritmy

Rekurzivní algoritmy Rekurzivní algoritmy prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní algoritmy (BI-EFA) ZS

Více

1/1 ČESKÁ ZEMĚDĚLSKÁ UNIVERZITA V PRAZE PROVOZNĚ EKONOMICKÁ FAKULTA PŘIJÍMACÍ ŘÍZENÍ 2017/2018

1/1 ČESKÁ ZEMĚDĚLSKÁ UNIVERZITA V PRAZE PROVOZNĚ EKONOMICKÁ FAKULTA PŘIJÍMACÍ ŘÍZENÍ 2017/2018 ČESKÁ ZEMĚDĚLSKÁ UNIVERZITA V PRAZE PROVOZNĚ EKONOMICKÁ FAKULTA PŘIJÍMACÍ ŘÍZENÍ 2017/2018 Informační technologie 1 - Doporučená doba zpracování: 40 minut 1) Termín DCL v relačně databázové technologii

Více

Úvod do programování 6. hodina

Úvod do programování 6. hodina Úvod do programování 6. hodina RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015 Umíme z minulé hodiny Algoritmy Třídění pole: Selection

Více

Úvod do programovacích jazyků (Java)

Úvod do programovacích jazyků (Java) Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích

Více

Úvod do programování. Lekce 1

Úvod do programování. Lekce 1 Úvod do programování Lekce 1 Základní pojmy vytvoření spustitelného kódu editor - psaní zdrojových souborů preprocesor - zpracování zdrojových souborů (vypuštění komentářů atd.) kompilátor (compiler) -

Více

DSL manuál. Ing. Jan Hranáč. 27. října 2010. V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

DSL manuál. Ing. Jan Hranáč. 27. října 2010. V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v DSL manuál Ing. Jan Hranáč 27. října 2010 V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v současné době krátký) seznam vestavěných funkcí systému. 1 Vytvoření nového dobrodružství Nejprve

Více

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

Paměť počítače. alg2 1 Paměť počítače Výpočetní proces je posloupnost akcí nad daty uloženými v paměti počítače Data jsou v paměti reprezentována posloupnostmi bitů (bit = 0 nebo 1) Připomeňme: paměť je tvořena řadou 8-mi bitových

Více

Poslední nenulová číslice faktoriálu

Poslední nenulová číslice faktoriálu Poslední nenulová číslice faktoriálu Kateřina Bambušková BAM015, I206 Abstrakt V tomto článku je popsán a vyřešen problém s určením poslední nenulové číslice faktoriálu přirozeného čísla N. Celý princip

Více

Opakování programování

Opakování programování Opakování programování HW návaznost - procesor sběrnice, instrukční sada, optimalizace rychlosti, datové typy, operace (matematické, logické, podmínky, skoky, podprogram ) - paměti a periferie - adresování

Více

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague Assembler pro Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague Zápis instrukcí umíme už zapisovat instrukce v binárním tvaru to je silně nešikovné pro snazší vývoj

Více

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.

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. 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. 1 Příkaz expr výraz Celočíselná aritmetika I Zašle na standardní výstup vyhodnocení výrazu

Více

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty Data v počítači Informační data (elementární datové typy) Logické hodnoty Znaky Čísla v pevné řádové čárce (celá čísla) v pohyblivé (plovoucí) řád. čárce (reálná čísla) Povelová data (instrukce programu)

Více

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo Operátory, výrazy Tomáš Pitner, upravil Marek Šabo Operátor "Znaménko operace", pokyn pro vykonání operace při vyhodnocení výrazu. V Javě mají operátory napevno daný význam, nelze je přetěžovat jako v

Více

Semestrální práce z předmětu Teorie programovacích jazyků

Semestrální práce z předmětu Teorie programovacích jazyků Vysoké učení technické v Brně Fakulta informačních technologií Semestrální práce z předmětu Teorie programovacích jazyků Roman Lukáš 2003-2004 1 Jazykové procesory (Language Processors) 1.1 Překladače

Více

Konečný automat. Jan Kybic.

Konečný automat. Jan Kybic. Konečný automat Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 2017 1 / 33 Konečný automat finite state machine Konečný automat = výpočetní model, primitivní počítač Řídící jednotka s

Více

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5 Obsah Obsah 1 Programovací jazyk Pascal 1 1.1 Struktura programu v Pascalu.................... 1 2 Proměnné 2 2.1 Vstup a výstup............................ 3 3 Operátory a některé matematické funkce 5

Více