Algoritmo de parsing CLR:
pilha_estados <- [0]
pilha_entrada <- entrada invertida (sem espaços) + ['$']
enquanto verdadeiro:
    estado_atual <- último elemento de pilha_estados
    lookahead <- último elemento de pilha_entrada
    ação <- tabela[estado_atual][lookahead]
    se ação não existe:
        retorna falso
    se ação é de aceito:
        retorna verdadeiro
    se ação é de shift:
        novo_estado <- estado de ação
        adiciona lookahead a pilha_estados
        adiciona novo_estado a pilha_estados
        remove lookahead de pilha_entrada
    se ação é de reduce:
        índice_regra <- índice de ação
        produção <- regras_aumentadas[índice_regra]
        se produção não é vazia:
            para cada i de 0 até comprimento(direita da produção):
                remove último elemento de pilha_estados (estado)
                remove último elemento de pilha_estados (símbolo)
        estado_base <- último elemento de pilha_estados
        estado_goto <- tabela[estado_base][esquerda de produção]
        se estado_goto não existe:
            retorna falso
        adiciona esquerda de produção a pilha_estados
        adiciona estado_goto a pilha_estados