Kokoonpanoperiaate

Peruskäsitteet

Kääntämisen periaate on korkean tason ohjelmointikielten kääntämisen tiede ja tekniikka. Me kaikki tiedämme, että tietokoneohjelmat on kirjoitettu ohjelmointikielillä. Alkuaikoina tietokoneohjelmointikielet kehittyivät suhteellisen hitaasti, koska tietokoneen tallentama tieto ja tietokoneen suorittama ohjelma koostuvat 0- ja 1-koodeista, joten alkuaikoina ohjelmoijien kirjoittaessa tietokoneohjelmia heidän on tiedettävä tietokoneen taustalla oleva ohjekoodi hyvin yhdistämällä ja järjestämällä nämä mikroohjelman käskyt valmiiksi. Ohjelma, jossa on tietty toiminto, asettaa ohjelmoijalle erittäin korkeat vaatimukset. Ihmiset ovat tutkineet, kuinka tietokoneohjelmia voidaan kehittää tehokkaasti ohjelmoinnin kynnyksen alentamiseksi.

Kääntäjä

C-kielen kääntäjä on eräänlainen nykyaikainen laite, joka tarvitsee tietokonekääntäjän apua. C-kielen kääntäjän suunnittelu on suhteellisen ammattimaista työtä. Suunnittelijan on otettava huomioon tietokoneohjelmien raskas suunnitteluprosessi sekä tietokoneen käyttäjien tarpeet. Tietokoneiden tyypit lisääntyvät jatkuvasti, joten C-kielen kääntäjää suunniteltaessa meidän on lisättävä sen soveltuvuutta. C-kielellä on vahva prosessointiteho, se on strukturoitu kieli ja sitä käytetään enemmän tietokonejärjestelmän ylläpidossa. C-kielen etuna on korkea hyötysuhde, ja sitä käytetään enemmän erilaisissa tietokoneissa.

C-kielen kääntäjän käyttöliittymäsuunnittelu

Käännösprosessi toteutetaan yleensä tietokonejärjestelmässä, mikä tarkoittaa prosessia, jossa lähdekoodi muunnetaan tietokoneen yleiskieleksi. Kääntäjä sisältää sisääntulopisteen osoitteen, nimen ja konekoodin. Kääntäjä on työkalu, jota käytetään laajasti tietokoneohjelmissa. Kääntäjän käyttöliittymää suunniteltaessa on otettava täysimääräisesti huomioon vaikuttavat tekijät sekä leksiaalinen, kieliopillinen ja semanttinen analyysi.

1 Leksinen analyysi

Leksinen analyysi on kääntäjän etupään suunnittelun perusvaihe. Tässä vaiheessa kääntäjä merkitsee lähdeohjelman asetettujen kielioppisääntöjen mukaisesti. Merkintäprosessissa jokainen merkki edustaa sanatyyppiä. Merkintäprosessissa käytetään pääasiassa tunnisteita, avainsanoja, erikoissymboleita ja muita tyyppejä. Kääntäjä sisältää leksikaalisen analysaattorin, tulolähdeohjelman ja tulosteen tunnistuksen. Merkki, käytä näitä toimintoja muuntaaksesi fontin koon tutuiksi sanoiksi.

2 Syntaksianalyysi

Syntaksianalyysi tarkoittaa asetettujen kielioppisääntöjen käyttöä tunnuksen rakenteen, joka sisältää lauseita, lauseita jne., tunnistamiseen tunnistusprosessissa. Erityinen rakennesyntaksipuu voidaan muodostaa. Syntaksianalyysillä on tärkeä vaikutus kääntäjän toimintaan. Suunnitteluprosessin aikana logon oikeellisuus on taattava.

3 Semanttinen analyysi

Semanttinen analyysi edellyttää myös kielioppisääntöjen käyttöä. Kielioppiyksiköiden staattista semantiikkaa tarkistettaessa on tarpeen varmistaa kielioppisääntöjen tarkkuus. Leksikaalista tai kielioppia muuttaessa on varmistettava kieliopin rakenneasetuksen legitiimiys. Kielioppia ja morfologiaa tarkistettaessa, jos kieliopin rakenne on asetettu kohtuuttomasti, syntyy käännösvirheongelma. Etupään suunnittelu vaatii parempaa tarkkuutta, ja suunnittelijat voivat tehdä oikolukutyötä, mikä vaikuttaa käännöksen tarkkuuteen. Jos käyttöliittymän suunnittelussa on virheitä, se vaikuttaa C-kielen kääntämisen vaikutukseen.

C-kielen kääntäjän yleinen rakenne

C-kielen kääntäjä on edistyksellinen laite, joka voi muuntaa ikäviä ja monimutkaisia ​​ohjelmia konekieleksi, ja sen tehtävänä on yksinkertaistaa monimutkaista jakoprosessia. C-kielen kääntäjä, on välttämätöntä ymmärtää kieliopin kokoonpanon periaatteet, suunnittelijan on ymmärrettävä joustavasti kielen kieliopin tietämys ja myös käytettävä C-kielikoodin muunnosmenetelmää. Kun C-kielen kääntäjän kokonaissuunnittelu on suoritettu, on tarpeen aloittaa Alkusta seuraavista näkökohdista.

1 Leksinen analyysi

C-kielen ohjelmilla on tietty monimutkaisuus. Kielioppianalyysi on kokoamisen ensisijainen vaihe. Tämä prosessi on pääasiassa skannata leksikaalista, joten leksikaalisen analyysin vaihe, kokoaminen Skanneria käytetään myös skannerina. Sen päätehtävänä on yhdistää lähdeohjelman merkit ja tunnistaa siinä olevat sanat ja muuntaa sanasto, muuntaa se sisäiseksi koodiksi ja analysoida sen kielioppia merkillä. Kääntämisprosessissa sanasymbolit muunnetaan yleensä binäärimuotoon. Sanaluokkia ovat pääasiassa binääri, erotin, sana jne. Kun tietokone toimii normaalisti, skanneri suorittaa automaattisesti leksikaalisen skannaustyön ja tämä prosessi myös poistaa automaattisesti kommentit, tunnistaa automaattisesti lähdeohjelman sanat ja muuntaa ne sisäisiin koodeihin. Työmenetelmien näkökulmasta käännösprosessi ja kielioppi kuuluvat kahteen rajapintamenetelmään. Toiminnallisesta näkökulmasta kääntäjän leksikaalinen analyysiprosessi on lähinnä vastaavan merkkilähdeohjelman muuntaminen sanajonon muotoon.

2 Semanttinen analyysi

Kun käännetty ohjelma on muutettu sisäiseksi esitykseksi, kutsumme tätä sisäistä esitystä välikieleksi tai välikoodiksi, jolla on selkeä merkitys. Rakenne on yksinkertainen ja kuuluu merkintäjärjestelmään. Esimerkiksi joissakin kääntäjissä ei periaatteessa ole välikoodia, mutta koneen itsenäisen toiminnan varmistamiseksi käytännön sovelluksissa ja kohdekoodin optimoinnin helpottamiseksi moniin kääntäjiin on asetettu välikieli. Tämä välikieli on konekielen ja lähdeohjelmointikielen välissä, ja ohjelma on suhteellisen monimutkainen, mutta C-kielen kääntäjä on muuttanut yllä olevaa tilaa suurelta osin. Sen semanttinen analyysi ja syntaksianalyysi ovat suhteellisen kypsiä, ja teoria ja algoritmi ovat suhteellisen täydellisiä. Ongelmana on, että tunnustettua muodollista järjestelmää ei ole olemassa ja välikoodi on edelleen lähellä muodollista menetelmää.

3 Syntaksianalyysi

Syntaksianalyysi perustuu pääasiassa lähdeohjelmaan sanamerkkijonojen muodossa analyysi- ja syöttöobjekteina. Sen perimmäisin tavoite ja tehtävä on käyttää suunnittelukielen kielioppisääntöjä standardeina, lähdeohjelman kieliopin rakenteen erityinen analyysi suunnittelukielen kielioppisääntöjen mukaisesti, näiden lähdeohjelmien kieliopillisten komponenttien analysointi, kuten funktiot, alaindeksimuuttujat, erilaiset ohjelmakäskyt, erilaiset lausekkeet jne. Ja kielioppitarkistuksen oikeellisuuden läpäisemiseksi välikoodi käsitellään vaiheittain. Yksi asia on kuitenkin huomioitava, että pelkistys tapahtuu tarpeiden mukaan ja vastaavia kielioppivirheitä tulee olla. Sitten voit poistaa kaikki syöttösymbolit, muuttaa yllä olevaa kuviota, suorittaa siirto- ja vähennysanalyysin ja jatkaa tämän perusteella Etsi vastaava strategia tehokkaan kieliopin analyysimenetelmän muodostamiseksi.

Kokoonpanon periaatekurssi

Kokoonpanoperiaatteet ovat tärkeä ammatillinen kurssi tietotekniikan opiskelijoille, ja se on perusta ammatillisen alan tiedon perusteelliselle opiskelulle tulevaisuudessa. Tietojenkäsittelytieteen ja tekniikan ammatillisena kurssina tämä kurssi yhdistää useiden tieteenalojen tiedot, kuten diskreetin matematiikan, tietorakenteen, käyttöjärjestelmän ja tietokoneen koostumuksen periaatteet. Se on kattava ja teoreettinen kurssi. Kokoamisperiaatteen sisällöstä johtuen Yllä mainituilla ominaisuuksilla kokeellisessa opetuksessa on edelleen ongelmia. Jos haluat suunnitella ja tuottaa täydellisen kääntäjän käännösperiaatteen kokeellisessa osassa, kokeilujakso on pitkä, moduuleja on paljon ja moduulien välinen yhteys on monimutkaisempi, eikä kokonaisuuden näkeminen ole helppoa. vaikuttaa välittömästi.

Ongelmia perinteisen käännösperiaatteen kurssin opetuksessa

Ensimmäinen kielikurssi tietojenkäsittelytieteen pääaineopiskelijoille on C-kieli. C-kieli on altis joihinkin vaikeasti havaittaviin virheisiin sen tyypin epävarmuuden vuoksi, mikä tekee opiskelijoiden vaikeaksi paikantaa ja ratkaista ongelmia. Jos opiskelijat pystyvät paikantamaan tarkasti ohjelmassa olevien virheiden tyypin ja sijainnin kääntäjän antamien tietojen perusteella ja soveltavat kääntämisen periaatteissa oppimaansa todellisiin C-kielen ohjelmointitarpeisiin, tämä ei vain suorita opetusta. kurssin sisältöä, mutta myös parantaa opiskelijoiden Ohjelmisto- ja järjestelmäanalyysivalmiuksia.

Alkaen käännösperiaatteiden varsinaisesta opetuksesta tavallisissa korkeakouluissa ja yliopistoissa, opetussuunnitelman kattavuus rajoittuu yleensä kääntäjän etuosaan, toisin sanoen leksikaaliseen analyysiin, kielioppianalyysiin ja kieliopillisesti ohjattuun kääntämiseen. Tämä sisältää suuren määrän abstrakteja ja loogisesti monimutkaisia ​​teoreettisia tietopisteitä, kuten muodollisen kielen teoria, muodolliset muodot, äärelliset automaatit, yhteydetön kielioppi, attribuuttikielioppi ja kielioppiohjattu käännös. Perinteinen opetusmenetelmä korostaa tietopisteiden juurruttamista, jolloin opiskelijat voivat ratkaista yksittäisen ongelman, josta puuttuu yhteys tietopisteiden välillä. Tämä opetusmenetelmä "nähdä vain puita, ei metsää" heikentää suuresti oppilaiden intoa oppimiseen, mikä johtaa huonoihin kokonaistuloksiin.

Keskinäisen avun kokoamisperiaatteiden käytännönläheinen opetus

(1) Teorian ja käytännön yhteys

Teoreettisen tiedon lähteellä on yleensä tiettyjä ongelmia Tausta. Ei ole hyödyllistä parantaa opiskelijoiden käytännön kykyä suorittaa teoreettista opetusta erillään käytännön ongelmista. Compiler Principles -kurssin teoreettisen tiedon suurella määrällä on yhtenäinen ja progressiivinen suhde. Jokaisen tietopisteen esittely ja laajentaminen on ratkaisupolku todellisuudessa kohdattuihin ongelmiin. Siksi koko opetusprosessi toistaa tämän ratkaisun kehitystä. Avain tämän tavoitteen saavuttamiseen on, että opettaja on nyt muuttunut "podiumin edessä seisomisesta" "istuvaksi opiskelijoiden keskuudessa". Tämä muutos ei tarkoita vain sitä, että kaikki kysymykset jätetään opiskelijoille "opetuksesta" "kysymyksiin vastaamiseen", vaan se myös nostaa opettajille vaatimuksia ongelman suunnittelun, ajattelun ja valistuksen, keskustelun ja ohjauksen ja prosessinhallinnan näkökulmasta. Erityisesti nykyaikaisten korkean tason kielten kehitys muuttuu päivä päivältä, ja erilaisia ​​uusia kysymyksiä syntyy loputtomana virrana. Kun kohdataan avoimia ja tuntemattomia ongelmia, kuinka antaa opiskelijoille tapa ratkaista ongelma systemaattisesta ja kokonaisvaltaisesta näkökulmasta sen sijaan, että jokaiseen kysymykseen annettaisiin tarkkoja vastauksia , Tämä on uusi testi opettajien kyvyistä.

(2) Kääntäjän suunnittelu- ja toteutussuunnitelma

Ihanteellisessa käännösperiaatteiden opettamisessa opiskelijoiden tulisi pystyä itsenäisesti rakentamaan pieni käännösjärjestelmä. Varsinaisessa opetuksessa opiskelijoiden tarvitsee vain ymmärtää tiedon keskeiset periaatteet, kuten NFA:n määrittely, FIRST- ja FOLLOW-joukkojen rakentaminen LL (1) -kieliopissa sekä elävän etuliite DFA -rakenteen tunnistaminen LR (1) -kieliopissa. . Täytä kurssin koevaatimukset. Pelkästään teoreettinen oppiminen ei kuitenkaan riitä toteuttamaan peruskääntäjää. Verrattuna siihen, miten opiskelijat hyväksyvät teoreettisen tiedon, on vielä selvempää opiskelijoiden kyvyttömyys täydentää kokoamisjärjestelmää oma-aloitteisesti. Se, kuinka kohdata kaikki opiskelijat ja laatia soveltuvia käytännön ohjelmia, on avain kurssin todelliseen tehokkuuteen.

Käännöstekniikan kehitys

Von Neumannin tietokoneen alkuaikoina (1940-luvulla) ohjelmia kirjoitettiin konekielellä ja konekieleen tallennettiin itse asiassa 01-koodi, kirjoitettu Toimenpide on erittäin tylsä. Myöhemmin kokoonpanokieli korvasi konekielen symbolisella toimintaohjeiden muodolla ja osoitekoodauksella. Assembly-kielessä on kuitenkin edelleen monia puutteita. Sitä on vaikea lukea ja ymmärtää, ja sen täytyy riippua tietystä koneesta. Jos haluat saada kirjoitetun ohjelman ajettavaksi toisella tietokoneella, sinun on kirjoitettava se uudelleen. 1950-luvulla IBM:n John Backus johti tutkimusryhmää korkean tason FORTRAN-kielen ja sen kääntäjän kehittämiseksi. Kääntäjien automaattiset generointityökalut alkavat hahmottua, ja nyt monia automaattisia generointityökaluja on käytetty laajalti, kuten syntaksianalyysityökalu LEX, kielianalyysiohjelma YACC ja niin edelleen. 1960-luvulla käännösten rakentamiseen jatkettiin itsekääntämistekniikkaa, eli itse käännetty kieli toteutettiin kielen kääntäjänä, mutta sen perusperiaatteet ja rakenne olivat suunnilleen samat. Jatkuvan kehityksen jälkeen moderni käännöstekniikka on kypsynyt, ja monien korkean tason kielten nopea kehitys on erottamaton käännöstekniikan kehityksestä.

Kääntämisen perusprosessi

Kääntäminen voidaan jakaa viiteen perusvaiheeseen: leksiaalinen analyysi, syntaksianalyysi, semanttinen analyysi ja välikoodin luominen, optimointi ja kohdekoodin luominen. Nämä ovat perusvaiheita ja -prosesseja, jotka jokaisen kääntäjän on syötettävä korkean tason kielen lähdeohjelmat lähdekoodista ja tulostettava kohdekielikoodit.

1 Leksinen analyysi

Leksikaalinen analysaattori skannaa lähdeohjelman muodostavan merkkijonon vasemmalta oikealle leksikaalisen analyysiohjelman läpi, lukee merkki merkiltä ja tunnistaa jokaisen sanasymbolin . Tunnistettu symboli tulostetaan yleensä binäärimuodossa, joka sisältää ohjelman koodin. symbolityyppi ja symbolin arvo. Leksiset analysaattorit ovat yleensä olemassa funktioiden muodossa, joita jäsentäjä voi kutsua. Tietysti myös itsenäinen leksikaalinen analysaattoriohjelma voi olla olemassa. Leksikaalisen analyysin tehtävää suorittavaa ohjelmaa kutsutaan leksikaaliseksi analyysiohjelmaksi tai leksikaaliseksi analysaattoriksi tai skanneriksi.

2 Syntaksianalyysi

Syntaksianalyysi on käännösprosessin toinen vaihe. Tämän vaiheen tehtävänä on yhdistää tunnistettu sanamerkkijono erilaisiksi kieliopillisiksi lauseiksi, jotka perustuvat leksikaaliseen analyysiin, kuten "lause", "lauseke" jne. Kieliopin analyysiohjelman päävaihe on selvittää, onko lähdeohjelman lause vastaa määritelmää Kieliopin kieliopin säännöt ovat oikein kielioppirakenteessa. Ja kielioppisääntöä kutsutaan myös kieliopiksi. Chomsky jakaa kieliopin tyypin 0, tyypin 1, tyypin 2 ja tyypin 3 kielioppiin erilaisten asetettujen rajoitusten perusteella. Tyypin 0 kielioppia kutsutaan myös lausekieliopiksi, ja tyyppiä 1 kutsutaan kontekstipohjaiseksi kieliopiksi. , Tyyppiä 2 kutsutaan yhteydettömäksi kieliopiksi ja tyypin 3 kielioppiksi tavalliseksi kielioppiksi, ja rajoitusehdot kasvavat peräkkäin.

3 Semanttinen analyysi

Leksinen analyysi keskittyy siihen, onko jokainen sana laillinen ja mihin kielen osaan sana kuuluu. Kieliopin analyysin yhteydetön kielioppi keskittyy siihen, pystyykö syötelause vastaamaan tuotantoa kieliopin mukaan. Sitten semanttisen analyysin tarkoituksena on ymmärtää, onko kunkin kielioppiyksikön välinen suhde laillinen. Varsinaisessa sovelluksessa se on rakenteellisesti oikeiden lähdeohjelmien konteksti- ja tyyppitarkistus.

4 Keskitason koodin luominen ja optimointi

Syntaktisen ja semanttisen analyysin työvaiheiden jälkeen jotkut kääntäjät muuttavat lähdeohjelman sisäiseksi esitykseksi. Sisäistä esitystä kutsutaan välikieleksi tai väliesitukseksi tai välikoodiksi. Niin sanottu "välikoodi" on symbolijärjestelmä, jolla on yksinkertainen rakenne ja selkeä merkitys. Tämän symbolijärjestelmän monimutkaisuus on lähdeohjelmointikielen ja konekielen välissä, ja se on helppo kääntää objektikoodiksi. Lisäksi koneriippumaton optimointi voidaan suorittaa myös välikooditasolla.

5 Kohdekoodin luominen

Optimoidun välikoodin mukaan voidaan luoda tehokas kohdekoodi. Yleensä kääntäjä kääntää sen kokoonpanokoodiksi, ja tällä hetkellä kokoonpanokoodi täytyy koota kohdekoneen konekieleksi kokoajan toimesta.

6 Virheiden käsittely

Jokaisessa käännösvaiheessa lähdekoodista saattaa löytyä virheitä, erityisesti syntaksianalyysivaiheessa saattaa löytyä suuri määrä virheitä, joten kääntäjän on suoritettava virheiden käsittely. Ilmoita tiedot, kuten virheen tyyppi ja virheen sijainti.

Yleiskatsaus käännösprosessiin

Muistissa käynnissä oleva rakenne, kun C-kielen lähdeohjelma ja vastaava suoritettava ohjelma suoritetaan, tärkein prosessi tämän muunnoksen toteuttamiseksi on kääntäminen.

Lähdeohjelma on ihmisten nähtävillä. Se on pohjimmiltaan tekstitiedosto. Se voidaan avata ja kirjoittaa tekstinmuokkausohjelmalla, kuten vi:llä Linuxissa tai Notepadilla Windowsissa, mutta tietokone ei voi suorittaa lähdeohjelmaa suoraan. , Lähdeohjelma on tarpeen kääntää tietokoneella suoritettavaksi ohjelmaksi erikoisohjelman kautta, ja tämä erikoisohjelma on kääntäjä. Käännösprosessi on jaettu pääasiassa leksikaaliseen analyysiin, syntaksianalyysiin, välikoodin luomiseen ja kohdekoodin luomiseen (esikäsittely, semanttinen analyysi, optimointi jne. huomioimatta). Alla selitämme lyhyesti vuorollaan kokoamisen pääprosessin.

Leksinen analyysi

Ihmissilmin lähdekoodi on seuraava:

int fun(int a,int b); int m=10 ;Int main(){int int i=4;int j=5;m=fun(i,j);return 0;int a,int bun(int a,int c=0;c =a+b;return c;_}

Ja sen tietokoneeseen tallennettu muoto näkyy kuvassa 1-36.

Kuva 1-36 Tapausohjelman heksadesimaalimuoto

Ei ole avainsanoja, operaattoreita, tunnisteita tai edes mitkä merkit kuuluvat samaan symboliin. Kokoamisen ensimmäinen vaihe on leksikaalinen analyysi, jonka tarkoituksena on tunnistaa symbolit yksitellen peräkkäisissä merkeissä ja tunnistaa symbolien attribuutit mahdollisimman paljon.

Kun ihmiset katsovat C-kielen lähdeohjelmaa, he näkevät tunnisteet ja avainsanat yhdellä silmäyksellä välilyöntien ja hakasulkeiden avulla. Ihmisiin verrattuna tietokoneiden älykkyys on nykyään vielä varsin alhainen. Se ei voi lukea useita merkkejä samaan aikaan, kuten ihmiset tekevät. Se tunnistaa merkit vain yksitellen erittäin mekaanisen morfologian "elektronisen version" perusteella. "Elektronisen version" morfologia ilmentyy integroimalla tilasiirtymäkaavion ideat leksikaalisen analysaattorin koodiin. Leksikaalinen analysaattori tunnistaa merkit lähdeohjelman merkkijonosta ja tallentaa ne järjestyksessä.

Leksikaalisen analyysin tulos on esitetty kuvassa 1-37.

Kuva 1-37 Leksikaalisen analyysin tulokset

Leksikaalisessa analyysivaiheessa joidenkin symbolien merkitys voidaan tunnistaa, mukaan lukien avainsanat, numerot ja merkit Merkkijono, erotin, näiden symbolien merkitys voidaan määrittää ilman muiden symbolien apua. Esimerkiksi "int" on edustettava kokonaislukutyyppiä. Se ei voi olla muuttujan nimi tai operaattori.

Muiden symbolien on ohitettava muut symbolit ennen ja jälkeen tarkan merkityksen määrittämiseksi. Esimerkiksi "m" voidaan arvioida tunnisteeksi vain leksikaalisessa vaiheessa, mutta jos lausetta ei analysoida, on mahdotonta tietää, edustaako tunniste muuttujaa vai funktiota. Tarkempia tietoja saa vain analysoimalla lausemallia, jossa symboli sijaitsee. Tämä osa työstä tehdään kieliopillisen analyysin avulla.

Syntaksianalyysi

Jos leksikaalisen analyysin tehtävänä on tunnistaa tunnisteet, avainsanat, numerot ja operaattorit peräkkäisistä merkeistä ja tallentaa ne merkkivirtana, kielioppi Analyysin tehtävänä on tunnistaa lauseet jotka vastaavat C-kielen kielioppia leksikaalisella analyysillä tunnistetusta symbolivirrasta.

Koska tietokone ei pysty katsomaan useita tunnisteita, avainsanoja, numeroita ja operaattoreita samanaikaisesti kuin ihminen, se ei voi yhdellä silmäyksellä nähdä, että tämä on funktion määrittely, se on if-lause, ja se voi olla vain tunnistaa erittäin kömpelösti yksi symboli symbolilta. Leksikaalisen analysaattorin tapaan myös kielioppianalysaattori perustuu tietokoneen esittämään kielioppiin, joka tunnistaa C-kielen kieliopin mukaiset lauseet symboli kerrallaan. Kieliopin tietokoneesitys on tuotanto. Syntaksianalysaattorissa tuotannon luoma C-kielen kielioppi kartoitetaan mallisarjaksi, ja tämä mallijoukko integroidaan syntaksianalysaattorin ohjelmaan. Kielioppianalysaattorin tehtävänä on sovittaa leksikaalisen analysaattorin tunnistamat tokenit tähän mallisarjaan yksitellen. Jos tietty kielioppi tässä mallisarjassa osuu, koko lause voidaan tunnistaa ja määrittää. Lauseen syntaksi.

Otamme funktion määrityslausekkeen "int fun(int a, int b);" tässä tapauksessa esimerkkinä tämän prosessin kuvaamiseksi. Sovitusskenaario lauseen mallipohjaan on esitetty kuvassa 1-38.

Kuva 1-38 Fun-funktion määrityslausekkeen ja mallin yhteensovittamisen tulos

Tämä merkkivirta lopulta vastaa funktion määritysmallia, ja täsmääminen onnistuu. Myöhemmin tietokone pitää tätä käskyä funktion määrityslauseena ja tallentaa sen muistiin syntaksipuun muodossa, kuten kuvassa 1-39. .

Kuva 1-39 Fun-funktion määrityslauseen luoma syntaksipuu

On erittäin nerokasta ja kaukonäköistä tallentaa analysoitu lausunto puurakenteeseen , Kokonaisarvioinnin valinta. Toisaalta puurakenne voi "muistaa" kaiken lähdeohjelman "merkityksen". Toisaalta puurakenne on helpompi vastata ajonaikaista rakennetta.

Syntaksipuusta välikoodiin kohdekoodiin

Toistaiseksi syntaksipuu on kuljettanut kaikki lähdeohjelman tiedot, eikä sitä seuraavalla muunnostyöllä ole mitään tekemistä lähdekoodin kanssa. ohjelmoida.

Jos haluat muuntaa syntaksipuusta kohdekoodiksi yhdessä vaiheessa, se on mahdollista sekä teoriassa että käytännössä. Tietokoneissa on kuitenkin useita CPU-laitteistoalustoja. Ottaen huomioon ohjelmien siirrettävyyden eri prosessorien välillä, ne muunnetaan ensin yleiseksi ja abstraktiksi "CPU-käskyksi". Tämä on välikoodin alkuperäinen suunnitteluidea. Sitten tietyn valitun CPU:n mukaan välikoodi toteutetaan tietyn CPU:n kohdekoodiksi.

Syntaksipuu on kaksiulotteinen rakenne. Välikoodi on lähes yksiulotteinen rakenne. Muunnosprosessi syntaksipuusta välikoodiin on olennaisesti prosessi, jossa kaksiulotteinen rakenne muunnetaan kvasi-yksiulotteiseksi rakenteeksi. Välikoodi, erityisesti RTL, voi jo vastata ajonaikaista rakennetta yksi yhteen. Kuten kuvassa 1-40.

Kuvat 1-40 näyttää skenaarion, jossa välikoodi vastaa kohdekoodia

Ajonaikainen rakenne on myös yksiulotteinen, kuten näkyy kuvan 1-40 vasemmassa osassa. Muunnoksen tulos on lähempänä ajonaikaista rakennetta.

Kun olet valinnut tietyn suorittimen ja käyttöjärjestelmän, välikoodi voidaan muuntaa kohdekoodikokoonpanokoodiksi (määritämme AT&T-kokoonpanon), tällä hetkellä käyttöjärjestelmän vaikutus on suhteellisen pieni. Sitten kokoaja muuntaa .s-tiedoston tietyksi objektitiedostoksi valitun käyttöjärjestelmän objektitiedostomuodon mukaan, joka on .o-tiedosto Linuxille ja .obj-tiedosto Windowsille. Valitun CPU:n konekäskyt ovat jo kohdetiedostossa.

Lopuksi linkittäjä linkittää yhden tai useamman objektitiedoston (kirjastotiedostot ovat myös luonteeltaan objektitiedostoja) suoritettaviksi tiedostoiksi, jotka ovat valitun käyttöjärjestelmän määritetyn muodon mukaisia.

Käyttöjärjestelmän kautta suoritettavat ohjelmat voidaan ladata muistiin suoritettaviksi, jolloin muodostuu kahdessa edellisessä osiossa nähty ajonaikainen rakenne.

Tämän kirjan jatkosisältö selittää yksityiskohtaisesti kokoamisen pääprosessin: leksikaalisen analyysin, syntaksianalyysin, välikoodin kohdekoodiin, sitten kokoonpanon ja linkityksen ja lopuksi esikäsittelyn selityksen.

Related Articles
TOP