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