Voiko joku antaa lyhyen koodiesimerkin kääntäjän käynnistysvaiheesta? [suljettu]

Suljettu . Tämä kysymys on kohdistettava tarkemmin . Se ei tällä hetkellä hyväksy vastauksia.

kommentit

Vastaa

Sanotaan, että kirjoitat uutta ohjelmointikieltä nimeltä XYZ. Ensimmäinen vaihe on kirjoittaa kääntäjä tälle kielelle. Koska tätä uutta kieltä ei vielä ole olemassa, kirjoitat kääntäjän … sanotaan java. Kutsumme sitä jxyz: ksi. Tämän prosessin tekeminen on tyypillinen luokka yliopistossa .

Nyt sinulla on Java-ohjelma (jxyz), joka vie XYZ-lähdetiedoston ja tuottaa suoritettava tiedosto. Sitten on mahdollista sitoutua kirjoittamaan kääntäjä XYZ: lle XYZ: ssä, jota jxyz noudattaa.

Tässä vaiheessa sinulla on XYZ: lle yhteensopiva jxyz. Kutsukaa tätä ohjelmaa ”xyzFromJ”.

”xyzFromJ” pitäisi pystyä pitämään itseään syötteenä ja kokoamaan itsensä kokonaan poistamaan kaikki, jotka jxyz on luonut kielen riippuvuuksista ja määritelmistä. Tästä eteenpäin kaikki muutokset XYZ-kieleen voidaan tehdä kääntäjällä, joka on kirjoitettu XYZ-muodossa ja käännetty itseään käyttäen.

Vastaa

Vaihe 1. Kirjoita kääntäjäsi toisella kielellä.
Vaihe 2. Käännä koodi vaiheesta 1.
Vaihe 3. Kirjoita kääntäjäsi samalla kielellä.
Vaihe 4. Käännä koodi vaihe 3.

Toista vaiheet 3-4, jos haluat kääntäjälle mahdollisesti tulevia päivityksiä.

Huomaa, että vaiheet 1 ja 3 voivat tapahtua samanaikaisesti tai eri järjestyksessä.

Myönnän, että tämä on suuresti yksinkertaistamista.

Kommentit

  • @RobertHarvey: Vaiheessa 4 en määritellyt käytettävää kääntäjää tarkoituksella, jotta " Toista vaiheet 3-4 " on järkevämpää.
  • Voitti ' t vaihe 4 toimii vain, jos käytät kääntäjää, joka tunnistaa uuden kielen?
  • @RobertHarvey: Kyllä, mutta en tarkoituksella ' t y niin, että " Toista vaiheet 3-4 " ei tarkoittanut " kääntäjä vaiheesta 1 ", koska se rikkoisi harjoituksen tarkoituksen. Oletin, että meni sanomattakin, että sinun tulisi käyttää vaiheen 1 kääntäjää ensimmäisessä iteraatiossa (se on ' ainoa kääntäjä, joka sinulla on) ja vaiheen edellisestä iteraatiosta luotua kääntäjää. 3 jokaisella ylimääräisellä iteraatiolla.

Vastaus

Toisin kuin jotkut muut vastaukset, jotka viittaavat kääntäjän kirjoittamiseen jollakin muulla kielellä (oletettavissa oleva, joka toimii samalla koneella, johon kohdistat), on myös mahdollista (itse asiassa suositeltavaa) kirjoittaa kääntäjä kohdekielellä alusta alkaen.

Oletetaan, että haluat kirjoittaa kääntäjän C: lle ARM-prosessorille. Sinulla on jo C-kääntäjä, joka toimii Windowsissa (Intel-arkkitehtuuri). Kirjoitat uuden kääntäjän C-muotoon, sekä käyttöliittymän (leksikaalinen analyysi ja jäsentäminen) että taustapään (koodin luominen). Kurssin loppuosa kirjoitetaan koodin luomiseksi ARM: lle, ei Intelille.

Tämän jälkeen käännät uuden kääntäjän lähteen olemassa olevalla kääntäjällä. Kun olet vakuuttunut siitä, että kääntäjä luo kelvollisen koodin ARM: lle, otat käännetyn ARM-koodin ja suoritat sen ARM-kohdearkkitehtuurilla. Sinulla on nyt uuden kääntäjän lähde, jota voidaan muokata ja syöttää sen suoritettavaan tiedostoon ja luoda uusi versio.

Tätä prosessia kutsutaan ristikäännökseksi. Etuna on, että sinulla on vain kirjoittaa kääntäjä kerran.

Vastaa

toisesta vastauksesta:

Step 1. Write your compiler in a different language. Step 2. Compile the code from Step 1. Step 3. Write your compiler in the same language. Step 4. Compile the code from step 3. 

Vaiheita 1 ja 2 tarvitaan vain uuden kielen ”ensimmäisen” kääntäjälle. Vaiheissa 3 ja 4 on paljon muunnelmia, joten voit esimerkiksi kirjoittaa koodigeneraattorin uudelle arkkitehtuurille, ristiinkäännä ja suorita sitten sama kääntäjä uudella koneella.Tai voit laajentaa kääntäjää käsittelemään uutta syntaksia ja rakenteita käyttämättä mitään laajennuksia, ja kirjoita sitten kääntäjä käyttämään laajennuksia ja kääntää itse.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *