Kas yra kodų sudarytojas ir ką jis daro?

click fraud protection

A sudarytojas yra programa tai verčia skaityti žmonėms pirminis kodas į kompiuterio vykdomąjį kompiuterio kodą. Norint tai padaryti sėkmingai, žmonėms suprantamas kodas turi atitikti sintaksė bet kurios programavimo kalbos, kuria ji parašyta, taisyklės. Kompiliatorius yra tik programa ir negali nustatyti jūsų kodo už jus. Jei padarėte klaidą, turite ištaisyti sintaksę, kitaip ji nebus sukompiliuota.

Kas nutinka sudarant kodą?

Kompiliatoriaus sudėtingumas priklauso nuo kalbos sintaksės ir abstrakcijos ta programavimo kalba teikia. C kompiliatorius yra daug paprastesnis nei C ++ ar C # kompiliatorius.

Leksinė analizė

Sudarydamas kompiliatorius pirmiausia nuskaito simbolių srautą iš šaltinio kodo failo ir sugeneruoja leksinių žetonų srautą. Pvz., C ++ kodas:

int C = (A * B) +10;

gali būti analizuojami kaip šie žetonai:

  • įveskite „int“
  • kintamasis "C"
  • lygus
  • kairysis skliaustas
  • kintamasis "A"
  • laikai
  • kintamasis "B"
  • dešinysis skliaustas
  • plius
  • pažodžiui „10“

Sintaksinė analizė

Leksinė išvestis patenka į kompiliatoriaus sintaksinio analizatoriaus dalį, kuri naudoja gramatikos taisykles nuspręsdama, ar įvestis tinkama, ar ne. Nebent

instagram viewer
kintamieji A ir B anksčiau buvo deklaruojami ir buvo taikymo srities, sudarytojas gali pasakyti:

  • „A“: nedeklaruojamas identifikatorius.

Jei jie buvo paskelbti, bet nebuvo inicijuoti. sudarytojas pateikia įspėjimą:

  • vietinis kintamasis 'A' naudojamas neinicialus.

Niekada neturėtumėte ignoruoti kompiliatoriaus įspėjimų. Jie gali sugadinti jūsų kodą keistais ir netikėtais būdais. Visada taisykite kompiliatoriaus įspėjimus.

Vienas leidimas ar du?

Kai kurios programavimo kalbos yra parašytos, todėl kompiliatorius gali tik vieną kartą perskaityti šaltinio kodą ir sugeneruoti mašinos kodą. Paskalis yra viena iš tokių kalbų. Daug sudarytojai reikalauti bent dviejų praėjimų. Kartais taip yra dėl išankstinių deklaracijų funkcijos ar klases.

C ++ klasėje klasė gali būti paskelbta, bet neapibrėžta vėliau. Kompiliatorius nesugeba išsiaiškinti, kiek atminties reikia klasei, kol jis nesukaupia klasės turinio. Prieš sukurdamas teisingą mašinos kodą, jis turi perskaityti šaltinio kodą.

Generuojamas mašinos kodas

Darant prielaidą, kad kompiliatorius sėkmingai užbaigia leksinę ir sintaksinę analizę, paskutiniame etape sukuriamas mašinos kodas. Tai sudėtingas procesas, ypač naudojant šiuolaikinius procesorius.

Sudaryto greičio vykdomasis kodas turėtų būti kuo greitesnis ir gali labai skirtis priklausomai nuo sukurto kodo kokybės ir to, kiek buvo pareikalauta optimizavimo.

Daugelis kompiliatorių leidžia nurodyti optimizavimo kiekį, paprastai žinomą dėl greito derinimo derinimo kompiliacijų ir visiško išleisto kodo optimizavimo.

Kodo generavimas yra sudėtingas

Rašant kodų generatorių, kompiliatorius susiduria su iššūkiais. Daugelis procesorių paspartina apdorojimą naudodami

  • Instrukcija vamzdynų klojimas
  • Vidinis talpyklos.

Jei visos instrukcijos per kodą kilpa galima laikyti Centrinis procesorius talpyklą, tada ši kilpa veikia daug greičiau nei tada, kai centrinis procesorius turi gauti instrukcijas iš pagrindinės RAM. CPU talpykla yra atminties blokas, įmontuotas į procesoriaus lustą, prie kurio prieinama daug greičiau nei pagrindinės RAM duomenų bazėje.

Talpyklos ir eilės

Daugelyje procesorių yra išankstinio iškėlimo eilė, kurioje prieš vykdant procesorius nuskaito instrukcijas talpykloje. Jei įvyksta sąlyginė atšaka, centrinis procesorius turi iš naujo įkelti eilę. Kodas turėtų būti sugeneruotas, kad to būtų kuo mažiau.

Daugelyje procesorių yra atskiros dalys:

  • Sveikasis skaičius aritmetinis (sveikieji skaičiai)
  • Slankiojo kablelio aritmetinis (trupmeniniai skaičiai)

Šios operacijos dažnai gali būti vykdomos lygiagrečiai, norint padidinti greitį.

Kompiliatoriai paprastai sugeneruoja kompiuterio kodą į objektų failus, kurie yra tada susieta kartu su „linker“ programa.

instagram story viewer