Analyseurs ascendants fonctionnent en trouvant des “handles” de façon répétée (un peu comme les analyseurs lexicaux mais avec automates à pile au lieu d'automates à états finis). Un “handle” est une liste des fils du dernier noeud dévéloppé en produisant le programme; Une fois trouvé (reconnu) l'analyseur la réduit à son noeud parent. Autrement dit, il cherche à reconnaitre dans la suite des symboles le coté droit d'une règle de production. F
La difficulté est de trouver les “handles.” il y a beaucoup de techniques approximatives.
La technique LR utilise des ensembles d'items des “handles” proposés. Leur comportment à l'égard de “shift” est similaire, leurs critères de décision de réduction diffèrent.
En LR(0) tout item réductible (suivi du point) provoque une réduction. En SLR(1),un item réductible N\rightarrow \alpha \bullet ne provoque une réduction que si le symbole suivant (look ahead) est dans FOLLOW(N). En LR(1), l'item réductible N\rightarrow \alpha \bullet \left\{\sigma\right\} provoque une réduction seulement si le symbole suivant (look ahead) est dans \sigma, un petit ensemble de symboles calculé exprès pour répondre à cette question.
Comme l'analyseur lexical, l'analyseur LR peut effectuer un shift sur le symbole suivant ou une réduction par une règle de grammaire. La décision est trouvée par consultation de la table d'ACTION, qui peut être produite par pré-calcul sur les ensembles des items. Si un shift est préconisé, le nouvel état peut être trouvé dans la table GOTO, qui peut être pré-calculée de la même façon. Pour les analyseurs LR(1), les deux table peuvent être superposées (fusionnées).
Les ensembles d'item et tables LALR(1) sont obtenus en combinant les ensembles LR(1) qui ne diffèrent que par leurs lookaheads. Ceci réduit la taille des tables à celle de LR(0) avec qu'une petite perte de puissance.
Un ensemble d'items LR a un conflit shift/reduce si un item demande un shift et un autre demande une réduction, compte tenu du symbole suivant (lookahead). Un ensemble d'items LR a un conflit reduce/reduce si deux items demandent deux réductions différentes, toujour tenant compte du symbole suivant (lookahead).
Le conflits LR shift/reduce peuvent être levés si on donne toujours priorité à shift; les conflits reduce/reduce peuvent être résolus en acceptant toujours la règle prenant la séquence de symboles la plus longue, ou en établissant des règles de précédence.
Reprise après erreurs dans l'analyse LR est difficile….