Překladače Vnitřní struktura překladače © Milan Keršláger 27.9.2016

Slides:



Advertisements
Podobné prezentace
Bakalářská práce Prostředí pro výuku algoritmů
Advertisements

™. ™ Zprovoznění zařízení a zahájení jejich řízení během několika minut.
VÝVOJ PROGRAMOVACÍCH JAZYKŮ PERSPEKTIVY ELEKTRONIKY 3. Celostátní seminář, 18. března 2003 Ing. Pavel Pokorný UNIVERZITA TOMÁŠE BATI VE ZLÍNĚ Fakulta technologická.
Přednáška č. 3 Normalizace dat, Datová a funkční analýza
HYPERTEXT PREPROCESSOR. PROGRAMOVÁNÍ. DEFINICE POJMŮ Problém Problém nevyřešený, nežádoucí stav obvykle vyžaduje nějaké řešení Neřešitelný problém Neřešitelný.
A4B33OSS (J. Lažanský) verze: Podzim 2013 Od programu k procesu 1 Obsah Téma 8 – Od programu k procesu 1.Interpretace a kompilace 2.Od zdrojového textu.
SOFTWARE dálkové studium PODNIKÁNÍ 2. listopad 2006.
Operační systém Adam Greguš, 4.A.
Principy překladačů Překladač Jakub Yaghob. Literatura a slajdy Aho, Sethi, Ullman: Compilers - Principles, Techniques and Tools, Addison-Wesley 1986.
Generování mezikódu Jakub Yaghob
Lexikální a syntaktická analýza Jakub Yaghob
PHP PHP – základy syntaxe (část 1) - 03 Mgr. Josef Nožička IKT PHP
Hana Kotinová Struktura a cíl práce Metody předzpracování dat Systémy předzpracování dat Historie vývoje DPT Jak program pracuje Budoucnost.
Algoritmizace a programování Podmíněné a cyklické příkazy- 08
Lestes C++ compiler. Obsah 1. Úvod 2. Architektura 3. Implementace 4. Framework 5. Závěr.
25. ALGORITMIZACE A PROGRAMOVÁNÍ
Vyučovací hodina 1 vyučovací hodina: Opakování z minulé hodiny 5 min Nová látka 20 min Procvičení nové látky 15 min Shrnutí 5 min 2 vyučovací hodiny: Opakování.
Maturitní okruh č. 7. Odstínit aplikace od specifik HWSpráva procesůSpráva pamětiSpráva souborůSpráva vstupů a výstupůSpráva sítěSystém ochrany a bezpečnostiSystém.
Základy algoritmizace a programování
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Sémantická analýza Jakub Yaghob
Gramatiky a jazyky Přednáška z předmětu Řízení v komplexních systémech
C# - Úvod Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Simulační modely a programové vybavení. Vývoj simulačních programů  Původně pouze strojový kód –Příliš dlouhé, náročné na programátora, obtížné hledání.
3. Příkazy  Příkazy dělíme na jednoduché a strukturované.  Jednoduché příkazy - žádnou jejich dílčí částí neni příkaz - přiřazovací, vstupu a výstupu,
Gymnázium, SOŠ a VOŠ Ledeč nad Sázavou I NFORMAČNÍ A KOMUNIKAČNÍ TECHNOLOGIE Ing. Jan Roubíček.
Od zadání úlohy k programu Výpočetní systémy I 8. přednáška.
Dokumentace informačního systému
Úvod do JavaScriptu JavaScript je p JavaScript je programovací jazyk, který se používá na webových stránkách. JavaScript je typu KLIENT - KLIENT To znamená,
Algoritmizace a programování Vývojové diagramy - 03
S O F T W A R E Šablona 32 VY_32_INOVACE_6_5_Operační systémy.
Gymnázium, Obchodní akademie a Jazyková škola s právem státní jazykové zkoušky Hodonín Operační systémy.
Algoritmizace a programování Úvod do Delphi - 04 Mgr. Josef Nožička IKT Algoritmizace a programování
Databázové modelování
doc. RNDr. Zdeněk Botek, CSc.
Metodika objektového přístupu při tvorbě překladačů. Marek Běhálek Informatika a aplikovaná matematika FEI VŠB-TU Ostrava.
PHP PHP - úvod - 02 Mgr. Josef Nožička IKT PHP
1 Programování a p. jazyky Postup při tvorbě programu (systému) –strategie –analýza ( konceptuální modely) Datová Procesní –návrh (i/o, výjimky, algoritmus)
OPERAČNÍ SYSTÉMY ICT – Mgr. Milan Šimek. Nejznámější operační systémy DOS – textové rozhraní OS/2 – podobný Windows, ovládán hlasem UNIX – stabilní, otevřený,
Rozhodování ve veřejné správě Přednáška M. Horáková.
14. června 2004Michal Ševčenko Architektura softwarového systému DYNAST Michal Ševčenko VIC ČVUT.
doc. RNDr. Zdeněk Botek, CSc.
Visual Basic - programování
XSLT překladač Marek Běhálek Informatika a aplikovaná matematika FEI VŠB-TU Ostrava.
OPERAČNÍ SYSTÉM.
Úvod do programování Vyučující: Mgr. Vítězslav Jersák
Technika počítačů 3. Mikroprocesory © Milan Keršlágerhttp:// Obsah: ●
KURZ ALGORITMIZACE A PROGRAMOVÁNÍ V JAZYCE C Lekce č. 4: Programovací jazyk C Bc. Radek Libovický.
Algoritmizace a programování Algoritmy 1 - Úvod. Základní pojmy Počítačový program Počítačový program zápis zdrojového kódu, kterému rozumí počítač zápis.
Překladače 1. Překladače a programovací jazyky © Milan Keršlágerhttp:// Obsah:
Překladače 2. Vnitřní struktura překladače © Milan Keršlágerhttp:// Obsah: ● činnost.
Odborný výcvik ve 3. tisíciletí Tato prezentace byla vytvořena v rámci projektu.
Tým 32, varianta b/4/I.  Jakub Kadlubiec  Roman Pijáček  Petr Pliska  Jan Štourač  Václav Tunka (vedoucí)
KURZ ALGORITMIZACE A PROGRAMOVÁNÍ V JAZYCE C Lekce č. 2: Základní pojmy Bc. Radek Libovický.
Překladače 6. Sémantická analýza
SOFTWAROVÁ PODPORA PRO VYTVÁŘENÍ FUZZY MODELŮ Knihovna fuzzy procedur Ing. Petr Želasko, VŠB-TU Ostrava.
Vypracoval / Roman Málek
Programování mikropočítačů Platforma Arduino
Výukový materiál zpracován v rámci projektu
Algoritmizace – základní pojmy
Operační systémy - úvod
Překladače Syntaktická analýza
Výukový materiál zpracován v rámci projektu
Překladače 2. Vnitřní struktura překladače
Operační systémy Vnitřní struktura překladače
Operační systémy 9. Spolupráce mezi procesy
Tradiční metodiky vývoje softwaru
OPERAČNÍ SYSTÉMY ICT – Mgr. Milan Šimek.
Tradiční metody vývoje softwaru
Překladače 6. Sémantická analýza
Transkript prezentace:

Překladače Vnitřní struktura překladače © Milan Keršláger

Jak naprogramovat překladač ● z počátku „opravdoví programátoři“ ● relativně málo rozsáhlé a méně komplexní kódy ● programování v JSA vyžadovalo zkušenosti ● 1969 – strukturované programování (Dijkstra) ● snaha o zvládnutí velkých projektů ● zpřístupnění programování „laikům“ ● dělení problému na menší části → dělení práce ● rozdělení překladače na logické celky ● zjednodušení kódu, rozdělení problému, záměna

Činnost překladače ● transformace vstupu na výstup ● vstupní programovací jazyk – např. jazyk C, Pascal, Java,... ● výstupní kód – strojový kód ve formě spustitelného souboru ● při své činnosti ● informuje o průběhu překladu ● generuje chybová hlášení

Konverzační překladače ● tzv. interaktivní ● umožňují programátorovi přímo ● upozorňovat na chyby ● ladit program (inspekce proměnných) ● typické pro současná IDE rozhraní ● propojení překladače s editorem ● při nalezení chyby na ni umístí kurzor ● problémy s komplikovanými strukturami ● dopředné definice, rekurzivní zpracování funkcí,...

Části překladače ● přední část ● provádí analýzu (rozpitvání vstupu) ● nezávislá na cílovém systému ● závislá na použitém programovacím jazyce ● zadní část ● provádí syntézu (vytvoření výstupu) ● závislá na cílovém systému – typ CPU (x86, ARM, MIPS) – typ OS (Windows, Linux, Symbian)

Fáze překladu ● lexikální analýza ● zdrojový kód → posloupnost symbolů ● syntaktická analýza ● symboly → příkazy, proměnné, funkce apod. ● sémantická analýza ● přiřazení významu ● optimalizace kódu ● zvýšení efektivity kódu ● generování cílového kódu Zadní část Přední část

Průchody překladače ● jednoprůchodové překladače ● každá fáze překladu se provede jen jednou ● jednoduché programovací jazyky ● víceprůchodové překladače ● opakování určité fáze překladu ● vzniká mezikód (interní kód) – používá interní jazyk překladače ● typicky optimalizace ● jednodušší implementace určité fáze překladu ● nižší systémové nároky (aktivní jen část překladače)

Zpracování chyb ● při nalezení chyby by měl překladač: ● určit místo vzniku chyby – soubor, řádek, sloupec (→ konverzační překladač) ● sdělit typ chyby – chybějící deklarace, chybná syntaxe,... ● mohou i navrhnout opravu ● syntaxe a sémantika ztrácí vazbu na pův. kód ● nutné interně přenášet informaci o místě v kódu ● tím spíše u víceprůchodových překladačů

Reakce na chyby ● zastavení na prvním chybě ● typicky konverzační překladače ● pokus o zotavení ● překladač se snaží pokračovat – vynechání symbolu – načítání, dokud nenaváže na předchozí správný průběh – pokus o opravu chyby (např. doplnění symbolu) ● uživatel vidí více chyb ● problém zavlečených chyb

Chyby z hlediska uživatele ● chyby struktury programu ● při překladu (lexikální, syntaktické) – zajímavé pro studium překladačů ● běhové chyby ● zjistitelné až za běhu programu – dělení nulou (překladač může vydat varování) ● logické chyby ● formální správnost programu, ale chybné výsledky ● prakticky nelze překladačem odhalit

Křížová kompilace ● vytváření cílového kódu pro jinou platformu ● výměna zadní části překladače ● po překladu nelze přímo spustit ● transport na cílovou platformu ● užití emulátorů, virtuálních strojů a pod. ● praktické důvody ● pro mobily, PDA, vestavěná zařízení, herní konzole ● výrobce vydává tzv. SDK ● někdy není potřeba (např. Java)

Portování programu ● změna cílové platformy ● různé zvyklosti, jiný hardware ● psaní přenositelných programů ● již při návrhu, výběru jazyka i programování ● pravidla jsou známá, ale programátoři jsou... ● některé platformy portování usnadňují ● unixové systémy (Linux: PC, ARM, MIPS,...) ● Windows hřeší na majoritu PC systémů ● dnes konkurenční nevýhoda (→ ARM netbooky)

Editory pro překladače ● unixové systémy: vim, Emacs ● „programátoři sobě“ ● vznik integrovaných prostředí (IDE) ● již v textovém prostředí (Turbo Pascal) ● komplexní vývojové systémy pro GUI – návrhář formulářů, speciální editor propojený s konverzačním překladačem, propojení s debuggerem ● vytváření struktogramů ● rozlišení začátečník a pokročilý, děti

Zvýrazňování syntaxe ● vizuální zvýraznění zdrojového kódu ● usnadňuje orientaci programátora ● využití překladače ● poměrně komplikované ● typicky konverzační překladače ● využití regulárních výrazů ● jednodušší, ale velmi efektivní ● není potřeba překladač ● editor typicky podporu pro více jazyků

Generátory překladačů ● lex, flex ● lexikální analyzátor ● yacc, bison ● syntaktický analyzátor ● self-hosting compiler ● Co bylo dřív? Vejce nebo slepice? ● bootstraping ● v čem je napsán, co zpracovává, co je výstup