In realtà l'albero serve per fare eventuali ottimizzazioni. Una volta ottimizzato/ridotto, l'albero viene attraversato dal code generator, che o sputa fuori direttamente il codice oppure prima lo trasforma in notazione RPN, che è appunto uno stack contenente simboli (letterali e variabili) e operatori.
Quindi lo stack, alla fine, ci dev'essere per forza. Nei compiler più elementari tale stack è direttamente implicito in una catena di funzioni ricorsive, per cui lo stack dei parametri delle chiamate ricorsive sostituisce la struttura Stack che dovresti esplicitamente creare in un sistema più elaborato.