Mitkä ovat kääntäjän suunnittelun vaiheet?
Kääntäjä toimii eri vaiheissa, ja jokainen vaihe muuntaa lähdeohjelman edustuksesta toiseen. Jokainen vaihe ottaa tulot edellisestä vaiheestaan ja syöttää lähdön kääntäjän seuraavaan vaiheeseen.
Kääntäjässä on 6 vaihetta. Jokainen tämä vaihe auttaa muuntamaan konekoodin korkean tason kielen. Kääntäjän vaiheet ovat:
- Leksikaalinen analyysi
- Syntaksi-analyysi
- Semanttinen analyysi
- Välikoodigeneraattori
- Koodin optimoija
- Koodigeneraattori

Kaikki nämä vaiheet muuntavat lähdekoodin jakamalla tokeneiksi, luomalla jäsennyspuita ja optimoimalla lähdekoodin eri vaiheilla.
Tässä opetusohjelmassa opit:
- Mitkä ovat kääntäjän suunnittelun vaiheet?
- Vaihe 1: Leksikaalinen analyysi
- Vaihe 2: Syntaksi-analyysi
- Vaihe 3: Semanttinen analyysi
- Vaihe 4: Välituotekoodien luominen
- Vaihe 5: Koodin optimointi
- Vaihe 6: Koodin luonti
- Symbolitaulukon hallinta
- Virhe rutiinin käsittelyssä:
Vaihe 1: Leksikaalinen analyysi
Leksikaalinen analyysi on ensimmäinen vaihe, kun kääntäjä skannaa lähdekoodin. Tämä prosessi voidaan jättää vasemmalta oikealle, merkki kerrallaan, ja ryhmitellä nämä merkit rahakkeiksi.
Tässä lähdeohjelman merkkivirta on ryhmitelty merkityksellisiin jaksoihin tunnistamalla tunnukset. Se merkitsee vastaavien lippujen merkinnät symbolitaulukkoon ja välittää tunnuksen seuraavaan vaiheeseen.
Tämän vaiheen ensisijaiset toiminnot ovat:
- Tunnista lähdekoodin leksikaaliset yksiköt
- Luokittele leksikaaliset yksiköt luokkiin, kuten vakioihin, varattuihin sanoihin, ja kirjoita ne eri taulukoihin. Se ohittaa lähdeohjelman kommentit
- Tunnista tunnus, joka ei ole osa kieltä
Esimerkki :
x = y + 10
Tunnukset
X | tunniste |
= | Tehtäväoperaattori |
Y | tunniste |
+ | Lisäysoperaattori |
10 | Määrä |
Vaihe 2: Syntaksi-analyysi
Syntaksi-analyysillä on kyse koodin rakenteen löytämisestä. Se määrittää, seuraaako teksti odotettua muotoa vai ei. Tämän vaiheen päätavoitteena on varmistaa, että ohjelmoija on kirjoittanut lähdekoodin oikein.
Syntaksi-analyysi perustuu tiettyyn ohjelmointikieleen perustuviin sääntöihin rakentamalla jäsentelypuu tunnusten avulla. Se määrittää myös lähdekielen rakenteen ja kieliopin tai kielen syntaksin.
Tässä on luettelo tässä vaiheessa suoritetuista tehtävistä:
- Hanki tunnukset leksikaalisesta analysaattorista
- Tarkistaa, onko lauseke syntaktisesti oikea vai ei
- Ilmoita kaikista syntaksivirheistä
- Rakenna hierarkkinen rakenne, joka tunnetaan jäsentelypuuna
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 seuraavasta esimerkistä
(a+b)*c
Parsepuussa
- Sisäsolmu: tallennus käyttäjän kanssa ja kaksi tiedostoa lapsille
- Lehti: tietueet, joissa on vähintään 2 kenttää; yksi tunnusta ja muita tunnusta koskevia 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 yhdessä symbolitaulukon kanssa varmistaakseen, että annettu lähdekoodi on semanttisesti johdonmukainen. Se tarkistaa myös, välittääkö koodi tarkoituksenmukaisen merkityksen.
Semanttinen analysaattori tarkistaa tyypin ristiriidat, yhteensopimattomat operandit, virheellisillä argumenteilla kutsutun funktion, ilmoittamattoman muuttujan jne.
Semanttisen analyysin vaiheen toiminnot ovat:
- Auttaa sinua tallentamaan kerätyt tyyppitiedot ja tallentamaan ne symbolitaulukkoon tai syntaksipuuhun
- Voit suorittaa tyyppitarkistuksen
- Tyyppiristiriidan tapauksessa, jossa ei ole tarkkoja tyypin korjaussääntöjä, jotka tyydyttävät halutun toiminnan, näytetään semanttinen virhe
- Kerää tyyppitietoja ja tarkistaa tyyppien yhteensopivuuden
- Tarkistaa, sallivatko lähdekieli operandit vai eivät
Esimerkki
float x = 20.2;float y = x*30;
Yllä olevassa koodissa semanttinen analysaattori lähettää tyypillisesti kokonaisluvun 30 kellumaan 30,0 ennen kertolaskua
Vaihe 4: Välituotekoodien luominen
Kun semanttinen analyysivaihe on kääntäjän ohi, luo välikoodi kohdekoneelle. Se edustaa ohjelmaa jollekin abstraktille koneelle.
Välikoodi on korkean tason ja konetason kielen välillä. Tämä välikoodi on luotava siten, että sen kääntäminen kohdekoneen koodiksi on helppoa.
Toiminnot välikoodin luomisessa:
- Sen tulisi olla peräisin lähdeohjelman semanttisesta esityksestä
- Sisältää käännöksen aikana lasketut arvot
- Auttaa kääntämään välikoodin kohdekieleksi
- Voit ylläpitää lähdekielen tärkeysjärjestystä
- Siinä on oikea määrä käskyn operandeja
Esimerkki
Esimerkiksi,
total = count + rate * 5
Välikoodi osoitekoodimenetelmän avulla on:
t1 := int_to_float(5)t2 := rate * t1t3 := count + t2total := t3
Vaihe 5: Koodin optimointi
Seuraava vaihe on koodin optimointi tai välikoodi. Tämä vaihe poistaa tarpeettoman koodirivin ja järjestää lausejärjestyksen nopeuttamaan ohjelman suorittamista tuhlaamatta resursseja. Tämän vaiheen päätavoitteena on parantaa välikoodia sellaisen koodin luomiseksi, joka toimii nopeammin ja vie vähemmän tilaa.
Tämän vaiheen ensisijaiset toiminnot ovat:
- Se auttaa sinua luomaan kompromissin suorituksen ja kokoamisnopeuden välillä
- Parantaa kohdeohjelman ajoaikaa
- Luo virtaviivaisen koodin edelleen väliesityksessä
- Poistetaan tavoittamaton koodi ja poistetaan käyttämättömät muuttujat
- Poistetaan lauseet, joita ei ole muutettu silmukasta
Esimerkki:
Harkitse seuraavaa koodia
a = intofloat(10)b = c * ad = e + bf = d
Voi tulla
b =c * 10.0f = e+b
Vaihe 6: Koodin luonti
Koodin luonti 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 tallennustila ja luoda siirrettävä konekoodi.
Se varaa myös muuttujan muistipaikat. Välikoodin ohjeet muunnetaan koneohjeiksi. Tämä vaihe peittää optimointi- tai välikoodin kohdekieleksi.
Kohdekieli on konekoodi. Siksi myös kaikki muistipaikat ja rekisterit valitaan ja jaetaan tämän vaiheen aikana. Tämän vaiheen tuottama koodi suoritetaan panosten ottamiseksi ja odotettujen lähtöjen muodostamiseksi.
Esimerkki:
a = b + 60,0
Käännetään mahdollisesti rekistereihin.
MOVF a, R1MULF #60.0, R2ADDF R1, R2
Symbolitaulukon hallinta
Symbolitaulukko sisältää tietueen jokaisesta tunnisteesta ja kentät tunnisteen määritteille. Tämän komponentin avulla kääntäjän on helpompi etsiä tunnistetietue ja hakea se nopeasti. Symbolitaulukko auttaa sinua myös laajuuden hallinnassa. Symbolitaulukko ja virheenkäsittelijä ovat vuorovaikutuksessa kaikkien vaiheiden ja symbolitaulukon päivityksen kanssa vastaavasti.
Virhe rutiinin käsittelyssä:
Kääntäjän suunnitteluprosessissa voi esiintyä virheitä kaikissa alla annetuissa vaiheissa:
- Leksikaalinen analysaattori: Väärin kirjoitetut rahakkeet
- Syntaksi-analysaattori: sulut puuttuvat
- Välikoodigeneraattori: Operaattorin operandit eivät täsmää
- Koodin optimoija: Kun käsky ei ole tavoitettavissa
- Koodigeneraattori: Tavoittamattomat lauseet
- Symbolitaulukot: Useiden ilmoitettujen tunnisteiden virhe
Yleisimmät virheet ovat virheellinen merkkijono skannauksessa, virheelliset tunnussekvenssit tyypissä, laajuusvirhe ja jäsentäminen semanttisessa analyysissä.
Virhe voi ilmetä missä tahansa yllä olevista vaiheista. Löydettyään virheitä vaiheen on käsiteltävä virheitä jatkaakseen kokoamisprosessia. Nämä virheet on ilmoitettava virhekäsittelijälle, joka käsittelee virheen kääntämisen suorittamiseksi. Yleensä virheistä ilmoitetaan viestin muodossa.
Yhteenveto
- Kääntäjä toimii eri vaiheissa, ja jokainen vaihe muuntaa lähdeohjelman edustuksesta toiseen
- Kääntäjän suunnittelun kuusi vaihetta ovat 1) leksikaalinen analyysi 2) syntaksianalyysi 3) semanttinen analyysi 4) välikoodigeneraattori 5) koodinoptimoija 6) koodigeneraattori
- Leksikaalinen analyysi on ensimmäinen vaihe, kun kääntäjä skannaa lähdekoodin
- Syntaksi-analyysillä on kyse tekstin rakenteen löytämisestä
- Semanttinen analyysi tarkistaa koodin semanttisen johdonmukaisuuden
- Kun semanttinen analyysivaihe on kääntäjän ohi, luo välikoodi kohdekoneelle
- Koodin optimointivaihe poistaa tarpeettoman koodirivin ja järjestää lausejärjestyksen
- Koodinmuodostusvaihe saa syötteet koodin optimointivaiheesta ja tuottaa tuloksena sivukoodin tai objektikoodin
- Symbolitaulukko sisältää tietueen jokaisesta tunnisteesta ja kentät tunnisteen määritteille
- Virheiden käsittely rutiinissa käsittelee virheet ja raportit monissa vaiheissa