Der IELR (1) -Parsing-Algorithmus
Der IELR (1) -Parsing-Algorithmus wurde 2008 von Joel E. Denny im Rahmen seiner Promotion entwickelt. Forschung unter der Aufsicht von Brian A. Malloy an der Clemson University. Der IELR (1) -Algorithmus ist eine Variation des sogenannten "minimalen" LR (1) -Algorithmus, der 1977 von David Pager entwickelt wurde und eine Variation des 1965 von Donald Knuth erfundenen LR (k) -Parsing-Algorithmus ist . Der IE in IELR (1) steht für die Beseitigung von Unzulänglichkeiten (siehe letzter Abschnitt).
LR (1) Algorithmen
Der LR (1) Teil IELR (1) steht für L inks nach rechts, R ightmost Ableitung mit 1 Vorgriffs - Token. LR (1) -Parser werden auch als kanonische Parser bezeichnet. Diese Klasse von Parsing-Algorithmen verwendet eine Bottom-up-Parsing-Strategie zur Reduzierung der Verschiebung mit einer Stapel- und Statusübergangstabelle, die die nächste Aktion bestimmt, die während des Parsings ausgeführt werden soll.
Historisch gesehen waren LR (1) -Algorithmen durch große Speicheranforderungen für ihre Übergangstabellen benachteiligt. Die Verbesserung von Pager bestand in der Entwicklung einer Methode zum Kombinieren der Übergangszustände beim Generieren der Übergangstabelle, wodurch die Größe der Tabelle erheblich reduziert wurde. Somit macht der Algorithmus von Pager LR (1) -Parser hinsichtlich der räumlichen und zeitlichen Effizienz mit anderen Parsing-Strategien konkurrenzfähig. Der Ausdruck "minimaler LR (1) -Parser" bezieht sich auf die minimale Größe der Übergangstabelle, die durch den Pager-Algorithmus eingeführt wird.
Einschränkungen des Pager-Algorithmus
Minimale LR (1) -Algorithmen erzeugen die Übergangstabelle basierend auf einer bestimmten Eingabegrammatik für die zu analysierende Sprache. Verschiedene Grammatiken können dieselbe Sprache erzeugen. In der Tat ist es möglich, dass eine Nicht-LR (1) -Grammatik eine LR (1) -Parsersprache erzeugt. In der Praxis akzeptieren LR (1) -Parsergeneratoren Nicht-LR (1) -Grammatiken mit einer Spezifikation zum Lösen von Konflikten zwischen zwei möglichen Zustandsübergängen ("Verschiebungsreduzierungskonflikte"), um dieser Tatsache Rechnung zu tragen. Denny und Malloy stellten fest, dass der Algorithmus von Pager keine Parser generiert, die leistungsfähig genug sind, um LR (1) -Sprachen zu analysieren, wenn bestimmte Nicht-LR (1) -Grammatiken bereitgestellt werden, obwohl die Nicht-LR (1) -Grammatiken eine LR (1) -Sprache generieren.
Denny und Malloy zeigen, dass diese Einschränkung nicht nur akademisch ist, indem sie zeigen, dass Gawk und Gpic, beide weit verbreitete, ausgereifte Software, falsche Parser-Aktionen ausführen.
Verbesserungen von IELR (1)
Denny und Malloy untersuchten die Ursache der Mängel des Pager-Algorithmus, indem sie die vom Pager-Algorithmus erzeugte Übergangstabelle mit der Übergangstabelle einer äquivalenten LR (1) -Grammatik verglichen und zwei Ursachen für die von ihnen als Unzulänglichkeiten bezeichneten Fehler in der Übergangstabelle von Pager identifizierten Algorithmus, aber nicht in der LR (1) -Übergangstabelle. Der IELR (1) -Algorithmus (Inadequacy Elimination LR (1)) von Denny und Malloy wurde entwickelt, um diese Unzulänglichkeiten beim Generieren der Übergangstabelle zu beseitigen, deren Größe praktisch mit der des Pager-Algorithmus identisch ist.