In un parser LR (0), ogni stato è costituito da una raccolta di elementi LR (0), che sono produzioni annotate con una posizione. In un parser LR (1), ogni stato è costituito da una raccolta di elementi LR (1), che sono produzioni annotate con una posizione e un carattere lookahead.
È noto che dato uno stato in un automa LR (1), l'insieme di configurazione formato facendo cadere i token lookahead da ciascun elemento LR (1) produce un insieme di configurazione corrispondente ad uno stato nell'automa LR (0). In tal senso, la principale differenza tra un automa LR (1) e un automa LR (0) è che l'automa LR (1) ha più copie degli stati nell'automa LR (0), ognuno dei quali è annotato con lookahead informazione. Per questo motivo, gli automi LR (1) per un determinato CFG sono in genere più grandi del corrispondente parser LR (0) per quel CFG.
La mia domanda è quanto può essere più grande l'automa LR (1). Se ci sono simboli terminali distinti nell'alfabeto della grammatica, allora in linea di principio potremmo aver bisogno di replicare ogni stato nell'automa LR (0) almeno una volta per sottoinsieme di quei n simboli terminali distinti, portando potenzialmente a un LR (1 ) automa che è 2 n volte più grande della LR originale (0) automa. Dato che ogni singolo elemento nell'automa LR (0) è costituito da un insieme di elementi LR (0) diversi, potremmo ottenere un ingrandimento ancora maggiore.
Detto questo, non riesco a trovare un modo per costruire una famiglia di grammatiche per cui l'automa LR (1) sia significativamente più grande dell'automa LR (0) corrispondente. Tutto ciò che ho provato ha portato a un modesto aumento delle dimensioni (di solito intorno a 2-4x), ma non riesco a trovare uno schema che porti a un grande scoppio.
Esistono famiglie di grammatiche libere dal contesto i cui automi LR (1) sono esponenzialmente più grandi dei corrispondenti automi LR (0)? O è noto che nel peggiore dei casi, non si può effettivamente ottenere un esponenziale esplodere?
Grazie!