Kompiliatorius – programinė įranga, kuri sugeba tam tikra programavimo kalba parašytą programą transliuoti į ekvivalenčią programą kita kalba. Dažniausiai kompiliatorius transliuoja aukšto lygio programavimo kalba parašytą kodą į mašininį ar objektinį kodą, kurį gali vykdyti tam tikras kompiuteris arba virtuali mašina. Tačiau galimas ir atvirkščias variantas – kai iš žemo lygio mašininio kodo transliuojama į aukšto lygio programavimo kalbą, tokiu atveju kompiliatorius dažniausiai vadinamas dekompiliatoriumi.
Pirmieji eksperimentiniai kompiliatoriai pagaminti XX a. šeštajame dešimtmetyje, bet pirmu pilnu kompiliatoriumi laikomas FORTRAN kalbos kompiliatorius, pristatytas 1957 metais.
Kompiliavimo etapai
Kompiliavimas yra sudėtingas procesas, todėl dažnai yra skaidomas į keletą smulkesnių. Kompiliavimo etapai gali būti tiek išreikšti (paleidžiama atskira programa vieno etapo veiksmams atlikti), tiek neišreikšti (keli ar net visi etapai yra įvykdomi vienoje programoje). Kai kurie etapai gali būti vykdomi lygiagrečiai.
Skiriami tokie etapai:
- Parengiamosios doroklės
- programų išeities tekstas yra papildomas informacija iš bibliotekų, išskleidžiamos makrokomandos, pašalinamos kodo dalys, kurios nereikalingos konkrečiam kompiliavimo atvejui;
- Leksinio analizatoriaus
- išeities tekstas yra suskaidomas į smulkiausius programavimo kalbos elementus (identifikatorius, operatorius, kitus sintaksės elementus);
- Sintaksės analizatoriaus
- nagrinėjama, ar pateiktas tekstas atitinka programavimo kalbos sintaksės taisykles (t. y. ar atinka skliaustų skaičius, ar rezervuoti žodžiai nenaudojami kaip identifikatoriai, pan.);
- Semantikos analizatoriaus
- nagrinėjama, ar pateiktas tekstas atitinka programavimo kalbos semantikos taisykles (t. y. ar struktūra turi tokį elementą, į kokį kreipiamasi, ar priskiriama tinkamo tipo reikšmė ir pan.);
- Kodo generavimo
- generuojamas paskirties kalbos kodas;
- Kodo optimizavimo
- bandoma pagerinti paskirties kodo kokybę – padaryti jį greičiau vykdomu, užimančiu mažiau vietos ar pan. (transiliavimo metu suskaičiuojamos konstantinės išraiškos, vienodos išraiškos skaičiuojamos tik kartą, parenkamos efektyvesnės procesoriaus komandos ir t. t.);
- Ryšių redagavimo
- prijungiamos išorinės bibliotekos (vykdomas tik jei kompiliuojama į mašininį kodą).
Taip pat skaitykite
Nuorodos