Kompiliatorius –programinė įranga, kuri sugeba tam tikraprogramavimo 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 tikraskompiuteris arbavirtuali 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 vadinamasdekompiliatoriumi.
Pirmieji eksperimentiniai kompiliatoriai pagamintiXX a. šeštajame dešimtmetyje, bet pirmu pilnu kompiliatoriumi laikomasFORTRAN kalbos kompiliatorius, pristatytas1957 metais.
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ą).
Šis straipsnis apieprograminę įrangą yranebaigtas. Jūs galite prisidėti prie Vikipedijospapildydami šį straipsnį.