La frase è una lista di parole vista come foresta di analisi.
Non deterministicamente si sceglie un albero di analisi, se esiste:
parto dalle parole della frase e controllo se esiste una regola il cui lato destro combaci con la parola considerata o con una categoria o con una conseguenza della frase.
Se c'è, sostituisco nella frase un nodo con la parte sinistra della regola fino ad ottenere la sostituzione dell'intera frase con S dove , a questo punto, a S è associato l'eventuale albero di analisi.
Function analisi_bottom_up (parole, grammatica) returns un'albero di analisi
foresta™ parole
loop do
if lunghezza(foresta)=1 and categoria(foresta[1])=inizio(grammatica) then
return foresta[1]
else
i™ choose in {1…lunghezza(foresta)}
rule™ choose in regole(grammatica)
n™ lunghezza(regola-rhs(regola))
sottosequenza™ sottosequenza(foresta,i,i+1-n)
if combacia(sottosequenza,regola-rhs(regola)) then
foresta[i…i+n-1]™ [fai-nodo(regola-lhs(regola),sottosequenza)]
else fail
end