TÉMATICKÝ OKRUH TZD, DIS a TIS



Podobné dokumenty
Překladač a jeho struktura

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

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

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

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

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

Úvod. Programovací paradigmata

Program a životní cyklus programu

Programovací jazyk Pascal

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

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

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

IB111 Programování a algoritmizace. Programovací jazyky

Implementace LL(1) překladů

11. Přehled prog. jazyků

Matematika v programovacích

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

Systém adresace paměti

Vlákno (anglicky: thread) v informatice označuje vlákno výpočtu neboli samostatný výpočetní tok, tedy posloupnost po sobě jdoucích operací.

Programování v C++ Úplnej úvod. Peta (maj@arcig.cz, SPR AG )

Algoritmizace a programování

Algoritmizace- úvod. Ing. Tomáš Otáhal

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

IB111 Úvod do programování skrze Python Přednáška 13

Vlastnosti Derivační strom Metody Metoda shora dolů Metoda zdola nahoru Pomocné množiny. Syntaktická analýza. Metody a nástroje syntaktické analýzy

Interpret jazyka IFJ2011

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

Předměty. Algoritmizace a programování Seminář z programování. Verze pro akademický rok 2012/2013. Verze pro akademický rok 2012/2013

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

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

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

1. Definujte překladač. Jaký je rozdíl mezi interpretačním a kompilačním překladačem? Co je to konverzační překladač?

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

NÁSTROJE PRO VIRTUALIZACI POČÍTAČE

ČÁST 1. Základy 32bitového programování ve Windows

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

Pokročilé architektury počítačů

1 Strukturované programování

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

Základní pojmy. Program: Algoritmus zapsaný v programovacím jazyce, který řeší nějaký konkrétní úkol. Jedná se o posloupnost instrukcí.

8) Jaké jsou důvody pro použití víceprůchodového překladače Dříve hlavně kvůli úspoře paměti, dnes spíše z důvodu optimalizace

VIRTUALIZACE POČÍTAČE HISTORIE A VÝVOJ

Principy operačních systémů. Lekce 1: Úvod

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

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

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Úvod do programovacích jazyků (Java)

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE STRUKTURA PŘEKLADAČE

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

OPERAČNÍ SYSTÉMY. Operační systém je prostředník mezi hardwarem (technickým vybavením počítače) a určitým programem, který uživatel používá.

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

Úvod do programování

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

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

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

Vrstvy programového vybavení Klasifikace Systémové prostředky, ostatní SW Pořizování Využití

Západočeská univerzita FAKULTA APLIKOVANÝCH VĚD

Vývoj programů. ÚVOD DO OPERAČNÍCH SYSTÉMŮ

Inovace výuky prostřednictvím ICT v SPŠ Zlín, CZ.1.07/1.5.00/ Vzdělávání v informačních a komunikačních technologií

Konstruktory překladačů

Počítač jako prostředek řízení. Struktura a organizace počítače

monolitická vrstvená virtuální počítač / stroj modulární struktura Klient server struktura

Procesy a vlákna (Processes and Threads)

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

Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám.

VÝUKOVÝ MATERIÁL. 3. ročník učebního oboru Elektrikář Přílohy. bez příloh. Identifikační údaje školy

Programovací jazyky Přehled a vývoj

Registrační číslo projektu: CZ.1.07/1.5.00/ Elektronická podpora zkvalitnění výuky CZ.1.07 Vzděláním pro konkurenceschopnost

Služba ve Windows. Služba (service) je program

Prohledávání do šířky = algoritmus vlny

Principy operačních systémů. Lekce 5: Multiprogramming a multitasking, vlákna

MPASM a IDE pro vývoj aplikací MCU (Microchip)

1.Charakterizujte křížový překladač 2.Objasněte pojem silikonový překladač 3.Co to jsou formátory textu? Uveďte příklad

Vzdělávací oblast: Informatika a informační a komunikační technologie Vzdělávací obor: Programování. Předmět: Programování

OPS Paralelní systémy, seznam pojmů, klasifikace

Obsah. Kapitola 1 Hardware, procesory a vlákna Prohlídka útrob počítače...20 Motivace pro vícejádrové procesory...21

OSTRAVSKÁ UNIVERZITA V OSTRAVĚ

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

Struktura programu v době běhu

Implementace překladače imperativního jazyka IFJ05

Virtualizace na Linuxu

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

Architektura rodiny operačních systémů Windows NT Mgr. Josef Horálek

ALGORITMIZACE A PROGRAMOVÁNÍ

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

Výukový materiál zpracován v rámci projektu EU peníze školám

C2115 Praktický úvod do superpočítání

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ě

Technické vývojové prostředky

Činnost počítače po zapnutí

1 Základních pojmy z oblasti programování, vyšší programovací jazyky, programovací paradigmata

Algoritmus. Cílem kapitoly je seznámit žáky se základy algoritmu, s jeho tvorbou a způsoby zápisu.

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ě

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

zapište obslužnou metodu události Click tlačítka a vyzkoušejte chování polevýsledek.text = polečíslo1.text + polečíslo2.text;

Profilová část maturitní zkoušky 2017/2018

ZÁKLADY PROGRAMOVÁNÍ. Mgr. Vladislav BEDNÁŘ /14

Transkript:

TÉMATICKÝ OKRUH TZD, DIS a TIS Číslo otázky : 27. Otázka : Principy moderních překladačů, virtuální stroj. Obsah : 1.Překladač a jeho struktura 2.Druhy překladačů 3.Hlavní části překladače 3.1 Lexikální analyzátor 3.2 Syntaktický analyzátor 3.3 Sémantický analyzátor 3.4 Generátor intermediálního kódu a cílového programu 3.5 Další funkce 4.Jednoprůchodový a víceprůchodový překladač 5.Zpracování chyb 6.Virtuální stroj 6.1 Hardwarový virtuální stroj 6.2 Aplikační virtuální stroj 6.3 Virtuální prostředí

1. Překladač a jeho struktura Překladač je program, který k libovolnému programu P Z v jazyku J Z vytvoří program P C v jazyku J C se stejným významem. Nazýváme: P Z... zdrojový (překládaný) program, P C... cílový (přeložený) program. Překladač tedy zpracovává text zdrojového jazyka (zdrojový program) a převádí ho na sémanticky ekvivalentní text cílového jazyka (cílový program). 2. Druhy překladačů Překladače rozlišujeme podle typu cílového programu na dva druhy: kompilátor (generační překladač) je překladač, který má na vstupu program ve vyšším programovacím jazyce (Fortran, Pascal, C, C++, Delphi,...) a cílovým jazykem je strojový jazyk nebo jazyk symbolických instrukcí (JSI, Assembler), interpret (interpretační překladač, někdy také interpreter) pouze interpretuje (provádí) zdrojový program pro zadaná vstupní data, tedy netvoří generovaný program, vytváří jen vnitřní reprezentaci programu pro svou vlastní potřebu (tu lze chápat jako cílový jazyk). Každý z těchto druhů je vhodný pro jinou situaci. Zatímco cílový program kompilátoru (obvykle EXE soubor) se provádí relativně velmi svižně, interpretovaný program je pomalý a pro většinu vyšších programovacích jazyků proto nevhodný, protože překlad je prováděn při každém spuštění programu. U kompilátorů samotný překlad probíhá jen jednou, nesouvisí se samotným prováděním programu, což umožňuje provádět i časově velmi náročné optimalizace a kontroly. Dalšími nevýhodami interpretačního překladače jsou jeho nezbytnost při spuštění interpretovaného programu a náročnost na paměťový prostor, při běhu musí být v paměti nejen zdrojový program, ale také celý překladač. Ale i tento překladač má své výhody, může například umožňovat provedení pouze malé části zdrojového programu, jeho vytvoření je jednodušší, programátor (autor překladače) obvykle nemusí ovládat assembler ani strojový jazyk a při výskytu chyby můžeme spolehlivěji určit její umístění. Některé interprety se pokoušejí oba postupy kombinovat nejdřív program převedou ( předkompilují ) do některého interního kódu a ten potom interpretují. Částečně se tím zrychlí provádění programu, jen těsně po spuštění programu je krátká časová prodleva. Kompilátory zase v sobě obvykle zahrnují možnost krokování, tedy provádění programu postupně po jednotlivých příkazech, což se dá chápat jako interpretace. 3. Hlavní části překladače Překladač rozdělíme na tyto části: lexikální analyzátor syntaktický analyzátor sémantický analyzátor

generátor intermediálního kódu a cílového programu V překladači mohou být tyto části (obvykle zvláštní procedury) striktně odděleny nebo jsou navzájem provázány. Činnost jednotlivých částí nazýváme fáze překladu. Podle závislosti na typu cílového kódu můžeme překladač rozdělit na dvě základní části: přední část zahrnuje lexikální, syntaktickou a sémantickou analýzu. Je do značné míry nezávislá na cílovém systému, generuje vnitřní formu programu. zadní část překladače provádí optimalizaci kódu a generuje cílový program. Tato část je již závislá na cílovém systému. Toto rozdělení zjednodušuje vytváření překladačů téhož jazyka pro různé operační systémy. Překladače mají stejnou přední část, liší se jen v zadní části, protože typ cílového kódu bude jiný, např. pokud chceme vytvořit překladače pro tentýž programovací jazyk, které by běžely pod Windows, Linuxem i MacOS, vytvoříme jedinou přední část zahrnující lexikální, syntaktickou a sémantickou analýzu a tři různé zadní části, které budou generovat spustitelné soubory pro tyto tři operační systémy. Námi vytvořený překladač musí samozřejmě v cílovém operačním systému také fungovat. 3.1 Lexikální analyzátor Provádí transformaci kódu zdrojového programu (obvykle znakového textu) do tvaru, jež je vhodný pro zpracování v dalších fázích překladu. Jeho úkolem je: odstranit nadbytečné znaky textu (některé mezery, konce řádků, komentáře apod.), obvykle jsou tyto znaky prostě ignorovány při převodu na jinou reprezentaci kódu, rozdělit řetězce na symboly (atomy) logicky nejmenší části s vlastním významem každému symbolu přiřadit identifikaci. Po lexikální analýze se každý symbol skládá ze dvou částí. První je identifikace, která určuje, o jaký typ symbolu se jedná (klíčové slovo, konstantní číslo, identifikátor, operátor sčítání,...) a druhá část je vlastní hodnota symbolu (číslo, řetězec, apod.). Zotavení po chybě: nesprávný formát čísla oprava

neukončený řetězec oprava neznámý symbol přeskočení neukončená poznámka oprava 3.2 Syntaktický analyzátor Je nejdůležitější částí překladu. Úkolem tohoto analyzátoru je vytvořit derivační strom celého programu a tím určit jeho strukturu. Zjišťuje, jak jednotlivé symboly vygenerované lexikálním analyzátorem patří k sobě, a zároveň kontroluje syntaktickou správnost programu. Metody: univerzální metody např. analýza s návraty, nejsou moc efektivní překlad shora dolů (LL gramatiky) vhodný pro ruční implementaci LL(1) - L Levý rozklad, L Analýza zleva doprava, 1 Rozhodování podle jednoho symbolu deterministická analýza pojem FIRST(α) a FOLLOW(A) analýza analýza s návraty - Málo efektivní, Prolog analýza rekurzivním sestupem - Vhodná pro ruční implementaci Každý neterminál je reprezentován funkcí, která provádí jeho analýzu Terminální symboly jsou reprezentovány testem na jejich výskyt na vstupu následovaným čtením dalšího symbolu Překlad začíná voláním funkce reprezentující startovací neterminál Nerekurzivní prediktivní analýza. Využití rozkladové tabulky + interpretu - Vhodná pro generované analyzátory překlad zdola nahoru (LR gramatiky) efektivní metoda pro všechny deterministicky analyzovatelné jazyky využití zejména v konstruktorech překladačů analýza se provádí zdola nahoru pomocí zásobníkového automatu k rozhodování dochází na konci pravidla k rozhodování se používá vstupní symbol a obsah zásobníku největší třída jazyků analyzovatelných deterministickými metodami Zotavení po chybě: na úrovni symbolů přeskočení na úrovni vět oprava nedeklarovaný identifikátor oprava typová chyba oprava 3.3 Sémantický analyzátor Každé skupině symbolů získané při syntaktické analýze přiřadí význam. Např. při zpracování deklarace proměnné analyzátor zkontroluje, zda již není deklarována, uloží do

příslušného seznamu její identifikátor (název, typ, počáteční hodnotu a v kterém bloku je lokální), může také proměnné přiřadit paměť (zatím ne přímo adresu v paměti), při použití operátoru pro sčítání zkontroluje, zda jeho operandy jsou správného typu a případně provede přetypování,... 3.4 Generátor intermediálního kódu a cílového programu Vytváří se kód buď v jazyce symbolických adres, ve vlastním jazyce sestavujícího programu (interpretační překladač) nebo přímo v jazyce stroje. Většina překladačů v této fázi negeneruje cílový kód, ale pouze intermediální kód, ze kterého lze cílový kód snadno vytvořit a také jednodušeji optimalizovat (je uložen ve formě tabulky nebo dynamické struktury). Teprve po optimalizaci je vygenerován cílový kód. 3.5 Další funkce Bývají zahrnuty do výše uvedených částí nebo mohou tvořit samostatnou část. Jsou to například: optimalizátor kódu, který zajišťuje, aby se používalo co nejméně pomocných proměnných pro mezivýpočty, aby se v cyklu zbytečně několikrát nevyhodnocoval tentýž výraz, jestliže hodnota jeho prvků zůstává bez změny a vyhodnocení stačí provést jednou před cyklem, apod. hlášení o chybách informace o překladu. 4. Jednoprůchodový a víceprůchodový překladač Mezi každými dvěma kroky, průchody, vznikne program určený pouze pro vnitřní potřebu, nazýváme ho interní forma programu, mezikód nebo interní kód, a jazyk, ve kterém je sestaven, interní jazyk překladače. Celý mezikód je třeba uchovávat v paměti pro zpracování v dalším průchodu. Průchody překladače se ne vždy kryjí s fázemi překladu. Do jednoho průchodu můžeme vtěsnat několik fází nebo jedna fáze bývá rozčleněna do více průchodů (např. optimalizace). U některých jazyků je vhodné sloučit všechny fáze do jednoho průchodu, takový překladač nazýváme jednoprůchodový. Má jednu velkou výhodu: nevytváří mezikód, který by bylo nutné uchovávat. Jednoprůchodové překladače jsou vhodné pro jednoduché programovací jazyky, které nevyžadují důkladnou optimalizaci. Víceprůchodový překladač má tyto výhody: snadněji se vytváří a opravuje, lze také jednodušeji rozdělit práci mezi více programátorů při překladu může být v paměti pouze ta část překladače, která zpracovává příslušný průchod, ostatní zatím nejsou v paměti zapotřebí algoritmy pro optimalizaci jsou často velmi rozsáhlé a složité, pracují s delším úsekem kódu, proto mívají obvykle vlastní průchod nebo dokonce jsou rozčleněny do více průchodů. Nevýhodou mohou být časové ztráty při ukládání dílčích výsledků překladu do pomocné paměti a jejich následném načítání a také větší spotřeba paměti. 5. Zpracování chyb Pokud překladač přijde v kterékoliv fázi na chybu v zdrojovém programu, musí uživateli podat tyto informace: kde v programu se chyba nachází (např. číslo řádku a pozice na něm; pokud je připojen editor, tento řádek se obvykle vysvítí) typ chyby (např. proměnná tohoto názvu nebyla deklarována, chyba v syntaxi operátoru),

některé překladače dokážou navrhnout možnosti nápravy chyby. Překladač by se rozhodně neměl pokoušet chyby sám opravovat bez okamžitého informování uživatele. Překladač může reagovat dvěma způsoby: při prvním výskytu chyby se zastaví, provede diagnózu, informuje uživatele a čeká, až bude chyba opravena (např. Turbo Pascal) pokouší se najít co nejvíce chyb najednou, zastaví se až při určitém maximálním počtu a informuje uživatele o všech objevených chybách popř. o maximálním počtu chyb, které je schopen zobrazit (např. C++). Druhý způsob využívá postup zvaný zotavení po chybě. Umožňuje opravit více chyb najednou bez nutnosti pokaždé znovu spouštět překladač, může však nastat situace, kdy výskyt jedné chyby ovlivní výskyt řady dalších. Typickým příkladem je překlep při deklaraci proměnné nebo procedury potom všechna použití správného názvu jsou považována za chybná. 6. Virtuální stroj 6.1 Hardwarový virtuální stroj Označuje několik jednotlivých totožných pracovních prostředí na jediném počítači, z nichž na každém běží operační systém. Díky tomu může být aplikace psaná pro jeden OS používána na stroji, na kterém běží jiný OS, nebo zajišťuje vykonání sandboxu, který poskytuje větší úroveň izolace mezi procesy než je dosaženo při vykonávání několika procesů najednou (multitasking) na stejném OS. Další výhodou může být to, že start (bootování) a restart virtuálního počítače může být mnohem rychlejší, než u fyzického stroje, protože mohou být přeskočeny úkoly jako například inicializace hardwaru. Softwarové virtualizace mohou být prováděny ve třech hlavních úrovních: emulace, plná systémová simulace nebo plná virtualizace s dynamickým přestavením (recompilation), virtuální stroj simuluje kompletní hardware, dovolující provoz nemodifikovaného OS na úplně jiném procesoru. Paravirtualizace - virtuální stroj nesimuluje hardware, ale místo toho nabídne speciální rozhraní API, které vyžaduje modifikace OS. Nativní virtualizace a plná virtualizace - virtuální stroj jen částečně simuluje dost hardwaru, aby mohl nemodifikovaný OS běžet samostatně, ale hostitelský OS musí být určený pro stejný druh procesoru. Pojem nativní virtualizace se někdy používá ke zdůraznění, že je využita hardwarová podpora pro virtualizaci (tzv. virtualizační technologie). 6.2 Aplikační virtuální stroj Je počítačový software, který izoluje aplikace používané uživatelem na počítači. Protože verze virtuálního stroje jsou psány pro různé počítačové platformy, jakákoliv aplikace psaná pro virtuální stroj může být provozována na kterékoli z platforem, místo toho, aby se musely vytvářet oddělené verze aplikace pro každý počítač a operační systém. Aplikace běžící na počítači používá interpreta nebo Just in time kompilaci. 6.3 Virtuální prostředí Virtuální prostředí (jinak uváděné jako virtuální soukromý server) je jiný druh virtuálního stroje. Ve skutečnosti, to je virtualizované prostředí pro běh programů na úrovni uživatele (tj. ne jádra operačního systému a ovladače, ale aplikace). Virtuální prostředí jsou vytvořena použitím softwaru zavádějícího virtualizaci na úrovni operačního systému, jako například Virtuozzo, FreeBSD Jails, Linux-VServer, Solaris Containers, chroot jail a OpenVZ.