Kääntäjän vaiheet esimerkin, prosessin ja vaiheiden kanssa

⚡ Älykäs yhteenveto

Kääntäjän vaiheet kuvaavat, kuinka kääntäjä muuntaa lähdekoodin konekoodiksi kuuden vaiheen kautta: leksikaalinen analyysi, syntaksianalyysi, semanttinen analyysi, välivaiheen koodin generointi, koodin optimointi ja koodin generointi. Näitä tukevat symbolitaulukon hallinta ja virheenkäsittely koko vaiheen ajan.

  • 🔤 Leksikaalinen analyysi: Ensimmäinen vaihe skannaa lähdekoodin ja ryhmittelee merkit tokeneiksi, täyttäen symbolitaulukon.
  • 🌳 Syntaksianalyysi: Tokenit tarkistetaan kielioppisääntöjä vasten ja järjestetään jäsennyspuuksi.
  • Semanttinen analyysi: Kääntäjä tarkistaa tyyppien yhteensopivuuden ja merkityksen syntaksipuun ja symbolitaulukon avulla.
  • 🔁 väli- Code: Koneesta riippumaton esitys, kuten kolmiosoitekoodi, luodaan helppoa muuntamista varten.
  • optimointi: Ylimääräinen ja saavuttamaton koodi poistetaan ohjelman nopeammaksi ja pienemmäksi tekemiseksi.
  • 🖥️ Code Sukupolvi: Viimeinen vaihe muuntaa optimoidun koodin kohdekonekoodiksi varaamalla rekistereitä ja muistia.

Mitkä ovat kääntäjän suunnittelun vaiheet?

kääntäjä toimii eri vaiheissa jokainen vaihe muuttaa lähdeohjelman esityksestä toiseen. Jokainen vaihe ottaa syötteitä edellisestä vaiheestaan ​​ja syöttää ulostulonsa kääntäjän seuraavaan vaiheeseen.
Kääntäjässä on 6 vaihetta. Jokainen tämä vaihe auttaa muuntamaan korkean tason kielen konekoodiksi. Kääntäjän vaiheet ovat:

  1. Leksinen analyysi
  2. Syntaksianalyysi
  3. Semanttinen analyysi
  4. Keskitason koodigeneraattori
  5. Code Optimizer
  6. Code generaattori
Kääntäjän vaiheet
Kääntäjän vaiheet

Kaikki nämä vaiheet muuntavat lähdekoodin jakamalla tokeneihin, luomalla jäsennyspuita ja optimoimalla lähdekoodin eri vaiheilla.

Vaihe 1: Leksinen analyysi

Leksinen analyysi on ensimmäinen vaihe, kun kääntäjä skannaa lähdekoodin. Tämä prosessi voidaan siirtää vasemmalta oikealle, merkki merkiltä ja ryhmitellä nämä merkit tokeneiksi.
Tässä lähdeohjelman merkkivirta ryhmitellään merkityksellisiin sarjoihin tunnistamalla tunnukset. Se tekee vastaavien lippujen syöttämisen symbolitaulukkoon ja siirtää sen tunnuksen seuraavaan vaiheeseen.
Tämän vaiheen päätehtävät ovat:

  • Tunnista lähdekoodin leksikaaliset yksiköt
  • Luokittele leksikaaliset yksiköt luokkiin, kuten vakiot, varatut sanat, ja syötä ne eri taulukoihin. Se jättää huomioimatta lähdeohjelman kommentit
  • Tunnista tunnus, joka ei ole osa kieltä

esimerkki:
x = y + 10

tokens

X tunniste
= Tehtäväoperaattori
Y tunniste
+ Lisäysoperaattori
10 numero

Vaihe 2: Syntaksianalyysi

Syntaksianalyysissä on kyse koodin rakenteen löytämisestä. Se määrittää, noudattaako teksti odotettua muotoa. Tämän vaiheen päätavoitteena on varmistaa, että ohjelmoijan kirjoittama lähdekoodi on oikea vai ei.
Syntaksianalyysi perustuu tiettyyn ohjelmointikieleen perustuviin sääntöihin rakentamalla jäsennyspuu tokenien avulla. Se määrittää myös lähdekielen rakenteen ja kielen kieliopin tai syntaksin.
Tässä on luettelo tässä vaiheessa suoritetuista tehtävistä:

  • Hanki tunnukset leksikaalisesta analysaattorista
  • Tarkistaa, onko lauseke syntaktisesti oikein vai ei
  • Ilmoita kaikista syntaksivirheistä
  • Muodosta hierarkkinen rakenne, joka tunnetaan jäsennyspuuna

esimerkki

Mikä tahansa tunniste/numero on lauseke
Jos x on tunniste ja y+10 on lauseke, niin x= y+10 on lause.
Harkitse jäsennyspuuta seuraavaa esimerkkiä varten

(a+b)*c

Esimerkki syntaksianalyysistä

Jäsennyspuussa

  • Sisäinen solmu: tallenna operaattorilla ja kaksi tiedostoa lapsille
  • Lehti: tietueet, joissa on 2/enemmän kenttää; yksi tunnukselle ja muita tunnuksen tietoja
  • Varmista, että ohjelman osat sopivat yhteen mielekkäästi
  • Kerää tyyppitiedot ja tarkistaa tyyppien yhteensopivuuden
  • Lähdekieli sallii tarkistusoperandit

Vaihe 3: Semanttinen analyysi

Semanttinen analyysi tarkistaa koodin semanttisen johdonmukaisuuden. Se käyttää edellisen vaiheen syntaksipuuta symbolitaulukon kanssa varmistaakseen, että annettu lähdekoodi on semanttisesti johdonmukainen. Se myös tarkistaa, välittääkö koodi asianmukaista merkitystä.
Semantic Analyzer tarkistaa tyyppierojen, yhteensopimattomien operandien, virheellisillä argumenteilla kutsutun funktion, ilmoittamattoman muuttujan jne.
Semanttisen analyysin vaiheen toiminnot ovat:

  • Auttaa tallentamaan kerätyt tyyppitiedot ja tallentamaan ne symbolitaulukkoon tai syntaksipuuhun
  • Voit suorittaa tyyppitarkistuksen
  • Tyyppiepäsopivuuden tapauksessa, jossa ei ole tarkkoja tyypin korjaussääntöjä, jotka täyttävät halutun toiminnon, näytetään semanttinen virhe
  • Kerää tyyppitietoja ja tarkistaa tyyppien yhteensopivuuden
  • Tarkistaa salliiko lähdekieli operandit vai ei

esimerkki

float x = 20.2;
float y = x*30;

Yllä olevassa koodissa semanttinen analysaattori kirjoittaa kokonaisluvun 30 kellumaan 30.0 ennen kertomista

Vaihe 4: Keskitaso Code Sukupolvi

Kun semanttinen analyysivaihe on ohi, kääntäjä luo kohdekoneelle välivaiheen koodin. Se edustaa ohjelmaa joillekin abs-tiedostoille.tract-kone.
Keskitason koodi on korkean tason ja konetason kielen välissä. Tämä välikoodi on generoitava siten, että se on helppo kääntää kohdekonekoodiksi.
Toiminnot keskitason tasolla Code sukupolvi:

  • Se tulisi luoda lähdeohjelman semanttisesta esityksestä
  • Säilyttää käännösprosessin aikana lasketut arvot
  • Auttaa sinua kääntämään välikoodin kohdekielelle
  • Voit säilyttää lähdekielen tärkeysjärjestyksen
  • Se sisältää oikean määrän käskyn operandeja

esimerkki

Esimerkiksi

total = count + rate * 5

Välikoodi osoitekoodimenetelmän avulla on:

t1 := int_to_float(5)
t2 := rate * t1
t3 := count + t2
total := t3

Vaihe 5: Code Optimointi

Seuraava vaihe on koodin optimointi tai välikoodi. Tämä vaihe poistaa tarpeettoman koodirivin ja järjestää lauseiden järjestyksen nopeuttamaan ohjelman suorittamista resursseja tuhlaamatta. Tämän vaiheen päätavoitteena on parantaa välikoodia, jotta saadaan aikaan koodi, joka toimii nopeammin ja vie vähemmän tilaa.
Tämän vaiheen päätehtävät ovat:

  • Se auttaa sinua löytämään kompromissin suorituksen ja käännösnopeuden välillä
  • Parantaa kohdeohjelman suoritusaikaa
  • Luo virtaviivaista koodia edelleen välimuodossa
  • Tavoittelemattoman koodin poistaminen ja käyttämättömien muuttujien poistaminen
  • Muutemattomien lauseiden poistaminen silmukasta

Esimerkiksi:
Harkitse seuraavaa koodia

a = intofloat(10)
b = c * a
d = e + b
f = d

Voi tulla

b =c * 10.0
f = e+b

Vaihe 6: Code Sukupolvi

Code Suorittaminen on kääntäjän viimeinen ja päätösvaihe. Se saa syötteitä koodin optimointivaiheista ja tuottaa tuloksena sivukoodin tai objektikoodin. Tämän vaiheen tavoitteena on varata tallennustilaa ja luoda siirrettävää konekoodia.
Se myös varaa muistipaikat muuttujalle. Välikoodin ohjeet muunnetaan konekäskyiksi. Tämä vaihe peittää optimointi- tai välikoodin kohdekielelle.
Kohdekieli on konekoodi. Siksi myös kaikki muistipaikat ja rekisterit valitaan ja allokoidaan tässä vaiheessa. Tämän vaiheen luoma koodi suoritetaan syötteiden vastaanottamiseksi ja odotettujen tulosteiden luomiseksi.

esimerkki

a = b + 60.0
Käännettäisiin mahdollisesti rekistereiksi.

MOVF a, R1
MULF #60.0, R2
ADDF R1, R2

Symbolitaulukon hallinta

Symbolitaulukko sisältää tietueen jokaiselle tunnisteelle ja kentät tunnisteen attribuuteille. Tämä komponentti helpottaa kääntäjän hakua tunnistetietueesta ja noutaa se nopeasti. Symbolitaulukko auttaa sinua myös laajuuden hallinnassa. Symbolitaulukko ja virhekäsittelijä ovat vuorovaikutuksessa kaikkien vaiheiden kanssa ja symbolitaulukko päivitetään vastaavasti.

Virheenkäsittelyrutiini

Kääntäjän suunnitteluprosessissa virhe voi tapahtua kaikissa alla mainituissa vaiheissa:

  • Leksinen analysaattori: Väärin kirjoitetut merkit
  • Syntaksianalysaattori: Sulkeet puuttuvat
  • Keskitason koodigeneraattori: Operaattorin operandit eivät täsmää
  • Code Optimoija: Kun lause ei ole saavutettavissa
  • Code Generator: Kun muisti on täynnä tai oikeita rekistereitä ei ole varattu
  • Symbolitaulukot: Virhe useissa ilmoitettuissa tunnisteissa

Yleisimmät virheet ovat virheelliset merkkisekvenssit tarkistuksessa, virheelliset merkkisekvenssit tyypissä, laajuusvirhe ja jäsennys semanttisessa analyysissä.
Virhe voi ilmetä missä tahansa yllä olevista vaiheista. Virheiden löytämisen jälkeen vaiheen on käsiteltävä virheet voidakseen jatkaa käännösprosessia. Nämä virheet on ilmoitettava virheenkäsittelijälle, joka käsittelee virheen käännösprosessin suorittamiseksi. Yleensä virheet ilmoitetaan viestin muodossa.

UKK

Analyysivaihe (käyttöliittymä) purkaa lähdekoodin osiin leksikaalisen, syntaksiaalisen ja semanttisen analyysin avulla. Synteesivaihe (taustaohjelma) rakentaa kohdeohjelman välivaiheen koodinluonnin, optimoinnin ja koodinluonnin avulla.

Kääntäjä kääntää koko lähdekoodin konekielelle ennen sen suorittamista. Tulkki kääntää ja suorittaa koodin rivi riviltä, ​​mikä on helpompi debugata, mutta yleensä hitaampaa suorituksen aikana.

Kolmiosoitekoodi on välimuotoinen esitystapa, jossa jokaisella käskyllä ​​on enintään kolme operandia, kuten t1 = a + b. Se on helppo optimoida ja helppo kääntää kohdekonekoodiksi.

Tekoäly ja koneoppiminen auttavat nykyaikaisia ​​kääntäjiä tekemään älykkäämpiä optimointipäätöksiä, kuten silmukkamuunnosten valintaa, inliningia ja rekisterien allokointia. Ne ennustavat, mitkä optimoinnit parantavat suorituskykyä tietyllä ohjelmalla ja kohteessa.

Kyllä. Tekoäly voi selittää jokaisen vaiheen esimerkeillä, tracmiten esimerkkilauseke siirtyy tokeneista konekoodiksi ja vastaa jatkokysymyksiin. Tämä helpottaa kääntäjän suunnittelua opiskelijoiden oppimisessa.

Tiivistä tämä viesti seuraavasti: