Компилятор можно написать на любом языке. Код будет состоять из нескольких модулей.
1. Лексер - преобразует исходный текст в последовательность токенов.
a = b + 1; превратит в что-то типа {variable("a"), assign, variable("b"), add, number("1")}
2. Парсер строится на основе
грамматики. Преобразует последовательность токенов в дерево.
. assign
/ \
var('a') add
/ \
var('b') number(1)
3. Далее обходя полученное дерево генерируем код
Различные методы расписаны в
dragonbook.