Właściwie, najważniejszą rzeczą, jakiej potrzebujesz, jest znalezienie binarnego formatu plików .exe (chyba, że planujesz użyć istniejącego linkera, w którym to momencie myślę, że musisz tworzyć pliki obj, które również mają binarną format).
Należy również do czynienia z dużą ilością zgromadzeń, chyba że są już bardzo znane z zestawu instrukcji x86, chciałbym spróbować czegoś innego.
Oto kilka możliwości:
Kiedyś coś o nazwie "Tiny C" - Zgaduję, to jest to: http://bellard.org/tcc. Tiny C jest wystarczająco dobrym kompilatorem do zbudowania, ale nie tak skomplikowanym, że trudno go zrozumieć. Jest to prosta instrukcja "Jak zbudować kompilator" w pudełku. Zszokowany tym w 8088.
Dane wyjściowe dla "osadzonego" procesora. Mają zwykle proste języki asemblerowe i bardzo wyraźnie zdefiniowane formaty plików wykonywalnych. To byłoby dobre miejsce na rozpoczęcie.
Wyjście C-kod zamiast pliku binarnego. To na pewno oszust, ale możesz skoncentrować się na swoim języku i nie martwić się zbytnio o język asemblera.
Wreszcie, jeśli naprawdę chcesz bezpośrednio utworzyć .exe, najpierw napisz aplikację, która tworzy plik exe "Hello world". Nie przejmuj się, że to wszystko "zmodyfikuj", po prostu ręcznie edytuj kod, wprowadź go do formatu exe i uruchom - w ten sposób ZNAJDZIESZ, że wszystkie twoje bity ustawiłeś w odpowiednie miejsca, a potem może zacząć z kompilatorem z pewną pewnością.
Po tym, następnie tworzenie języka można dokonać przez wiele procedur podanych tutaj - ale jeśli chcesz po prostu zobaczyć, jak to wszystko działa, to bym na pewno zrobić kilka małych iteracji po pierwsze, nie przejmuj się tym, co napotkasz, dopóki się na nie nie natkniesz.
To jest coś, czego nigdy naprawdę nie był w stanie znaleźć coś wyjaśniający. Przepraszam, że spowodowałem facepalm = ( – Cr15py
Primordial wersja [Nauka pisania kompilatora] (http://stackoverflow.com/q/1669/2509) .Dla prostego chcesz samouczek Crenshaw, ale dla prostych również nie * * chcę zrobić C++ ... – dmckee
@dmckee +1 na nie chcącym C++ - kompilatory, które są na tyle zaawansowane, że potrzebują drzewa parse, wymagają wielu manipulacji drzewem i C++ (i Java, i prawie każdy język poza ML/Haskell rodzina i podobnie inspirowane języki, takie jak Scala) naprawdę cuchnie manipulacjami drzewami –