1.1. definicija i vrste programskih prevodilaca
TRANSCRIPT
UNIVERZITET U NOVOM SADU TEHNIČKI FAKULTET „MIHAJLO PUPIN“ ZRENJANIN NASTAVNI PREDMET: Programski prevodioci PREDMETNI NASTAVNIK: Doc. dr Ljubica Kazi ŠK. 2020/21 1. ČAS – 12.2.2021. - PREDAVANJA TEMA: Programski prevodilac – definicija, zadaci, tipovi, princip rada, struktura
1.1. Definicija i vrste programskih prevodilaca
Definicija programskog prevodioca
Program koji prevodi programski tekst sa jednog programskog jezika na drugi programski
jezik.
Vrste programskih prevodilaca u odnosu na način prevođenja: • Kompajler – prevodi ceo program (prevoĎenje sa višeg programskog jezika na
mašinski jezik). • Interpreter – prevodi u toku izvršavanja jednu po jednu naredbu.
Komparacija načina rada kompajlera i interpretera:
Izvor (https://www.circuitstoday.com/compilers-vs-interpreters-an-overview-of-the-differences)
1.2. Zadaci i faze rada kompajlera
Ulaz i izlaz za kompajlere predstavlja: - Izvorni (source) program – tekst programa napisan na jeziku višeg nivoa
- Ciljni (target) program - naziva se objektni kod, a predstavlja izvršni program,
koji nastaje nakon prevoĎenja. Izvršni program je napisan kao mašinski kod u odnosu na ciljni računar na kom treba da se izvršava.
Osnovni zadaci kompajlera su:
- Transformacija iz izvornog programa napisanog na jeziku višeg nivoa u ciljni izrvšni program
- Detekcija grešaka izvornog programskog koda
Osnovne dve faze rada kompajlera su:
1. Analiza (“front-end” grupa aktivnosti) – ulaz je izvorni kod napisan na višem programskom jeziku, a rezultat rada je meĎukod.
2. Sinteza (“back-end” grupa aktivnosti) – ulaz je meĎukod, a izlaz je mašinski kod.
(Izvor: https://www.tutorialspoint.com/compiler_design/compiler_design_architecture.htm)
Komponente arhitekture kompajlera
Osnovne komponente arhitekture kompajlera predstavljaju moduli, koji mogu biti realizovani i kao zasebni alati, ali su najčešće integrisani u okviru kompajlera. Svaki od
modula realizuje odreĎenu grupu aktivnosti.
Osnovne komponente kompajlera su odreĎene fazama i aktivnostima:
I FAZA – ANALIZA (“Front-end”)
1. LEKSIČKI ANALIZATOR - SKENER realizuje leksičku analizu izvornog programskog
koda. Prepoznaje lekseme (reči) u početnom tekstu i zamenjuje ih tokenima
(opštijim oblikom).
2. SINTAKSNI ANALIZATOR - PARSER realizuje sintaksnu analizu nad prethodno
tokenizovanim tekstom. 3. SEMANTIČKI ANALIZATOR
4. GENERATOR MEĐUKODA
II FAZA – SINTEZA (“Back end”) 1. MAŠINSKI NEZAVISAN OPTIMIZATOR MEĐUKODA 2. GENERATOR ASEMBLERSKOG KODA
3. MAŠINSKI ZAVISAN OPTIMIZATOR ASEMBLERSKOG KODA 4. GENERATOR MAŠINSKOG KODA
Transformisana slika na osnovu: PROGRAMSKI PREVODIOCI, Elektronski fakultet Niš, 2017.
1.3. Primeri procesa rada kompajlera različiih programskih jezika
Izvor: Dr Jean-Claude Franchitti: “Session 1 – Main Theme, Programming Languages overview and syntax”, New York University, Computer Science Department, Courant
Institute of Mathematical Sciences.
Fortran
Programski jezik C
Ranije verzije C++
Java
Mnogi sistemi kombinuju aspekte kompajlera i interpretera. Jedan primer je Java. Java kao programski jezik pripada grupi kompajliranih, ali se ne kompajlira za neki konkretan
realan CPU, već za Java Virtualnu Mašinu (JVM). S obzirom da za JVM ne postoji realan
CPU, on se emulira.
Većina programskih jezika
Dakle, kod većine programskih jezika, proces transformisanja izvornog koda u
objektni kod uz primenu kompajlera, asemblera i linkera je sledeći: 1. Izvorni kod (napisan na višem programskom kodu) predstavlja ulaz u program
Kompajler, a izlaz je asemblerski kod. 2. PrevoĎenje asemblerskog koda u mašinski kod radi generator mašinskog koda, tj.
progam Asembler. 3. Najčešće je taj mašinski (objektni kod) nepotpun i spaja se sa objektnim kodom iz
dodatnih biblioteka programskog koda. To spajanje radi program Linker. 4. Nakon spajanja objektnog koda osnovne aplikacije i objektnog koda biblioteka dobija
se konačan oblik objektnog koda (izvršnog koda u mašinskom obliku). ORJENTACIONA PITANJA ZA ZAVRŠNI ISPITNI TEST
1. Definicija programskog prevodioca. 2. Vrste programskih prevodilaca u odnosu na način prevođenja. 3. Razlika između kompajlera I interpretera. 4. Objasniti ulaz I izlaz iz kompajlera. 5. Objasniti pojam objektnog koda. 6. Osnovni zadaci kompajlera. 7. Objasniti osnovne faze rada kompajlera. 8. Objasniti komponente kompajlera u odnosu na osnovne faze I aktivnosti rada kompajlera. 9. Objasniti povezanost rada skenera I parsera. 10. Koja je razlika između skenera I parsera. 11. Objasniti module kompajlera koji realizuju aktivnosti u fazi analize. 12. Objasniti module kompajlera koji realizuju aktivnosti u fazi sinteze. 13. Objasniti process rada kompajlera za vedinu programskih jezika i ulogu asemblera i linkera.