ВУЗ:
Составители:
BP := true;
перейти к следующей лексеме;
while ( t = , ) and ( BP = true ) do
begin
перейти к следующей лексеме;
if t = ид then перейти к следующей
лексеме
else BP := false;
end; {while}
if BP = true then успешное завершение
else неудачное завершение;
end;
На рис. 4 графически представлен процесс грамматического разбора методом рекурсивного спуска
для предложения read. На фрагменте а) изображен вызов процедуры <ввод>, которая обнаружила лек-
семы read и ) во входном потоке (штриховая линия). На фрагменте б) процедура <ввод> вызывает про-
цедуру <список переменных> (сплошная линия), которая обработала лексему ид. На фрагменте в) про-
цедура <список переменных> закончила работу, передала управление процедуре <ввод> с признаком
успешного завершения; процедура <ввод> обработала входную лексему ). На этом анализ входного
предложения завершен.
ввод ввод
read )
список
пе
р
еменных
ввод
read )
cписок
переменных
)
ид
{a}
а)
б)
в)
read )
Рис. 4
Приведем еще один пример. Имеем предложение из исходной программы:
REZ := SUM DIV 100 – A * A
Представим алгоритмы разбора этого предложения методом рекурсивного спуска:
procedure <присваивание>
begin
BP := false;
if t = ид then
begin
перейти к следующей лексеме;
if t = := then
begin
перейти к следующей лексеме;
if <арифметическое выражение>
завершилось успешно then
Страницы
- « первая
- ‹ предыдущая
- …
- 9
- 10
- 11
- 12
- 13
- …
- следующая ›
- последняя »