Dans un analyseur LR (0), chaque état consiste en une collection d'éléments LR (0), qui sont des productions annotées avec une position. Dans un analyseur LR (1), chaque état consiste en une collection d'éléments LR (1), qui sont des productions annotées avec une position et un caractère d'anticipation.
Il est connu que, étant donné un état dans un automate LR (1), l'ensemble de configuration formé en supprimant les jetons de recherche de chaque élément LR (1) produit un ensemble de configuration correspondant à un état dans l'automate LR (0). En ce sens, la principale différence entre un automate LR (1) et un automate LR (0) est que l'automate LR (1) a plus de copies des états de l'automate LR (0), chacun étant annoté avec lookahead information. Pour cette raison, les automates LR (1) pour un CFG donné sont généralement plus grands que l'analyseur LR (0) correspondant pour ce CFG.
Ma question est de savoir à quel point l'automate LR (1) peut être plus grand. S'il y a symboles terminaux distincts dans l'alphabet de la grammaire, alors en principe, nous pourrions avoir besoin de répliquer chaque état dans l'automate LR (0) au moins une fois par sous-ensemble de ces symboles terminaux distincts, conduisant potentiellement à un LR (1 ) automate qui est fois plus grand que l'automate LR (0) d'origine. Étant donné que chaque élément individuel de l'automate LR (0) se compose d'un ensemble d'éléments LR (0) différents, nous pouvons obtenir une explosion encore plus grande.
Cela dit, je n'arrive pas à trouver un moyen de construire une famille de grammaires pour lesquelles l'automate LR (1) est significativement plus grand que l'automate LR (0) correspondant. Tout ce que j'ai essayé a conduit à une augmentation modeste de la taille (généralement autour de 2 à 4 fois), mais je n'arrive pas à trouver un motif qui mène à une grande explosion.
Existe-t-il des familles connues de grammaires hors contexte dont les automates LR (1) sont exponentiellement plus grands que les automates LR (0) correspondants? Ou sait-on que dans le pire des cas, vous ne pouvez pas réellement obtenir une explosion exponentielle?
Merci!