43
принимается, если после считывания всей строки стек остается пустым. Это
– обычный способ принятия строк автоматами магазинного типа, хотя можно
также определить автоматы магазинного типа, которые принимают строки по
конечному состоянию. Эти два типа эквивалентны.
Описанный выше автомат магазинного типа является
детерминированным, т.е. для каждого допустимого входного символа
имеется однозначный
переход. Что же касается конечных автоматов, то мы
можем также определять недетерминированные автоматы магазинного типа,
содержащие множество переходов для заданного входа, состояния и
содержания стека.
При разборе происходит эффективное моделирование
соответствующего автомата магазинного типа. Некоторые КС языки не могут
анализироваться детерминированным образом (т.е. без возврата). Язык,
допускающий детерминированный анализ, называется
детерминированным
; большинство языков программирования являются
детерминированными или, по крайней мере, почти таковыми.
Между КС-грамматиками и автоматами магазинного типа существует полное
соответствие, и детерминированность автомата может зависеть от того, какая
грамматика используется для генерирования языка. Метод разбора является
детерминированным (для конкретной грамматики), если при разборе данной
грамматики не требуется делать возврат.
Некоторые языки можно разбирать
детерминировано с помощью только одного из методов грамматического
разбора. В частности, ряд языков можно разбирать детерминировано снизу
вверх, но не сверху вниз. Далее мы будем рассматривать исключительно
детерминированные методы разбора. Недетерминированные методы могут
применяться к таким строчно-ориентированным языкам, как Фортран. Для
языков же сильно рекурсивных (С
++, Паскаль), где компилятор может быть
вынужден возвращаться назад не только в текущей строке, но и в большой
части программы, издержки, возникающие в случае возврата, просто
неприемлемы. Другой недостаток возврата заключается в том, что он может