união <- {}
follow <- {}
follow(S) = {$}, onde S é o símbolo inicial
para cada produção p da forma X1,X2...Xn na gramática:
para cada símbolo Xk do lado direito de p:
seguinte <- Xk+1
se Xk não pertence aos não-terminais:
continua para próxima iteração
se Xk não existe em follow:
follow(Xk) <- {}
pos <- 1
enquanto verdadeiro:
se seguinte é nulo:
se Xk não existe em união:
união(Xk) <- {}
se esquerda de p é diferente de Xk:
adiciona (esquerda de p) a união(Xk)
para
se seguinte pertence aos não-terminais:
vazio <- false
para cada item f em first:
se (produção correspondente a f) = seguinte:
se ε pertence a f:
vazio <- verdadeiro
continua para próxima iteração
para cada item i em f:
adiciona i a follow(Xk)
se vazio é verdadeiro:
para
seguinte <- Xk+1+pos
pos < pos + 1
caso contrário:
adiciona seguinte a follow(Xk)
para
para cada chave k de união:
se tamanho união(k) é vazio:
continua para próxima iteração
pilha s
adiciona k ao topo de s
enquanto tamanho de s > 0:
topo <- topo de s
primeiro <- primeiro elemento de união(topo)
se união(primeiro) não é vazio e primeiro ainda não foi adicionado a s:
adiciona primeiro ao topo de s
continua para a próxima iteração
para cada item f de follow(primeiro):
adiciona f a follow(topo)
remove primeiro de união(topo)
se união(topo) é vazio:
remove o topo de s