Acho que você vai ter de ralar bastante.
Primeiramente, você vai ter de aprender um pouquinho de teoria de compiladores (dê uma busca por isso na Internet, please), e se familiarizar com algumas ferramentas, que são chamadas “compiler compilers”, como o Antlr.
Esses “compiler compilers” ajudam a criar programas, chamados compiladores, que fazem uma parte do trabalho sujo de converter uma linguagem para um executável.
A seguir, vai ter de escolher uma linguagem objeto - ou seja, você cria um programa na sua linguagem (digamos que o nome dela seja Pernalonga++) e o compilador converte esse programa em outro programa, escrito em uma linguagem já existente e que pode ser convertida em um .exe. Normalmente as pessoas costumam escolher, para linguagem objeto, o C ou os bytecodes da JVM ou da CLR (.NET).
Se você realmente quer ralar bastante e bater muito a cabeça, pode escolher para linguagem objeto a linguagem Assembly.
A parte de otimização de código é muito, muito complexa, e normalmente há pouco material disponível sobre isso; o que as pessoas normalmente fazem é deixar esse serviço difícil para o compilador C ou então para a JVM ou a CLR.