Kan iemand een kort codevoorbeeld geven van bootstrapping van de compiler? [gesloten]

Gesloten . Deze vraag moet meer gefocust zijn. Het accepteert momenteel geen antwoorden.

Reacties

Answer

Laten we zeggen dat je een nieuwe programmeertaal schrijft genaamd “XYZ”. De eerste stap is om een compiler voor deze taal te schrijven. Aangezien deze nieuwe taal nog niet bestaat, schrijf je de compiler in … laten we zeggen java. We noemen het jxyz. Dit proces is een typische klas op de universiteit .

Nu heb je een Java-programma (jxyz) dat een XYZ-bronbestand gebruikt en produceert een uitvoerbaar bestand. Het is dan mogelijk om een compiler voor XYZ in XYZ te schrijven die wordt nageleefd door jxyz.

Op dit punt heb je een compiler voor XYZ waaraan werd voldaan aan jxyz. Noem dit programma “xyzFromJ”.

“xyzFromJ” zou zichzelf als een invoer moeten kunnen nemen en zichzelf volledig moeten kunnen compileren door alles wat gecreëerd is door jxyz uit de afhankelijkheden en definitie van de taal te verwijderen. Vanaf dit punt kunnen alle wijzigingen in de XYZ-taal worden aangebracht op de compiler die is geschreven in XYZ en met zichzelf kan worden gecompileerd.

Answer

Stap 1. Schrijf uw compiler in een andere taal.
Stap 2. Compileer de code uit stap 1.
Stap 3. Schrijf uw compiler in dezelfde taal.
Stap 4. Compileer de code van stap 3.

Herhaal stap 3-4 voor eventuele verdere updates van uw compiler.

Merk op dat stap 1 en 3 gelijktijdig of in een andere volgorde kunnen plaatsvinden.

Ik geef toe dat dit in hoge mate een oversimplificatie is.

Reacties

  • @RobertHarvey: in stap 4 heb ik niet gespecificeerd welke compiler ik moest gebruiken met opzet, zodat " Herhaal stap 3-4 " zal logischer zijn.
  • Gewonnen ' werkt stap 4 alleen als je een compiler gebruikt die de nieuwe taal herkent?
  • @RobertHarvey: Ja, maar dat heb ik met opzet niet gedaan ' t specific y zodat " Herhaal stap 3-4 " betekende niet " gebruik de compiler uit stap 1 ", aangezien dit het doel van de oefening zou verslaan. Ik ging ervan uit dat het vanzelfsprekend was dat je de compiler uit stap 1 zou moeten gebruiken bij de eerste iteratie (het is ' de enige compiler die je hebt) en de compiler die is gegenereerd op basis van de vorige iteratie van Step 3 bij elke extra iteratie.

Answer

In tegenstelling tot sommige andere antwoorden die suggereren dat de compiler in een andere taal moet worden geschreven (vermoedelijk een die op dezelfde machine draait waarop u zich richt), is het ook mogelijk (eigenlijk verdient het de voorkeur) om de compiler vanaf het begin in de doeltaal te schrijven.

Stel dat u een compiler voor C wilt schrijven voor een ARM-processor. Je hebt al een C-compiler die op Windows draait (Intel-architectuur). U schrijft uw nieuwe compiler in C, zowel de front-end (lexicale analyse en parsing) als de back-end (codegeneratie). De achterkant is natuurlijk geschreven om code te genereren voor de ARM, niet voor Intel.

Vervolgens compileer je de broncode voor de nieuwe compiler met de bestaande compiler. Zodra u tevreden bent, genereert de compiler geldige code voor de ARM, neemt u de gecompileerde ARM-code en voert u deze uit op de doel-ARM-architectuur. Je hebt nu de broncode voor de nieuwe compiler, die kan worden gewijzigd en ingevoerd in het uitvoerbare bestand en een nieuwe versie kan genereren.

Dit proces wordt cross-compileren genoemd. Het voordeel is dat je alleen om de compiler één keer te schrijven.

Antwoord

van een ander antwoord:

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. 

Stap 1 en 2 zijn alleen nodig voor de “allereerste” compiler voor een nieuwe taal. Er zijn veel variaties op stappen 3 en 4, dus je kunt bijvoorbeeld de codegenerator schrijven voor een nieuwe architectuur, cross compileren, en voer vervolgens dezelfde compiler uit op een nieuwe machine.Of je kunt je compiler uitbreiden om nieuwe syntaxis en constructies te verwerken zonder een van de extensies te gebruiken, en vervolgens de compiler herschrijven om de extensies te gebruiken en zichzelf te compileren.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *