Prekladač, jeho funkcia a štruktúra, spôsob prace
Prekladač Program, ktorý transformuje (preloží) program V zdrojovom jazyku – zdrojový program Do cieľového jazyka – cieľový program Samotný prekladač, ako program, je napísaný v implementačnom jazyku Zdrojový jazyk je zvyčajne „vyšší“, cieľový zvyčajne „nižší“, vzhľadom na strojový jazyk Implementačný jazyk – jazyk, ktorý musí „poznať“ počítač, na ktorom sa realizuje preklad
Zobrazenie prekladača vzhľadom na jazyky ZJ CJ IJ
Zobrazenie prekladača vzhľadom na jazyky. Príklad. ZJ – Pascal CJ – strojový jazyk počítača PX IJ – jazyk C Predpoklad – „počítač“ PX „pozná“ jazyk C (má prekladač jazyka C)
Zobrazenie Prekladač jazyka Pascal Pascal Strojový kód PX C
Použitie hosťujúceho počítača Hosťujúci počítač zabezpečí preklad z C do strojového kódu počítača PX Toto umožní písať prekladač v C
Použitie hosťujúceho počítača Cont1 Prekladač jazyka C C Strojový kód PX Strojový kód PX
Použitie hosťujúceho počítača Cont2 Prekladač jazyka Pascal Pascal Stroj_kód PX C Prekladač Jazyka Pascal Pascal Stroj_kód PX Stroj_kód PX Prekladač Jazyka C C Stroj_kód PX Stroj_kód hosť_poč
Bootstrap V implementačnom jazyku sa napíše prekladač vybranej časti jazyka ZJ Kompletný preklač sa napíše v samotnom jazyku ZJ
Spôsob práce prekladača Vstup – reťazec znakov reprezentujúcich ZP Výstup cieľový program – kompilátor alebo realizácia zdrojového programu – interprét Spôsob práce kompilačný alebo interpretačný
Kompilátor Vstupné údaje Zdrojový program Kompilátor Cieľový program
Interprét Vstupné údaje Zdrojový program Interprét Výstupné údaje
História 1950 – pre FORTRAN Veľmi dobre rozpracovaná problematika Rozpracované metódy a techniky majú podstatne širšiu použiteľnosť než sú samotné prekladače V súčasnosti JIT (Just-In-Time) kompilácia „stiahnutých“ Java appletov Optimalizovaný kód – ak sa požaduje „vysoká rýchlosť“ a malý rozsah – videorecorder, mobil Kompilačné techniky sa používajú vo web browseroch, postscriptových interpretoch, automatických prekladoch, atď.
Preklad a Štruktúra prekladača Preklad nie je priamočiary proces – vyžaduje si celý rad viac alebo menej samostatných činností Prekladač musí najprv zistiť a „pochopiť“, čo je na vstupe – robí to časť prekladača - analyzátor Analyzátor – analyzuje ZP a zisťuje či je napísaný podľa pravidiel zdrojového jazyka Informácie získané pri analýze tvoria základ pre preklad ZP do CP – jeho syntézu, ktorú zabezpečuje zodpovedajúca časť prekladača Syntetizátor – zabezpečuje samotnú syntézu CP, prípadne aj jeho realizáciu
Grafická reprezentácia prekladača Tabuľka symbolov Syntaktická analýza Generovanie Cieľového programu ZP Lexikálna analýza Spracovanie sémantiky/ Sémantická reprezáentácia CP Ošetrenie chýb
Analýza a syntéza prekladu Analýza je rozdelená na 2 úrovne Lexikálnu vstupom je reťazec znakov Výstupom reťazec lexikálnych jednotiek Syntaktickú Vstupom je reťazec lexikálnych jednotiek Výstupom je reťazec syntaktických štruktúr
Komunikácia medzi časťami prekladača Okrem „štandardných mechanizmov“ je dôležitým prvkom Tabuľka symbolov, ktorá je vlastne spoločnou pamäťou, ktorú zdielajú a využívajú jednotlivé časti prekladača ako pre vlastnú potrebu, tak pre vzájomnú komunikáciu. Každá časť prekladača vykonáva predpísanú činnosť a v prípade výskytu chyby v ZP – hovoríme o „ošetrení“ chýb – oznámi sa chyba a pokračuje sa v práci s tým, že už sa vie, že sa vyskytla chyba, ktorá má svoje dôsledky
Opis zdrojového jazyka Zdrojový jazyk (ale nielen zdrojový) má presné pravidlá, ktoré sa musia pri písaní programu dodržiavať a hovoríme im syntaktické alebo gramatické pravidlá Na opis – špecifikáciu programovacích jazykov je rozpracovaný formálny matematický aparát, ktorý umožňuje nielen rýchlu a efektívnu kontrolu gramatickej správnosti programu, ale aj automatizáciu konštruovania jednotlivých častí prekladača. Vytvorené metódy a techniky opisu - špecifikácie jazykových konštrukcií a následnej automatickej konštrukcii jednotlivých častí prekladača presahujú oblasť prekladačov, a majú ďaleko všeobecnejšie použitie.
Literatúra Steven John Metsker : Building Parsers With Java™. © 2001 / 0-201-71962-2 / Addison Wesley Professional Charles Fischer, University of Wisconsin : Crafting a Compiler with C, Richard LeBlanc, Georgia Institute of Technology, © 1991 / 0-8053-2166-7 / Addison-Wesley
Literatúra Alfred V. Aho, Jeffrey D. Ullman, Compilers, © 1986 / 0-201-10088-6 / Addison-Wesley Dick Grune, Henri E. Bal, Ceriel J.H. Jacobs, and Koen G. Langendoen : Modern Compiler Design, John Wiley & Sons, Ltd., pp. 736 + xviii, 2000.
Literatúra Molnár L., Češka,M., Melichar,B.: Gramatiky a jazyky, Bratislava, ALFA, 1987. Molnár L.: Programovacie jazyky - implementácia. Bratislava, EF, 1983.
OK