Введение

В информатике, парсинг выявляет грамматическую структуру линейного входного текста как первый шаг к пониманию его значения. Построчный анализ (снизу вверх) сначала распознает детали самого низкого уровня, затем структуры среднего уровня, а общую структуру верхнего уровня – последней.

Снизу вверх против сверху вниз

Название "снизу вверх" происходит от концепции дерева разбора, в котором наиболее детальные части находятся внизу перевернутого дерева, а более крупные структуры, составленные из них, – в последовательно более высоких слоях, пока в верхней части или "корне" дерева одна единица не описывает весь входной поток. Разбор снизу вверх обнаруживает и обрабатывает это дерево, начиная с нижнего левого конца, и постепенно продвигается вверх и вправо. Парсер может оперировать с уровнями иерархии структуры – низким, средним и высшим – не создавая фактического дерева данных; дерево тогда лишь подразумевается в действиях парсера. Разбор снизу вверх терпеливо ждет, пока не отсканирует и разберет все части некоторой конструкции, прежде чем определить, что представляет собой комбинированная конструкция. Противоположностью этому является разбор сверху вниз, в котором сначала определяется (или предполагается) общая структура ввода, прежде чем приступать к частям среднего уровня, оставляя завершение всех деталей самого нижнего уровня на потом. Парсер сверху вниз обнаруживает и обрабатывает иерархическое дерево, начиная с вершины, и постепенно продвигается сначала вниз, а затем вправо. Разбор сверху вниз быстро определяет, что такое конструкция, на раннем этапе, когда был просканирован только самый левый символ этой конструкции и ни одна из ее частей еще не разобрана. Разбор левого угла – это гибридный метод, который работает снизу вверх вдоль левых границ каждого поддерева и сверху вниз по остальной части дерева разбора. Если в грамматике языка есть несколько правил, которые могут начинаться с одних и тех же левых символов, но иметь разные окончания, то эта грамматика может быть эффективно обработана детерминированным разбором снизу вверх, но не может быть обработана сверху вниз без предположений и отката. Таким образом, парсеры снизу вверх на практике обрабатывают несколько более широкий диапазон грамматик языков программирования, чем детерминированные парсеры сверху вниз. Разбор снизу вверх иногда выполняется с использованием отката, но гораздо чаще он выполняется с помощью парсера сдвига-свертки, такого как LALR-парсер.