El conjunto FOLLOW (seguidores) de un no terminal X es el conjunto de símbolos terminales, que pueden aparecer inmediatamente después del símbolo no terminal X.
Por ejemplo, si se tiene la cadena αXtβ el terminal t habría que agregarlo a los seguidores de X, ya que está después del no terminal X.
Entrada: Conjunto de no terminales (V), donde S es el símbolo inicial de la gramática.
Salida: tabla con el FOLLOW
2: FOLLOW[X]:= {}
3: end for
4: FOLLOW[S]:= {$}
5: repeat
7: for i:= 1 to k-1 do
9:
FOLLOW
[]:=
FOLLOW
[
]
FOLLOW
[
]
10: j:= i+2
11:
while esAnulable
()
and j<=k do
12: FOLLOW
[]:=
FOLLOW
[
]
FIRST
[
]
13: j := j+1
14: end while
15:
if esAnulable ()
and j>k
then
16:
FOLLOW []:=
FOLLOW [
]
FOLLOW[X]
17: end if
18: end if
19: end for
21:
FOLLOW []:=
FOLLOW [
]
FOLLOW[X]
22: end if
23: end for
24: until no hay más cambios
Algoritmo 3: Algoritmo de cálculo del conjunto FOLLOW
Por ejemplo en la siguiente gramática:
Z→d | XYZ
Y→c | ε
X→a | Y
Se obtendrían el siguiente FOLLOW:
X:{a, c, d}
Y:{a, c, d}
Z:{$}
Por defecto el símbolo inicial de la gramática tiene al símbolo final $ como primer follow. El símbolo Z ya no tiene más FOLLOW ya que aunque aparece en la producción Z→XYZ, aparece al final de la producción. Por lo tanto no hay que agregar ningún FOLLOW más. Los seguidores de X son los símbolos {a, c, d}, ya que el no terminal X aparece en la producción Z→XYZ. Estos seguidores se calculan con el FIRST del no terminal Y, y al ser Y anulable también se incluyen los de Z.