In einem LR (0) -Parser besteht jeder Status aus einer Sammlung von LR (0) -Elementen, bei denen es sich um Produktionen handelt, die mit einer Position versehen sind. In einem LR (1) -Parser besteht jeder Status aus einer Sammlung von LR (1) -Elementen, bei denen es sich um Produktionen handelt, die mit einer Position und einem Lookahead-Zeichen versehen sind.
Es ist bekannt, dass bei einem gegebenen Zustand in einem LR (1) -Automaten der Konfigurationssatz, der durch Ablegen der Lookahead-Token von jedem LR (1) -Element gebildet wird, einen Konfigurationssatz ergibt, der einem Zustand im LR (0) -Automaten entspricht. In diesem Sinne besteht der Hauptunterschied zwischen einem LR (1) -Automaten und einem LR (0) -Automaten darin, dass der LR (1) -Automat mehr Kopien der Zustände im LR (0) -Automaten enthält, von denen jeder mit Lookahead versehen ist Information. Aus diesem Grund sind LR (1) -Automaten für ein bestimmtes CFG typischerweise größer als der entsprechende LR (0) -Parser für dieses CFG.
Meine Frage ist, wie viel größer der LR (1) Automat sein kann. Wenn das Alphabet der Grammatik verschiedene Terminalsymbole enthält, müssen wir im Prinzip möglicherweise jeden Zustand im LR (0) -Automaten mindestens einmal pro Teilmenge dieser n verschiedenen Terminalsymbole replizieren , was möglicherweise zu einem LR (1) führt ) Automat, der 2 n- mal größer ist als der ursprüngliche LR (0) -Automat. Da jedes einzelne Element im LR (0) -Automaten aus einer Reihe verschiedener LR (0) -Elemente besteht, kann es zu einer noch größeren Vergrößerung kommen.
Trotzdem kann ich keinen Weg finden, eine Grammatikfamilie zu konstruieren, für die der LR (1) -Automat erheblich größer ist als der entsprechende LR (0) -Automat. Alles, was ich versucht habe, hat zu einer bescheidenen Vergrößerung geführt (normalerweise um das 2-4-fache), aber ich kann anscheinend kein Muster finden, das zu einer großen Explosion führt.
Gibt es bekannte Familien kontextfreier Grammatiken, deren LR (1) -Automaten exponentiell größer sind als die entsprechenden LR (0) -Automaten? Oder ist bekannt, dass Sie im schlimmsten Fall keine exponentielle Explosion bekommen können?
Vielen Dank!
quelle
Antworten:
Die Grammatik
quelle
Solche Untergrenzen sind manchmal schwierig zu konstruieren und können eine tiefere CS-Theorie hervorrufen (z. B. in Fällen von Komplexitätsklassentrennungen). Dieses Papier scheint eine theoretische Konstruktion / Untergrenze zu geben, die Sie suchen, z. B. in Satz 5, die eine Untergrenze für Gesamtsymbole und damit auch für Zustände festlegt. Die Referenzen enthalten auch andere ähnliche Konstruktionen / Untergrenzen.
Zur Größe von Parsern und LR (k) -Grammaren / Leunga, Wotschkeb
quelle