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!
fonte
Respostas:
A gramática
tem o estado LR (0) expandido para variantes no autômato LR (1), pois todas as partições de são possíveis cabeça que aparecem em diferentes contextos. O número de estados do LR (0) autómato sobre o outro lado é linear em termo de . Assim, é possível um fator de expansão da ordem de
Edit:
Vou ter que verificar mais tarde quando tiver mais tempo, acho que adicionar daria o fator exponencial em quase todos os estados LR (0).TN→T0 Isso resulta em um conflito de redução de turno.fonte
Tais limites inferiores às vezes são difíceis de construir e podem evocar uma teoria mais profunda da CS (por exemplo, em casos, separações de classes de complexidade). Este artigo parece fornecer uma construção teórica / limites inferiores que você procura, por exemplo, no Teorema 5, que coloca um limite inferior no total de símbolos e, portanto, também declara. As referências também incluem outras construções semelhantes / limites inferiores.
Sobre o tamanho dos analisadores e LR (k) -grammars / Leunga, Wotschkeb
fonte