Teraz generujemy kod w następujący sposób: jeśli mają taki sam numer: generujemy kod dla jednego poddrzewa, alokujemy dodatkowy rejestr, do którego wstawiamy rezultat dotychczasowych obliczeń, generujemy kod dla drugiego poddrzewa, scalamy wynik; w przeciwnym razie: generujemy kod dla poddrzewa o większym numerze, wykorzystujemy jeden z rejestrów, które zaalokowaliśmy na potrzeby obliczania pierwszego poddrzewa, generujemy kod dla drugiego poddrzewa, scalamy wynik.
Algorytm ten ustali „optymalną” kolejność wykonywania obliczeń. W praktyce możliwe są inne optymalizacje – możemy przekształcić drzewo korzystając z praw łączności i przemienności działań, obliczyć w trakcie kompilacji stałe części drzewa, oddzielić obliczanie wspólnych podwyrażeń itd.
Sethiego-Ullmana