Opredelitev in namen prevajalnika

Globalni podatki, konceptualna umetnina

ANDRZEJ WOJCICKI / Getty Images





A prevajalnik je program ki prevaja človeku berljivo izvorna koda v računalniško izvršljivo strojno kodo. Če želite to narediti uspešno, mora človeku berljiva koda ustrezati sintaksa pravila katerega koli programskega jezika je napisan. Prevajalnik je le program in ne more namesto vas popraviti vaše kode. Če naredite napako, morate popraviti sintakso, sicer se ne bo prevedel.

Kaj se zgodi, ko prevedete kodo?

Kompleksnost prevajalnika je odvisna od sintakse jezika in količine abstrakcije ta 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++:

|_+_||_+_|

lahko analiziramo kot te žetone:



  • vnesite 'int'
  • spremenljivka 'C'
  • enako
  • levi oklepaj
  • spremenljivka 'A'
  • krat
  • spremenljivka 'B'
  • desni oklepaj
  • plus
  • dobesedno '10'

Sintaktična analiza

Leksikalni izhod gre v del skladenjskega analizatorja prevajalnika, ki na podlagi slovničnih pravil odloči, ali je vnos veljaven ali ne. Razen spremenljivke A in B sta bila predhodno deklarirana in sta bila v obsegu, prevajalnik bi lahko rekel:

  • 'A' : nenaveden identifikator.

Če so bili prijavljeni, vendar ne inicializirani. prevajalnik izda opozorilo:

  • lokalna spremenljivka 'A', uporabljena brez inicializacije.

Nikoli ne smete prezreti opozoril prevajalnika. Vašo kodo lahko zlomijo na čudne in nepričakovane načine. Vedno popravi opozorila prevajalnika.

En prehod ali dva?

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



V C++ je razred mogoče deklarirati, vendar ga definirati šele pozneje. Prevajalnik ne more ugotoviti, koliko pomnilnika potrebuje razred, dokler ne prevede telesa razreda. Pred generiranjem pravilne strojne kode mora ponovno prebrati izvorno kodo.

Ustvarjanje strojne kode

Ob predpostavki, da prevajalnik uspešno opravi leksikalno in skladenjsko analizo, je zadnja faza generiranje strojne kode. To je zapleten postopek, zlasti pri sodobnih procesorjih.



Hitrost prevedenega izvedljiv koda mora biti čim hitrejša in se lahko zelo razlikuje glede na kakovost ustvarjene kode in količino zahtevane optimizacije.

Večina prevajalnikov vam omogoča, da določite količino optimizacije, ki je običajno znana po hitrih prevajalnikih za odpravljanje napak in popolni optimizaciji za izdano kodo.



Generiranje kode je zahtevno

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

Če so vsa navodila znotraj kode zanka lahko poteka v procesor predpomnilnika, potem ta zanka teče veliko hitreje kot takrat, ko mora CPE pridobiti navodila iz glavnega RAM-a. Predpomnilnik procesorja je blok pomnilnika, vgrajen v čip procesorja, do katerega dostopate veliko hitreje kot do podatkov v glavnem RAM-u.



Predpomnilniki in čakalne vrste

Večina CPE-jev ima čakalno vrsto za predhodno pridobivanje, kjer CPE prebere navodila v predpomnilnik, preden jih izvede. Če pride do pogojne veje, mora CPE ponovno naložiti čakalno vrsto. Kodo je treba ustvariti, da se to zmanjša.

Številni procesorji imajo ločene dele za:

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

Te operacije se lahko pogosto izvajajo vzporedno, da se poveča hitrost.

Prevajalniki običajno ustvarijo strojno kodo v objektne datoteke, ki se nato povezan skupaj s povezovalnim programom.