Ceci conduit à des analyseurs plus puissants au sens où elle réussit avec un sur-ensemble stricte de grammaires.
La grammaire G0 mais sans la multiplication
Analyse de la chaine id + (id + id )
On s'aide d'un pile pour mémoriser les parties de l'arbre en cours de construction.
page de l'exemple à saisir (28/9 # 4)
… par décalages et réductions.
A chaque étape on examine les premeiers éléments au sommet de la pile ; ce doit être le préfixe de la partie droite d'une ou plusieurs règles (notion de préfixe viable).
shift et reduce?redue et reduce?La décision entre shift et reduce doit prendre en compte non seulement le token courant–le sommet de la pile–mais aussi le contenu de toute la pile! Solution : on introduit des états qui représentent l'information de toute la pile.
L'algorithme (famille d'algorithmes) utilise
shift/reduce ne se pose plus. Le contenu de la pile (à l'horizontale) est :'shift sj où sj est un état, ou reduce rk où rk est une règle de grammaire, ou “erreur”.Initialement le pointeur pointe sur le 1° élément de la chaine et la pile contient s0.
A chaque itération, on examine l'élément ACTION[sm, a] où sm est l'état au sommet de la pile, a est l'élément courant de la chaine. On réalise le traitement suivant :
shift s alors on empile a pis s et on avance le pointeur dans la chaine.A puis GOTO[sm-l, A].Tous les analyseurs LR fonctionnent selon ce principe. Ils ne diffèrent entre eux que par la facons de définir et calculer les états (et tables). Nous verrons par la suite: