O ile dobrze rozumiem, to pytasz o to, jakie etapy powinna mieć kompilacja/interpretacja. Ten przykładowy kompilator ma trzy podstawowe etapy:
- tokenizacja – gdzie każdy token jest parsowany osobno, zatem liczby osobno, operator osobno itd.,
- parsowanie – gdzie tokeny są łączone w większe części i powstaje AST,
- trawersacja – gdzie kompilator przechodzi przez AST i robi żądane operacje (w przykładzie jest to zamiana AST na inny format drzewka i wygenerowanie z niego kodu).
W teorii pierwsze dwa etapy można złączyć, ale zwykle są oddzielnie, bo w taki sposób parsowanie jest po prostu bardziej elastyczne i może pokryć więcej przypadków. IMO też zrobienie tego oddzielnie jest prostsze.
Co do trzeciego etapu, to w trakcie przechodzenia przez AST możesz na bieżąco wykonywać poszczególne fragmenty. Możesz też np. generować z niego kod JS, który na końcu odpalisz choćby przy pomocy eval().