Алгоритм разбора IELR (1)
Алгоритм (1) синтаксический IELR был разработан в 2008 году Джоэл Е. Denny как часть его Ph.D. исследования под руководством Брайана А. Маллой в Университете Клемсона. Алгоритм IELR (1) представляет собой разновидность так называемого «минимального» алгоритма LR (1), разработанного Дэвидом Пейджером в 1977 году , который сам является вариацией алгоритма синтаксического анализа LR (k), изобретенного Дональдом Кнутом в 1965 году . IE в IELR (1) означает устранение неадекватности (см. Последний раздел).
LR (1) Алгоритмы
LR (1) часть IELR (1) означает L EFT направо, R ightmost вывод с 1 опережение маркера. Парсеры LR (1) также называются каноническими парсерами. В этом классе алгоритмов синтаксического анализа используется стратегия синтаксического анализа "снизу вверх" и "сдвиг-уменьшение" с таблицей стеков и переходов состояний, определяющей следующее действие, которое необходимо выполнить во время синтаксического анализа.
Исторически алгоритмы LR (1) были в невыгодном положении из-за больших требований к памяти для своих таблиц переходов. Пейджером было улучшено создание метода объединения переходных состояний при создании таблицы перехода, что значительно уменьшило размер таблицы. Таким образом, алгоритм Пейджера делает парсеры LR (1) конкурентоспособными с другими стратегиями синтаксического анализа с точки зрения эффективности пространства и времени. Фраза «минимальный парсер LR (1)» относится к минимальному размеру таблицы переходов, введенной алгоритмом Пейджера.
Ограничения алгоритма пейджера
Минимальные алгоритмы LR (1) создают таблицу переходов на основе конкретной входной грамматики для анализируемого языка. Разные грамматики могут создавать один и тот же язык. В самом деле, грамматика, не относящаяся к LR (1), может создать синтаксический язык LR (1). На практике генераторы синтаксического анализатора LR (1) принимают грамматики не-LR (1) со спецификацией для разрешения конфликтов между двумя возможными переходами состояний («конфликты сдвига-уменьшения»), чтобы учесть этот факт. Денни и Маллой обнаружили, что алгоритм Пейджера не может генерировать достаточно мощные синтаксические анализаторы для синтаксического анализа языков LR (1) при наличии определенных грамматик не-LR (1), хотя грамматика не-LR (1) генерирует язык LR (1).
Денни и Маллой показывают, что это ограничение не просто академическое, демонстрируя, что Gawk и Gpic, оба широко используемые, зрелые программы, выполняют некорректные действия парсера.
Улучшения IELR (1)
Денни и Маллой изучили источник недостатков алгоритма Пейджера, сравнив таблицу переходов, сгенерированную алгоритмом Пейджера, с таблицей переходов эквивалентной грамматики LR (1) и определили два источника, которые они называют неадекватностями, которые появляются в таблице переходов из таблицы Пейджера. алгоритм, но не в таблице переходов LR (1). Алгоритм Денни и Маллоя IELR (1) ( устранение неадекватности LR (1)) - это алгоритм, разработанный для устранения этих недостатков при создании таблицы переходов, размер которой практически идентичен размеру алгоритма Пейджера.