Kaj je prevajalnik kode in kaj počne?

A prevajalnik je program kar prevaja človeško berljivo izvorno kodo v računalniško izvedljivo strojno kodo. Če želite to uspešno narediti, mora biti človeško berljiva koda skladna z skladnja pravila, v katerem programskem jeziku je napisan. Prevajalnik je samo program in ne more popraviti vaše kode za vas. Če se zmotite, morate popraviti sintakso, ki se ne bo sestavila.

Kaj se zgodi, ko sestavite kodo?

Kompleksnost prevajalnika je odvisna od skladnje jezika in oddaljenosti abstrakcije programski jezik prispeva. Prevajalnik C je veliko enostavnejši od prevajalnika za C ++ ali C #.

Leksikalna analiza

Pri prevajanju prevajalnik najprej prebere tok znakov iz datoteke izvorne kode in ustvari tok leksikalnih žetonov. Na primer, koda C ++:

int C = (A * B) +10;

lahko analiziramo kot naslednje žetone:

  • vrsta "int"
  • spremenljivka "C"
  • enako
  • levi nosilec
  • spremenljivka "A"
  • krat
  • spremenljivka "B"
  • desni nosilec
  • plus
  • dobesedno "10"

Sintaktična analiza

Leksikalni izhod gre v del sintaktičnega analizatorja prevajalnika, ki uporablja pravila slovnice, da se odloči, ali je vnos veljaven ali ne. Razen

instagram viewer
spremenljivk A in B sta bila predhodno razglašena in sta bila v obsegu, prevajalnik bi lahko rekel:

  • 'A': neprijavljen identifikator.

Če bi bili razglašeni, vendar ne inicializirani. prevajalnik izda opozorilo:

  • lokalna spremenljivka 'A', uporabljena brez inicializacije.

Nikoli ne smete prezreti opozoril prevajalnika. Kodo lahko razbijejo na čudne in nepričakovane načine. Vedno popravite opozorila prevajalnika.

En prehod ali dva?

Nekateri programski jeziki so napisani, tako da lahko prevajalnik izvorno kodo prebere samo enkrat in ustvari strojno kodo. Pascal je en tak jezik. Mnogi prevajalnike zahtevajo vsaj dva prehoda. Včasih je to zaradi vnaprejšnjih izjav funkcije ali razredov.

V C ++ lahko razred razglasimo, vendar ga ne določimo do pozneje. Prevajalnik ne more določiti, koliko pomnilnika potrebuje razred, dokler ne sestavi telesa razreda. Pred generiranjem pravilne strojne kode mora prebrati izvorno kodo.

Generiranje strojne kode

Ob predpostavki, da prevajalnik uspešno zaključi leksikalne in skladenjske analize, je zadnja faza generiranje strojne kode. To je zapleten postopek, zlasti pri sodobnih procesorjih.

Hitrost sestavljenega izvedljiv koda mora biti čim hitrejša in se lahko zelo razlikuje glede na kakovost ustvarjene kode in koliko optimizacije je bilo zahtevanih.

Večina prevajalnikov vam omogoča, da določite količino optimizacije - običajno znano po hitrem odpravljanju napak in popolni optimizaciji za sproščeno kodo.

Generacija kode je izziv

Pisalnik prevajalnika se sooča z izzivi pri pisanju generatorja kode. Mnogi procesorji pospešijo obdelavo z uporabo

  • Navodila cevovoda
  • Notranje predpomnilniki.

Če so vsa navodila znotraj kode zanka se lahko hranijo v CPU predpomnilnika, potem ta zanka teče veliko hitreje kot takrat, ko mora CPU prejeti navodila iz glavnega RAM-a. Predpomnilnik CPU je blok pomnilnika, vgrajenega v čip CPU-ja, do katerega je mogoče dostopati veliko hitreje kot do podatkov v glavnem RAM-u.

Predpomnilniki in čakalne vrste

Večina procesorjev ima prednaročeno čakalno vrsto, kjer CPU prebere navodila v predpomnilnik, preden jih izvede. Če se zgodi pogojna veja, mora CPU ponovno naložiti čakalno vrsto. Kodo je treba ustvariti, da to zmanjšate na minimum.

Številni procesorji imajo ločene dele za:

  • Aritmetika celih števil (cela števila)
  • Aritmetika s plavajočo vejico (delna števila)

Te operacije se pogosto lahko vzporedno izvajajo za povečanje hitrosti.

Prevajalniki običajno ustvarijo strojno kodo v predmetne datoteke, ki so nato povezane skupaj s programom povezovalcev.