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!
la source
Réponses:
La grammaire
a l'état LR (0) étendu à variantes dans les automates LR (1) car toutes les partitions de sont possibles - tête qui apparaissent dans différents contextes. Le nombre d'états dans l'automate LR (0) d'autre part est linéaire en terme de . Ainsi un facteur d'expansion de l'ordre de est possible.
Edit:
Je devrai vérifier plus tard quand j'aurai plus de temps, je pense que l'ajout de donnerait le facteur exponentiel sur presque tous les états LR (0).TN→T0 Il en résulte un conflit de réduction des déplacements.la source
Ces limites inférieures sont parfois délicates à construire et peuvent évoquer une théorie CS plus profonde (par exemple dans les cas, les séparations de classes de complexité). Cet article semble donner une construction théorique / des limites inférieures que vous recherchez, par exemple dans le théorème 5 qui met une limite inférieure sur les symboles totaux et donc également les états. Les références incluent également d'autres constructions similaires / bornes inférieures.
Sur la taille des analyseurs et LR (k) -grammars / Leunga, Wotschkeb
la source