Я попытался изучить как работает код на примере C# и .net и немного запутался, как может компилятор .net языка C# быть написан на том же языке C#?
То есть, если совсем утрировать то внутри компилятора должны быть команды в духе "если Console.Writeline то выводи команду в командую строку", то как программа которая создает C# может быть написана на C#?
Достаточно на чём угодно написать первую версию, которая сама может скомпилировать себя же и выдать такой же код. Т.е., написать минимальный компилятор, который реализует только тот функционал, с помощью которого он сам и написан. И как только этот компилятор, написанный, например на си или асме, сможет скомпилировать весь тот же самый код, но переписанный на C#, то дальше уже можно спокойно писать код на на C#. Это и называется скомпилировать себя. Именно так и реализуются все компиляторы. Если хотите понять на низком уровне как оно всё делается, то посмотрите в сторону Forth: минимальная система пишется за пару вечеров на чём угодно.