In realtà, la cosa più importante è necessario è quello di capire il formato binario di file .exe (A meno che non si prevede di utilizzare un linker esistente, a quel punto penso che è necessario per i file di output obj che hanno anche un binario formato).
È inoltre necessario gestire un sacco di assemblaggio, a meno che non si abbia già MOLTO familiarità con il set di istruzioni x86, proverei qualcos'altro.
Qui ci sono alcune possibilità:
Ci deve essere utilizzato una cosa chiamata "Piccolo C" - Sto indovinando questo è: http://bellard.org/tcc. Tiny C è un compilatore abbastanza buono da costruire da solo, ma non così complesso da essere difficile da capire. È una lezione "How-to build a compiler" in una scatola. Incasinato con l'8088.
Uscita per una CPU "Embedded". Tendono ad avere linguaggi di assemblaggio semplici e formati eseguibili chiaramente definiti. Questo sarebbe un buon punto di partenza.
Uscita codice C anziché binario. Questo è sicuramente un trucco, ma puoi concentrarti sulla tua lingua e non preoccuparti troppo del linguaggio dell'assemblaggio.
Infine, se si desidera creare direttamente un file .exe, innanzitutto scrivere un'app che produca un exe "Hello world". Non preoccuparti di averlo "Compilare" qualsiasi cosa, basta modificare il codice manualmente, inserirlo nel formato exe ed eseguirlo - in questo modo saprai che hai tutti i tuoi pezzi allineati e nei punti giusti, allora tu può iniziare su un compilatore con una certa sicurezza.
Dopo questo, creando poi la lingua può essere fatto attraverso un sacco di procedure qui riportati - ma se si desidera solo per vedere come funziona il tutto, mi piacerebbe sicuramente fare alcune piccole iterazioni prima, non preoccuparti di cosa ti imbatterai fino a quando non lo incontrerai.
fonte
2010-10-16 00:13:33
questo è qualcosa che non sono mai stato veramente in grado di trovare qualcosa di spiegare. Scusa se ho causato un facepalm = ( – Cr15py
Versione primordiale [Imparare a scrivere un compilatore] (http://stackoverflow.com/q/1669/2509). Per semplicità vuoi il tutorial di Crenshaw, ma per semplicità anche tu * non * voglio fare C++ ... – dmckee
@dmckee +1 su non volere C++ - i compilatori che sono abbastanza sofisticati da richiedere un albero di analisi richiedono molte manipolazioni di alberi e C++ (e Java, e praticamente qualsiasi linguaggio al di fuori di ML/Haskell la famiglia e le lingue ispirate allo stesso modo come Scala) puzza davvero alle manipolazioni degli alberi –