Лучшие вопросы
Таймлайн
Чат
Перспективы

Нисходящий синтаксический анализ

Из Википедии, свободной энциклопедии

Remove ads

Нисходящий синтаксический анализ (англ. top-down parsing) — это один из методов определения принадлежности входной строки к некоторому формальному языку, описанному LL(k) контекстно-свободной грамматикой. Это класс алгоритмов грамматического анализа, где правила формальной грамматики раскрываются, начиная со стартового символа, до получения требуемой последовательности токенов.

Идея метода

Для каждого нетерминального символа K строится функция, которая для любого входного слова x делает 2 вещи:

  • Находит наибольшее начало z слова x, способное быть началом выводимого из K слова
  • Определяет, является ли начало z выводимым из K

Такая функция должна удовлетворять следующим критериям:

  • считывать из ещё необработанного входного потока максимальное начало A, являющегося началом некоторого слова, выводимого из K
  • определять является ли A выводимым из K или просто невыводимым началом выводимого из K слова

В случае, если такое начало считать не удается (и корректность функции для нетерминала K доказана), то входные данные не соответствуют языку, и следует остановить разбор.

Разбор заключается в вызове описанных выше функций. Если для считанного нетерминала есть составное правило, то при его разборе будут вызваны другие функции для разбора входящих в него терминалов. Дерево вызовов, начиная с самой «верхней» функции эквивалентно дереву разбора.

Наиболее простой и «человечный» вариант создания анализатора, использующего метод рекурсивного спуска, — это непосредственное программирование по каждому правилу вывода для нетерминалов грамматики.

Remove ads

Условия применения

Суммиров вкратце
Перспектива

Пусть в данной формальной грамматике N — это конечное множество нетерминальных символов; Σ — конечное множество терминальных символов, тогда метод рекурсивного спуска применим только, если каждое правило этой грамматики имеет следующий вид:

  • или , где , и это единственное правило вывода для этого нетерминала
  • или для всех
Remove ads

Алгоритмы нисходящего разбора

Примечания

Литература

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads