// koniec pętli po symbolach prawej strony produkcji // lub była produkcja X->epsilon (punkt 3) if (jest_epsilon) //co oznacza że wszystkie były nieterminalnymi i zawierały epsilon { //jeśli pętla się wykonała to oznacza że wszystkie Yi zawierały epsilon epsilon do outset if (dodalismy ten epsilon bo go nie było) changed=true;

set [ilosc_nieterminalnych]First; //tablica zbiorów First dla każdego symbolu nieterminalnego inicjujemy wszystkie zbiory First jako puste;//punkt 1 void make_First_sets() { bool changed; //w jednym przebiegu pętli zostały dodane nowe symbole do

changed = false; for (X po wszystkich symbolach nieterminalnych (od ostatniego))

for (po regułach produkcji dla tego symbolu nieterminalnego (od ostatniej))

bool jest_epsilon=true; //symbol prawej strony produkcji może go zmienić na false bool retchanged = add_rule_first(First[X], rule, 0) if (retchanged) changed = true;

while (changed); }

Follow W praktyce (jak na przykład przy tworzeniu parserów SLR) zbiór Follow oblicza się dla pojedynczych symboli nieterminalnych.