Convertire un interprete in un compilatore?

8

Innanzitutto, so che questa è una domanda posta da MOLTI altri programmatori prima di me. Ma non sono riuscito a trovare alcuna risorsa utilizzabile che potesse aiutarmi.

Bene, sto creando un linguaggio di programmazione chiamato "Light", la sintassi è paragonabile a Python ma ha un concetto rigoroso orientato agli oggetti.

Ho già creato un interprete (in C ++) per questa lingua, il mio problema è come trasformarlo in un eseguibile. (O semplicemente: come faccio a compilare un compilatore?)

Grazie per l'attenzione

P.S .: Ho trovato alcuni link a un tutorial molto vecchio ma è in Pascal ...

EDIT: Bene bene. Ora ho trovato un tutorial adatto per C ++. Informazioni sul progetto: ci sono stati alcuni cambiamenti. Ora la lingua si chiama "Q." (kju Dot).

    
posta LaVolpe 23.02.2013 - 20:58
fonte

3 risposte

12

Il primo paio di passaggi di lexing / parsing (e analisi, a seconda di come è strutturato) può essere lo stesso. Ma dovrai convertire la tua rappresentazione in una rappresentazione che generi codice. Tipicamente LLVM è usato per gli hobbisti in quanto è praticamente l'unica libreria in grado di generare codice libero in remoto.

    
risposta data 23.02.2013 - 21:02
fonte
3

Se tutto ciò che vuoi veramente è un eseguibile, puoi aggiungere lo script alla fine di un file eseguibile dell'interprete e farlo funzionare.

Vedi: link

In alternativa, puoi semplicemente fare in modo che l'interprete carichi il codice da un file nella stessa directory dell'interprete e ottenga in gran parte lo stesso risultato, solo con più file.

Un vero compilatore converte il codice in un altro linguaggio e usa il compilatore per quella lingua. Ma se vuoi solo distribuire gli eseguibili, non c'è bisogno di farlo.

    
risposta data 23.02.2013 - 22:29
fonte
3

Potresti anche prendere in considerazione l'utilizzo di System.Reflection.Emit dal runtime .NET per generare un eseguibile .NET. Ciò ti consentirà di accedere a un ambiente orientato agli oggetti esistente che ha già risolto alcuni problemi per te e l'exe risultante può essere indipendente dalla piattaforma. Il runtime compilerà il codice intermedio nel codice .exe al codice macchina in base alle esigenze, quindi le prestazioni dovrebbero essere paragonabili a quelle ottenute dalla compilazione direttamente al codice nativo.

    
risposta data 24.02.2013 - 05:52
fonte

Leggi altre domande sui tag