<beetje off-topic>
Een compiler die een Write, Writeln, Beep of Sleep instructie omzet naar machinetaal kan ik ook nog wel programmeren
Het gaat dan ook niet om zulk soort dingen. Dit zijn library calls. Waar het om gaat is de structuur van de taal zelf, de syntax, de keywords. Bij compiler constructie gaat het globaal om:
Lexical en syntax analyzen
Semantic checks uitvoeren en syntax tree bouwen
Intermediate code genereren (zodat je met aparte front en back-ends kan werken)
Target code genereren
Een CPU emulator is niet veel zwaarder om te maken. Het komt er in het kort op neer om de fundamentele elementen van de CPU te modeleren (mem, ALU, datapath, PC, etc). Dan wat routines die een instructie uit mem lezen, decoden en dan een lang switch statement dat ongeveer zo werkt: Als instructie XYZ, doe dan ABC.
Een C64 emulator is heel wat anders. Dan bouw je niet alleen een CPU maar een complete machine. Dat is veel complexer. Als het je echt intereseerd, kijk dan eens op :
http://www.liacs.nl/~atijms/source.html
Daar staan oa twee uitwerkingen van de compiler en cpu emulator gemaakt door een Leidse student.
Jij noemt deze twee dingen fundamenteel?!
Inderdaad. Je zult mischien van je leven geen compiler of emulator meer schrijven als informaticus, maar al je programmaatjes worden wel gecompileerd en draaien op een CPU. Door die dingen eens zelf ge-implementeerd te hebben, krijg je een veel beter inzicht in de werking en beperkingen van de tools en hardware waar je mee gaat werken. Tevens krijg je inzicht in hoe bv LL(1) grammars werken, waarom de syntax van een taal (bv C of Java) er zo moet zien, hoe code optimalisaties werken, hoe de compiler waarschijnlijk met bepaalde constructies zal om moeten gaan, etc etc...
Een MBOer of zelf HBOer zal dit mischien niet willen weten, maar een Universiteit is toch wat fundamenteler.
Het is natuurlijk altijd mogelijk, als de compiler slechts enkele instructies of structuren hoeft te kennen, en de CPU emulator maar enkele commando's
Er is inderdaad geen sprake van een volledige implementatie. Voor de CPU emulator (MIPS R4000 btw) moeten wel alle instructies geimplementeerd worden maar bv geen exceptions. Voor de compiler moet de basis syntax werken, maar geen (std) library dingen. Tevens worden enkele moeilijke dingen weggelaten (zoals lokale functie definities in Pascal)