Em um analisador LR (0), cada estado consiste em uma coleção de itens LR (0), que são produções anotadas com uma posição. Em um analisador de LR (1), cada estado consiste em uma coleção de itens de LR (1), que são produções anotadas com uma posição e um caractere lookahead.
Sabe-se que, dado um estado em um autômato LR (1), o conjunto de configuração formado pela remoção dos tokens do cabeçote de look de cada item LR (1) produz um conjunto de configuração correspondente a algum estado no autômato LR (0). Nesse sentido, a principal diferença entre um autômato LR (1) e um autômato LR (0) é que o autômato LR (1) possui mais cópias dos estados no autômato LR (0), cada um dos quais é anotado com lookahead em formação. Por esse motivo, os autômatos LR (1) para um determinado CFG são geralmente maiores que o analisador LR (0) correspondente para esse CFG.
Minha pergunta é quanto maior o autômato LR (1) pode ser. Se houver símbolos terminais distintos no alfabeto da gramática, em princípio, talvez seja necessário replicar cada estado no autômato LR (0) pelo menos uma vez por subconjunto desses símbolos terminais distintos, potencialmente levando a um LR (1). ) autômato vezes maior que o autômato LR (0) original. Dado que cada item individual no autômato LR (0) consiste em um conjunto de itens LR (0) diferentes, podemos ter uma explosão ainda maior.n 2 n
Dito isto, não consigo encontrar uma maneira de construir uma família de gramáticas para a qual o autômato LR (1) seja significativamente maior que o autômato LR (0) correspondente. Tudo o que tentei levou a um aumento modesto no tamanho (geralmente em torno de 2-4x), mas não consigo encontrar um padrão que leve a uma grande explosão.
Existem famílias conhecidas de gramáticas livres de contexto cujos autômatos LR (1) são exponencialmente maiores que os autômatos LR (0) correspondentes? Ou é sabido que, na pior das hipóteses, você não pode realmente obter uma explosão exponencial?
Obrigado!