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