Se il linguaggio è compilato, devi per forza conoscere l'architettura, in particolare quella 80X86 a 32-bit e a 64-bit, su cui andrai a far girare il tuo linguaggio, oltre naturalmente alla piattaforma software (Windows) :asd:
Quindi il linguaggio Assembly ma in ogni caso devi "padroneggiare" perfettamente la manipolazione delle stringhe e l'OOP :sisi:
Il compilatore è suddiviso in 3 parti che devi "progettare": lo "scanner", che legge i vari "token", il "parser", che analizza l'array di stringhe e produce il cosiddetto "albero di token", e infine devi scrivere il "code generator" in grado di analizzare l'albero di token e produrre l'Assembly (compilato poi con TASM o NASM) :asd:
Inutile che ti dica che per la gestione dell'I/O devi conoscere le API del S.O. utilizzato :D
Se invece il tuo linguaggio è interpretato, i passi sono più o meno gli stessi, l'unica differenza è che l'albero di token non passa attraverso il code-generator ma viene "dato in pasto" all'interprete senza alcuna traduzione in Assembly (per la gestione dell'I/O puoi utilizzare, in questo caso, le funzioni del linguaggio di programmazione) :sisi:
In caso di linguaggio pseudo-compilato verrà generato codice byte-code e non Assembly ma per la sua interpretazione avrai bisogno di una "macchina virtuale", devi quindi creare un simulatore di componenti quali la CPU, la RAM, ecc. :asd:
Hai parecchio da studiare, buon lavoro :D