VÝUKOVÝ MATERIÁL Identifikační údaje školy
Číslo projektu Název projektu Číslo a název šablony Autor Tematická oblast Číslo a název materiálu Anotace Vytvořeno Určeno pro Přílohy
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 CZ.1.07/1.5.00/34.1076 Pro vzdělanější Šluknovsko 32 – Inovace a zkvalitnění výuky prostřednictvím ICT 0207 Mgr. Bc. Jan Škoda Programování VY_32_INOVACE_0207_0107 Překladač (kompilátor) Žák si upevní učivo o překladačích 14. 7. 2013 3. ročník oboru Informační technologie Bez příloh
Metodický list • Učitel: • Výklad s projekcí elektronického učebního materiálu. • Ukázka obecného postupu činností. • Monitorování činnosti žáků.
• Žák: • Sleduje výkladovou projekci a demonstraci učitele.
Překladač (kompilátor)
Překladač • V nejčastějším smyslu slova softwarový nástroj. • Používá se programátory pro vývoj softwaru. • Kompilátor slouží pro překlad algoritmů zapsaných ve vyšším programovacím jazyce do jazyka strojového, či spíše do strojového kódu.
Historie • Prvním programem, který by bylo možno označit jako kompilátor, byl A-0 System, který v roce 1952 vytvořila Grace Hopperová pro počítač UNIVAC I. • První kompletní překladač byl vyvinut v roce 1957 ve společnosti IBM a byl pro jazyk Fortran. • V roce 1960 měl jazyk COBOL první překladač pro více architektur, což zvýšilo jeho přenositelnost.
Historie • Tyto překladače byly vytvořeny v assembleru. • Jazyky, které umožňují napsat překladač, který přeloží sám sebe, se označují jako self-hosting („samonosné“) a prvním takovým se stal LISP, jehož překladač byl vytvořen v roce 1962 na MIT. • Ovšem použití jazyků vyšší úrovně pro psaní překladačů se stalo běžné až po roce 1970, kdy byly překladače C a Pascalu vytvořeny v těchto jazycích.
Vztah jazyk – program – překladač • Strojový kód tvořící počítačový program si u běžných číslicových počítačů založených na binární logice můžeme představit jako dlouhou posloupnost nul a jedniček. • V pionýrských dobách výpočetní techniky bylo třeba • nejprve vytvořit algoritmus, • poté jej přepsat do symbolicky zapsaného strojového kódu a • tento ručně přepsat do strojového kódu.
Vztah jazyk – program – překladač • Tato činnost je časově velmi náročná, přičemž v každé fázi tohoto procesu lze udělat mnoho chyb. • Prvním zjednodušením byl tedy už předtím zmíněn assembler který umožňoval převod symbolicky zapsaného strojového kódu do jeho číselného vyjádření. • Typickým příkladem kompilovaného jazyka je programovací jazyk C.
Assembler • Assembler nebývá řazen mezi kompilátory, přestože by mohl být za kompilátor považován. • Zdrojový kód assembleru se považuje pouze za čitelnější formu zápisu strojového kódu. • Adresy jsou proměnných a návěstí označeny symbolickými názvy.
Algoritmy • V počátcích výpočetní techniky zapisovány formou vývojových diagramů. • Vývojové diagramy jsou vhodné pro formální popis algoritmů, avšak jejich tvorba je zdlouhavá a jejich počítačové zpracování je obtížné. • Vyšší programovací jazyky umožňují efektivní a jednoznačně definovaný zápis algoritmů. • Klasický postup (algoritmus nejprve zapsán v programovacím jazyce poté přeložen kompilátorem do strojového kódu) se z velké části používá dodnes.
Algoritmy • Začaly se objevovat jazyky, které nejsou zaměřené na vytvoření maximálně efektivního kódu, ale na pohodlnější zápis algoritmů a zmenšení problémů při přenosu programů mezi různými architekturami počítačů. • Vznikly interpretované jazyky, které nejsou kompilovány. • Zdrojový kód není překládán přímo do strojového kódu, ale je přímo interpretován pomocí speciálního programu – interpretu (například Smalltalk).
Interpret • Počítačový program, který umožňuje přímo vykonávat (interpretovat) zápis jiného programu v jeho zdrojovém kódu ve zvoleném programovacím jazyce. • Program proto není nutné převádět do strojového kódu cílového procesoru, jako je tomu v případě překladače. • Interpret tak umožňuje programování kódu, který je snadno přenositelný mezi různými počítačovými platformami. • Interpret je použit též pro shell, který vytváří příkazový řádek.
Fáze překladu programu • Bylo by možné aby kompilátor překládal zdrojový kód přímo do spustitelného tvaru, obvyklý postup překladu bývá odlišný. • Zdrojový kód programu bývá obvykle rozdělen do více jednotek, u velkých programů se může jednat o tisíce souborů se zdrojovými texty. • Důvodů pro takovou fragmentaci zdrojového kódu programu je mnoho, např. • snadnější údržba zdrojových kódů, • možnost znovu-využívání jednotek, • nižší nároky na kompilátor atp.
Struktura překladače • Překladač lze navrhnout mnoha způsoby, nejčastěji bývá rozdělen na dvě části. • První je závislá na vstupním jazyce (tzv. front-end) a druhá závisí na cílové architektuře (tzv. back-end). • Mezi těmito částmi program existuje ve formě tzv. mezikódu (bytekódu). • Rovněž je výhodné, že pokud je potřeba vyrobit překladač pro další jazyk, stačí vytvořit pouze část pro překlad do mezikódu.
Části překladače • Z formálního hlediska je možné rozdělit překladač na následujících částí: • • • • •
lexikální analýza; syntaktická analýza; sémantická analýza; optimalizace kódu; generování cílového kódu.
Části překladače • Lexikální analyzátor je první jednotka překladače, která má za úkol relativně jednoduchým způsobem získat ze vstupního zdrojového textu tzv. lexémy a ty pak zasílá syntaktickému analyzátoru. • Syntaktický analyzátor se dá považovat za mozek překladače, protože provádí samotnou analýzu vstupního jazyka. • Sémantický analyzátor zpracovává syntaktický strom a provádí analýzu významu jednotlivých operací.
Části překladače • Překladač do mezikódu ze syntaktického stromu generuje kód, tzn. strukturovaný syntaktický strom se transformuje do lineární posloupnosti instrukcí. • Optimalizátor provádí optimalizace pomocí různých transformací mezikódu, jejichž cílem je zlepšení vlastností výsledného kódu (zrychlení běhu, zmenšení velikosti kódu a podobně). • Generátor kódu v poslední fázi generuje z mezikódu výstupní kód, program v cílovém jazyce. Cílovým jazykem nejčastěji bývá přímo strojový kód.
Zdroje • Interpret (software). In: Wikipedia: the free encyclopedia [online]. San Francisco (CA): Wikimedia Foundation, 2013 [cit. 2013-07-14]. Dostupné z: http://cs.wikipedia.org/wiki/Interpret_%28software% 29. • KLAS, Přemysl. Principy moderních překladačů, virtuální stroj. In: Flashi's school page [online]. 2010 [cit. 2013-07-14]. Dostupné z: http://flashi.wz.cz/materialy/szz/31-Principy%20modernich%20pre kladacu,%20virtuálni%20stroj.pdf. • Kompilátor. ABCLinuxu [online]. 2010 [cit. 2013-07-14]. Dostupné z: http://www.abclinuxu.cz/slovnik/kompilator. • Překladač. In: Wikipedia: the free encyclopedia [online]. San Francisco (CA): Wikimedia Foundation, 2013 [cit. 2013-07-14]. Dostupné z: http://cs.wikipedia.org/wiki/P%C5%99eklada%C4%8D. • Překladač. In: Referáty-seminárky.cz [online]. 2008 [cit. 2013-07-14]. Dostupné z: http://referaty-seminarky.cz/prekladac/ .