Compila un linguaggio di programmazione con se stesso


10

Sono uno studente di informatica. Voglio creare il mio linguaggio di programmazione (un linguaggio di base con poche istruzioni).

So come fare un analizzatore sintattico, l'ho già fatto in Perl. In un articolo, ho letto qualcosa sul compilatore, un compilatore è fatto di per sé.

Ad esempio il compilatore C è scritto in C. Come è possibile? Posso creare la mia lingua ma non so come potrei eseguirla? Qualche idea?

È davvero una buona domanda e posso scrivere un blog sul progetto.


Le persone hanno spiegato come avviare il bootstrap, ma perché è necessario? Non c'è motivo per cui non puoi compilare la tua lingua usando un compilatore scritto in C, Perl o altro. Certo, sarebbe bello avere un compilatore per la tua lingua scritto in sé, ma sarebbe un sacco di lavoro - dovresti scrivere almeno due compilatori per ottenerlo (uno in C / Perl / qualunque, uno in la tua lingua).
David Richerby,

Hmm .. Penso che scriverò il mio primo compilatore in C e scriverò un secondo nella mia lingua. È davvero interessante creare un piccolo linguaggio di programmazione, possiamo imparare un sacco di informatica
BaptisteL

Risposte:


13

Il trucco è il bootstrap . Prima scrivi un compilatore per la tua lingua (o un suo sottoinsieme) in un'altra lingua. Quindi scrivi un compilatore per la tua lingua (o un grande sottoinsieme di quello che puoi già gestire) nella tua lingua. Si utilizza il precedente compilatore per compilare il nuovo compilatore e quindi il nuovo compilatore può compilare se stesso.


Quindi, posso creare il mio primo compilatore usando C e la prossima volta compilerò il mio compilatore v2 con la v1? Ma c'è un problema, come faccio a sapere che il compilatore non ha alcun problema? Devo convertire il mio codice sorgente in assembler? O in altra cosa?
BaptisteL

2
Come potrei sapere che il compilatore non ha alcun problema? Più in generale, hai scritto un programma; come fai a sapere che non ha bug? Non Scrivi alcuni test e speri per il meglio. Devo convertire il mio codice sorgente in assembly? Sicuramente no. Puoi fidarti del compilatore C. Stai facendo la stessa cosa, ma con assembly sostituito con C (o qualsiasi altra lingua di tua scelta).
Yuval Filmus,

Va bene, devo fidarmi delle mie capacità ^^ Volevo chiedere al processo di fare il compilatore. Davvero non capisco cosa faccia un compilatore, analizzatore sintattico e lessicale va bene, ma dopo ??
BaptisteL

Quindi si genera il codice. Se non vuoi entrare nei dettagli della generazione del codice macchina, puoi sempre generare codice in qualche altra lingua, dire codice C e utilizzare un compilatore esterno per compilarlo nel codice macchina. (Oppure potresti usare un linguaggio interpretato ed eseguire un interprete.)
Yuval Filmus,

Hummm No, preferisco farlo in questo modo: My Language in enter -> Machine Code. Non voglio convertire la mia lingua in un'altra (uguale per la prima compilazione) È possibile?
BaptisteL

2

Un compilatore che può compilare le proprie fonti è chiamato compilatore self-hosting . I primi compilatori furono scritti in un'altra lingua. Ad esempio, il primo compilatore C è stato probabilmente scritto in assembler. L'intero trucco nell'uso di un ex compilatore di livello inferiore si chiama bootstrap.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.