Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Синтаксический анализ сверху вниз.doc
Скачиваний:
5
Добавлен:
01.03.2025
Размер:
2 Мб
Скачать
☆

Генерация кода для операторов цикла while, repeat языка паскаль.

Закончим обсуждение генерации кода примером для условным циклов. Первым будет цикл WHILE.

WHILE (условие) DO

w_loop_XXX: ...;код вычисления ...;условия test bx,bx jz w_loop_exit_XXX

Здесь мы генерируем уникальную метку (реально только уникальный суффикс), которую мы ложим на стек вместе с ярлыком _WHILE_, заметим, что между метками располагается не показанный здесь код вычисления условия, который возвращает булево значение на вершине стека

... ;

jmp w_loop_XXX w_loop_exit_XXX:

Вынимаем из стека управляющих операторов ярлык _WHILE_, генерируем переход к началу циклаb метку окончания цикла

Аналогичный пример для REPEAT:

REPEAT ...

r_loop_XXX: ...

Здесь мы генерируем уникальную метку, которую мы ложим на стек вместе с ярлыком _REPEAT_

UNTIL(условие);

...;код вычисления ...;условия test bx,bx jnz r_loop_XXX

Вынимаем из стека управляющих операторов ярлык _WHILE_, генерируем код вычисления условия, который возвращает булево значение на вершине стека и генерируем переход к началу цикла

Аналогично, вряд ли требуются дополнительные комментарии и ясно, как поддерживаются вложенные операторы WHILE/REPEAT.