autômato <- 〈estados, transições〉
estado0 <- [item da forma { posição: 0, regra: primeira regra da gramática }]
filaEstados <- []
closure(estado0)
adiciona estado0 aos estados do autômato
adiciona estado0 ao início de filaEstados
enquanto tamanho de filaEstados > 0:
para cada símbolo b no alfabeto da gramática:
estado1 <- []
para cada item p no primeiro estado de filaEstados:
se o símbolo na posição de p for diferente de b:
continua para próxima iteração
se a posição de p for a ultima posição da regra:
continua para próxima iteração
se p já existe em estado1:
continua para próxima iteração
adiciona item da forma { regra: regra de p, posição: posição de p + 1 } em estado1
se estado1 for vazio:
continua para próxima iteração
closure(estado1)
se estado1 não existe nos estados do autômato:
adiciona estado1 aos estados do autômato
t <- transição com o símbolo b indo do primeiro estado de filaEstados para estado1
adiciona t as transições do autômato
adiciona estado1 ao início de filaEstados
continua para próxima iteração
t <- transição com o símbolo b indo do primeiro estado de filaEstados para o estado existente
adiciona t as transições do autômato
remove o primeiro estado de filaEstados