Kääntäjän vaiheet esimerkin kanssa: käännösprosessi ja vaiheet
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:
- Leksinen analyysi
- Syntaksianalyysi
- Semanttinen analyysi
- Keskitason koodigeneraattori
- Koodin optimoija
- Koodigeneraattori

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
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: Keskitason koodin luominen
Kun semanttisen analyysin vaihe on ohi, kääntäjä luo välikoodin kohdekoneelle. Se edustaa ohjelmaa jollekin abstraktille koneelle.
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 välikoodin luomisessa:
- 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: Koodin 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: Koodin luominen
Koodin luominen on kääntäjän viimeinen ja viimeinen vaihe. Se saa syötteitä koodin optimointivaiheista ja tuottaa sivukoodin tai objektikoodin tuloksena. Tämän vaiheen tavoitteena on allokoida tallennustilaa ja generoida uudelleensijoitettavaa 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 Optimizer: Kun lausunto ei ole tavoitettavissa
- Koodi 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.
Yhteenveto
- Kääntäjä toimii eri vaiheissa jokainen vaihe muuttaa lähdeohjelman esityksestä toiseen
- Kuusi vaihetta kääntäjän suunnittelu ovat 1) Leksinen analyysi 2) Syntaksianalyysi 3) Semanttinen analyysi 4) Välikoodigeneraattori 5) Koodin optimoija 6) Koodi Generator
- Leksinen analyysi on ensimmäinen vaihe, kun kääntäjä skannaa lähdekoodin
- Syntaksianalyysissä on kyse tekstin rakenteen löytämisestä
- Semanttinen analyysi tarkistaa koodin semanttisen johdonmukaisuuden
- Kun semanttisen analyysin vaihe on ohi, luo välikoodi kohdekoneelle
- Koodin optimointivaihe poistaa tarpeettoman koodirivin ja järjestää lauseiden järjestyksen
- Koodin generointivaihe saa syötteitä koodin optimointivaiheesta ja tuottaa tuloksena sivukoodin tai objektikoodin
- Symbolitaulukko sisältää tietueen jokaiselle tunnisteelle ja kentät tunnisteen attribuuteille
- Virheenkäsittelyrutiini käsittelee virheitä ja raportteja useissa vaiheissa