Mając add_rule_first: inicjujemy wszystkie zbiory dla poszczególnych symboli nieterminalnych jako puste w głównej pętli ustawiamy changed na false po wszystkich symbolach nietermianalnych po wszystkich symbolach produkcji wołamy add_rule_first z parametrem First[symbol nieterminalny, bieżąca reguła, indeks startowy = 0];

Przykładowa implementacja może być zbliżona do poniższego pseudokodu. bool add_rule_first(outset, rule, index) { for (po symbolach produkcji od indeksu) // gdy produkcja jest postaci X->epsilon, nie wykonujemy tej pętli

if (symbol jest terminalem) { // punkt 2 gdy nieterminalny jest na początku produkcji // również wykonujemy to gdy a jest po Y1Y2...Yk i wszystkie Yi mają epsilon jest_epsilon=false; symbol do outset; if (cos_dodalismy) changed=true; break;//bo nie epsilon

else { //punkt 4 //symbol jest nieterminalny, nazwiemy go Y; do outset dodajemy symbole oprócz epsilona z First[Y]; if (cos_dodalismy) changed=true; if First[Y] nie zawiera epsilona

jest_epsilon=false; break;//bo nie epsilon