Если вам нужен учебник по compact , почему бы не рассмотреть конструкцию компилятора Wirth's (pdf). Исходный язык (Oberon-0) достаточно прост, чтобы компилятор был понятным. Язык реализации (Оберон) должен быть доступен для чтения любому, кто занимался программированием.
Какой язык использовать для реализации компилятора. Используйте то, что вам знакомо. Если вы сомневаетесь, выберите язык, который не излишне усложнит попытку: что-то со сборкой мусора. Что-то, что позволяет легко распечатывать или иным образом сбрасывать внутренние структуры данных для проверки. Питон , Схема и Луа все приходят на ум.
И последнее, что нужно target с вашим компилятором. Я уверен, что виртуальные машины JVM и CLR были упомянуты. Вы могли бы пойти по этому пути. Это может быть проще для первой попытки использовать симулятор для урезанного RISC-процессора в качестве вашей цели. (Это делает компилятор Вирта.)
Я бы не советовал ориентироваться на x86 для вашего первого компилятора, так как он отвратителен без слов. Я также не стал бы ориентироваться на язык высокого (er) уровня, такой как C, потому что вы упустите много интересных деталей, например, как реализовать семантику короткого замыкания для логических операторов и тому подобное.