Введение

Язык анализа сверху вниз (TDPL) — это тип аналитической формальной грамматики, разработанный Александром Бирманом в начале 1970-х годов для формального изучения поведения общего класса практических парсеров, работающих сверху вниз и поддерживающих ограниченную форму возврата (backtracking). Изначально Бирман назвал свой формализм схемой TMG (TS), по имени TMG — раннего генератора парсеров, но позднее Ахо и Уллман дали ему название TDPL в своей классической антологии «Теория разбора, трансляции и компиляции».

Общая TDPL

Небольшое изменение TDPL, известное как обобщенный TDPL или GTDPL, значительно повышает кажущуюся выразительность TDPL, сохраняя при этом тот же минималистский подход (хотя они на самом деле эквивалентны). В GTDPL вместо рекурсивного правила TDPL в форме A → BC/D используется форма правила A → B[C,D]. Это правило интерпретируется следующим образом: когда нетерминал A вызывается для некоторой входной строки, он сначала рекурсивно вызывает B. Если B успешно выполняется, то A затем вызывает C для оставшейся части входной строки, не обработанной B, и возвращает результат C исходному вызывающему. Если же B не выполняется, то A вызывает D для исходной входной строки и передает результат обратно вызывающему. Важное отличие этой формы правила от формы A → BC/D, используемой в TDPL, заключается в том, что C и D никогда не вызываются в одном и том же вызове A: то есть, правило GTDPL действует скорее как "чистая" конструкция "если/то/иначе", используя B в качестве условия. В GTDPL легко выразить интересные языки, не являющиеся контекстно-свободными, такие как классический пример {anbncn}. Грамматика GTDPL может быть сведена к эквивалентной грамматике TDPL, распознающей тот же язык, хотя этот процесс нетривиален и может значительно увеличить количество необходимых правил. Кроме того, как TDPL, так и GTDPL можно рассматривать как сильно ограниченные формы грамматик выражений для разбора, все из которых представляют один и тот же класс грамматик.