Hai ragione finora. In tutti i casi, devi avere una descrizione rigorosa della sintassi della lingua (una "grammatica") prima di poter costruire qualcosa che può prendere qualcosa in quel linguaggio presumibilmente e determinare se è conforme alle regole di sintassi (un "parser" ).
Il parser è il front-end di un compilatore. La generazione del codice è il back-end.
Ci sono dozzine di libri là fuori sulla costruzione del compilatore. Molti di loro entrano nei dettagli delle tecniche di analisi. Alcuni si occupano solo del back-end.
Il libro migliore e più accessibile che ho trovato per un principiante è "di Nicklaus Wirth. Costruzione del compilatore ". Disponibile gratuitamente. Dovrai tradurre il suo codice sorgente da Oberon (un semplice discendente di PASCAL e Modula-2) nella tua lingua preferita.
La serie di Jack Crenshaw, "Costruiamo un compilatore" , anche se incompleta, è quasi altrettanto valida e altrettanto accessibile.
Ci sono altri strumenti. ANTLR è popolare.