Oi Júlio, boa tarde.
Eu ministro uma disciplina de construção de compiladores e é uma das minhas áreas favoritas na Ciência da Computação. A linguagem AuroraLogo é interpretada. O parser (analisador sintático) foi escrito usando ANTLR e a gramática pode ser vista aqui: https://github.com/davidbuzatto/AuroraLogo/blob/main/gramatica/AuroraLogo.g4
Inclusive, a gramática é algo que eu preciso reescrever para as futuras versões, pois está complicada em demasia, poderia ser mais enxuta. O processo de execução das instruções e construções da linguagem é feito durante o percurso da árvore de análise sintática gerada pelo parser. Eu uso o padrão Visitor, mas pode-se implementar usando Observer. A cada nó visitado, há um método de alguma classe que resolve o que determinada instrução em AuroraLogo deve executar. Seria nesses passos que eu geraria outra linguagem caso fosse um compilador. A implementação dos visitors está aqui https://github.com/davidbuzatto/AuroraLogo/tree/main/src/br/com/davidbuzatto/auroralogo/parser/impl/visitors
Na disciplina que ministro a gente implementa um compilador de fato, que gera linguagem assembly para uma máquina virtual baseada em pilha. Aí forneço o montador que vai transformar o assembly nos opcodes da VM.