Реферат: Алгоритм нисходящего разбора. Нисходящие распознаватели
Рис 3. Стек после нисходящего разбора i+i*i
а) - синтаксическое дерево б) - стек после разбора
Поле SON используется для хранения ссылки на последнего (младше-
го) сына. Тогда поле BRO элемента, соответствующего этому сыну, укажет
на старшего брата. В качестве иллюстрации расмотрим изображенное на
рис .3 а) синтаксическое дерево для предложения i+i*i вышеописанной
грамматики. Состояние стека после окончания работы показано на рис.3 б).
Теперь у человека 2(S (2)) есть цель E; предполагается, что он в соотве-
тствии с синтаксическим деревом использует правило E ::= T+E. Таким
образом, ему для того, чтобы найти символы T,+,E потребуется три сына.
Значение поля S(2).SON=7, так что младшим сыном является человек, c
номером 7, цель которого E. Имя среднего сына - число 6, определяется
значением поля S(7).BRO; - цель этого сына - символ +. Имя старшего
сына находится в поле BRO человека 6 и равно 3.
Очевидно, что у нас имеется список сыновей каждого человека и
элементы этого списка связаны в стеке между собой. То есть стек в его
окончательном виде представляет собой внутреннюю форму синтаксического
дерева.
Рассмотрим теперь сам алгоритм нисходящего разбора. Для удобства
чтения разделим его на шесть поименованных частей.
1. НАЧАЛЬНАЯ УСТАНОВКА
S(1) := (Z,0,0,0,0); c:=1; v:=1; j:=1; переход на НОВЫЙ ЧЕЛОВЕК
(первое усыновление. Цель усыновления - начальный символ Z.)
2. НОВЫЙ ЧЕЛОВЕК
IF GOAL терминал THEN Новый человек изучает свою цель.
IF INPUT (j)=GOAL THEN Цель - терминал.
BEGIN j:=j+1; Если GOAL совпадает с символом из
GO TO УСПЕХ; предложения, человек закрывает этот
ELSE GO TO НЕУДАЧА символ и сообщает об успехе.