Koostaja etapid näitega

Lang L: none (table-of-contents):

Anonim

Millised on kompilaatori kujundamise etapid?

Koostaja töötab erinevates faasides. Iga faas muudab lähtekava ühest esitusest teise. Iga faas võtab sisendid oma eelmisest etapist ja suunab väljundi kompilaatori järgmisse etappi.

Kompilaatoris on 6 faasi. Kõik need etapid aitavad masinakoodi kõrgetasemelist keelt muuta. Koostaja etapid on:

  1. Leksikaalne analüüs
  2. Süntaksianalüüs
  3. Semantiline analüüs
  4. Vahekoodigeneraator
  5. Koodi optimeerija
  6. Koodigeneraator
Koostaja faasid

Kõik need faasid teisendavad lähtekoodi, jagades need žetoonideks, luues parsipuud ja optimeerides lähtekoodi erinevate faaside kaupa.

Selles õpetuses saate teada:

  • Millised on kompilaatori kujundamise etapid?
  • 1. etapp: leksikaalne analüüs
  • 2. etapp: süntaksianalüüs
  • 3. etapp: semantiline analüüs
  • 4. etapp: vahekoodide genereerimine
  • 5. etapp: koodi optimeerimine
  • 6. etapp: koodi genereerimine
  • Sümbolitabeli haldamine
  • Viga rutiini käitlemisel:

1. etapp: leksikaalne analüüs

Leksikaalne analüüs on esimene etapp, kui kompilaator skannib lähtekoodi. Selle protsessi saab vasakult paremale, märk haaval, ja grupeerida need märgid märkideks.

Siin on lähtekava tähemärkide voog grupeeritud tähenduslike jadadena, tuvastades märgid. See sisestab vastavad piletid sümbolitabelisse ja edastab selle märgise järgmisse etappi.

Selle etapi peamised funktsioonid on:

  • Tehke kindlaks lähtekoodi leksikaalsed üksused
  • Klassifitseerige leksikaalsed üksused klassidesse nagu konstandid, reserveeritud sõnad ja sisestage need erinevatesse tabelitesse. See ignoreerib allikaprogrammi kommentaare
  • Tuvastage märk, mis ei ole keele osa

Näide :

x = y + 10

Märgid

X identifikaator
= Ülesandeoperaator
Y identifikaator
+ Lisaoperaator
10 Arv

2. etapp: süntaksianalüüs

Süntaksianalüüs seisneb koodis struktuuri avastamises. See määrab, kas tekst järgib oodatud vormingut või mitte. Selle etapi peamine eesmärk on veenduda, et programmeerija kirjutas lähtekoodi õigeks või mitte.

Süntaksianalüüs põhineb konkreetsel programmeerimiskeelel põhinevatel reeglitel, koostades parsepuu žetoonide abil. See määrab ka lähtekeele struktuuri ja keele grammatika või süntaksi.

Siin on selles etapis täidetud ülesannete loend:

  • Hankige leksikaalsest analüsaatorist märgid
  • Kontrollib, kas avaldis on süntaktiliselt õige või mitte
  • Teata kõigist süntaksivigadest
  • Ehitage hierarhiline struktuur, mida tuntakse parsimispuuna

Näide

Mis tahes identifikaator / number on avaldis

Kui x on identifikaator ja y + 10 on avaldis, siis x = y + 10 on lause.

Kaaluge järgmise näite jaoks sõelumispuud

(a+b)*c

Parsimispuus

  • Sisesõlm: salvestatud operaatoriga ja kaks lastele mõeldud faili
  • Leht: kirjed 2 / enama väljaga; üks märgise ja muu märgise kohta käiva teabe jaoks
  • Veenduge, et programmi komponendid sobivad sisukalt kokku
  • Kogub tüübiinfot ja kontrollib tüüpide ühilduvust
  • Lähtekeel lubab kontrollida operandi

3. etapp: semantiline analüüs

Semantiline analüüs kontrollib koodi semantilist järjepidevust. Ta kasutab eelmise faasi süntaksipuud koos sümbolitabeliga, et kontrollida, kas antud lähtekood on semantiliselt järjepidev. Samuti kontrollitakse, kas kood edastab sobivat tähendust.

Semantiline analüsaator kontrollib tüübi mittevastavusi, ühildumatuid operandeid, valede argumentidega kutsutud funktsiooni, deklareerimata muutujat jne.

Semantilise analüüsi faasi funktsioonid on:

  • Aitab salvestada kogutud tüüpi teavet ja salvestada selle sümbolitabelisse või süntaksipuusse
  • Võimaldab teil teostada tüübikontrolli
  • Tüübi mittevastavuse korral, kus pole täpseid tüübiparandusreegleid, mis rahuldaksid soovitud toimingut, kuvatakse semantiline viga
  • Kogub teavet tüübi kohta ja kontrollib tüübi ühilduvust
  • Kontrollib, kas lähtekeel lubab operandi või mitte

Näide

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

Ülalolevas koodis esitab semantiline analüsaator täisarvu 30 enne korrutamist 30,0 hõljumiseks

4. etapp: vahekoodide genereerimine

Kui semantilise analüüsi faas on kompilaatorist läbi, genereerib sihtmasina jaoks vahepealse koodi. See tähistab programmi mõnele abstraktsele masinale.

Vahekood on kõrgetasemelise ja masinatasemel keele vahel. See vahekood tuleb genereerida viisil, mis muudab selle sihtmasina koodiks hõlpsaks tõlkimise.

Vahekoodi loomise funktsioonid:

  • See peaks olema loodud lähtekava semantilisest esitusest
  • Hoiab tõlkimise käigus arvutatud väärtusi
  • Aitab teil vahekoodi sihtkeelde tõlkida
  • Võimaldab säilitada lähtekeele paremusjärjestuse
  • See sisaldab käsu õige arvu operandi

Näide

Näiteks,

total = count + rate * 5

Vahekood aadressikoodi meetodi abil on:

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

5. etapp: koodi optimeerimine

Järgmine etapp on koodi optimeerimine või keskkood. See etapp eemaldab tarbetu koodirea ja korraldab lausete järjestuse, et kiirendada programmi täitmist ressursse raiskamata. Selle etapi peamine eesmärk on parandada vahekoodi kiiremini töötava ja vähem ruumi hõivava koodi loomiseks.

Selle etapi peamised funktsioonid on:

  • See aitab teil kompromissi luua täitmise ja kompileerimise kiiruse vahel
  • Parandab sihtprogrammi tööaega
  • Genereerib sujuva koodi, mis on endiselt vahepealses esituses
  • Kättesaamatu koodi eemaldamine ja kasutamata muutujatest vabanemine
  • Muudetud lausete eemaldamine silmusest

Näide:

Mõelge järgmisele koodile

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

Võib saada

b =c * 10.0f = e+b

6. etapp: koodi genereerimine

Koodide genereerimine on kompilaatori viimane ja viimane etapp. See saab sisendeid koodi optimeerimise etappidest ja toodab selle tulemusena lehekoodi või objektikoodi. Selle etapi eesmärk on eraldada salvestusruum ja genereerida ümberpaigutatav masinakood.

Samuti eraldab see muutuja mälukohad. Vahekoodis olevad juhised teisendatakse masinakäskudeks. See etapp katab optimeerimis- või vahekoodi sihtkeelde.

Sihtkeel on masinakood. Seetõttu valitakse ja eraldatakse selles faasis ka kõik mälukohad ja registrid. Selles faasis loodud kood käivitatakse sisendite võtmiseks ja eeldatavate väljundite genereerimiseks.

Näide:

a = b + 60,0

Võimalik, et tõlgitakse registritesse.

MOVF a, R1MULF #60.0, R2ADDF R1, R2

Sümbolitabeli haldamine

Sümbolitabel sisaldab iga identifikaatori kirjet koos väljadega identifikaatori atribuutide jaoks. Selle komponendi abil on kompilaatoril lihtsam identifikaatorikirjet otsida ja kiiresti kätte saada. Sümbolitabel aitab teil ka ulatuse haldamist. Sümbolitabel ja veakäitleja suhtlevad vastavalt kõigi faaside ja sümbolitabeli värskendustega.

Viga rutiini käitlemisel:

Kompilaatori disainiprotsessis võib viga ilmneda kõigis allpool toodud etappides:

  • Leksikaalne analüsaator: valesti kirjutatud märgid
  • Süntaksianalüsaator: sulgud puuduvad
  • Vahekoodigeneraator: operaatori operandid ei ühti
  • Koodi optimeerija: kui väljavõtte juurde ei pääse
  • Koodigeneraator: kättesaamatud avaldused
  • Sümbolitabelid: mitme deklareeritud identifikaatori viga

Kõige tavalisemad vead on skannimisel kehtetu tähemärkide järjestus, tüübi valed märgijärjestused, ulatuse viga ja semantilise analüüsi parsimine.

Viga võib ilmneda mis tahes ülaltoodud etapis. Pärast vigade leidmist peab etapp kompileerimisprotsessi jätkamiseks vigadega tegelema. Nendest vigadest tuleb kompileerimisprotsessi läbiviimiseks teatada veakäitlejale, kes vea käsitab. Üldiselt teatatakse vigadest teate kujul.

Kokkuvõte

  • Koostaja töötab erinevates faasides. Iga faas muudab lähtekava ühest esitusest teise
  • Koostaja kujunduse kuus etappi on 1) leksikaalne analüüs 2) süntaksianalüüs 3) semantiline analüüs 4) vahekoodigeneraator 5) koodioptimeerija 6) koodigeneraator
  • Leksikaalne analüüs on esimene etapp, kui kompilaator skannib lähtekoodi
  • Süntaksianalüüs seisneb tekstis struktuuri avastamises
  • Semantiline analüüs kontrollib koodi semantilist järjepidevust
  • Kui semantilise analüüsi faas on kompilaatorist läbi, genereerige sihtmasina jaoks vahekood
  • Koodi optimeerimise faas eemaldab tarbetu koodirea ja korraldab lausete järjestuse
  • Koodi genereerimise faas saab sisendid koodi optimeerimise etapist ja toodab selle tulemusena lehekoodi või objektikoodi
  • Sümbolitabel sisaldab iga identifikaatori kirjet koos väljadega identifikaatori atribuutide jaoks
  • Rutiinide käitlemise vead töötlevad vead ja aruanded mitmel etapil