push(s0);
 b = yylex();
 for( ; ; ;) {
   s = top(0); a = b;
   switch (action[s][a]) {
     case "shift t" : 
       push(t); 
       b = yylex();
       break;
     case "reduce A ->alpha" : 
       eval(Sub{A -> alpha}->(top(|alpha|-1).attr, ... , top(0).attr)); 
       pop(|alpha|); 
       push(goto[top(0)][A]); 
       break;
     case "accept" : return (1); 
     default : yyerror("syntax error");
   }
 }
 denota la longitud de la cadena
 denota la longitud de la cadena  .
La función
.
La función top(k) devuelve el elemento que ocupa la 
posición k desde el top de la pila (esto es, está a profundidad k).
La función pop(k) extrae k elementos de la pila.
La notación state.attr hace referencia al atributo
asociado con cada estado. Denotamos por sub_{reduce A -> alpha}
el código de la acción asociada con la regla 
 .
.
Todos los analizadores LR comparten, salvo pequeñas
exepciones, el mismo algoritmo
de análisis. Lo que más los diferencia es la forma en 
la que construyen las tablas.
En yapp
la construcción de las tablas de acciones y gotos
se realiza mediante el algoritmo LALR.
Casiano Rodríguez León