Книга: Системное программное обеспечение. Лабораторный практикум
СУ-перевод для условных операторов
СУ-перевод для условных операторов
Для условных операторов генерация кода должна выполняться в следующем порядке:
1. Порождается блок кода№ 1, вычисляющий логическое выражение, находящееся между лексемами if (первая нижележащая вершина) и then (третья нижележащая вершина), – для этого должна быть рекурсивно вызвана функция порождения кода для второй нижележащей вершины.
2. Порождается команда условного перехода, которая передает управление в зависимости от результата вычисления логического выражения:
• в начало блока кода № 2, если логическое выражение имеет ненулевое значение;
• в начало блока кода № 3 (для полного условного оператора) или в конец оператора (для неполного условного оператора), если логическое выражение имеет нулевое значение.
3. Порождается блок кода № 2, соответствующий операциям после лексемы then (третья нижележащая вершина), – для этого должна быть рекурсивно вызвана функция порождения кода для четвертой нижележащей вершины.
4. Для полного условного оператора порождается команда безусловного перехода в конец оператора.
5. Для полного условного оператора порождается блок кода № 3, соответствующий операциям после лексемы else (пятая нижележащая вершина), – для этого должна быть рекурсивно вызвана функция порождения кода для шестой нижележащей вершины.
Схемы СУ-перевода для полного и неполного условных операторов представлены на рис. 4.1.
Рис. 4.1. Схемы СУ-перевода для условных операторов.
Для того чтобы реализовать эти схемы, необходимы два типа триад: триада условного перехода и триада безусловного перехода.
Эти два типа триад реализуются следующим образом:
• IF(<операнд1>,<операнд2>) – триада условного перехода;
• JMP(1,<операнд2>) – триада безусловного перехода.
У триады IF первый операнд может быть переменной, константой или ссылкой на другую триаду, второй операнд – всегда ссылка на другую триаду. Триада IF передает управление на триаду, указанную вторым операндом, если первый операнд равен нулю, иначе управление передается на следующую триаду.
У триады JMP первый операнд не имеет значения (для определенности он всегда будет равен 1), второй операнд – всегда ссылка на другую триаду. Триада JMP всегда передает управление на триаду, указанную вторым операндом.
- Перевод базы данных InterBase 6.x на 3-й диалект
- Можно ли при помощи горячих клавиш переводить компьютер в спящий режим?
- 4.3. Особенности перевода меню ресторанов, кафе, баров
- Использование операторов if для выбора вариантов
- Норберт Винер и его «Кибернетика» (от редактора перевода)
- 13.3. Динамический перевод сообщений программ
- 13.3.2. Перевод сообщений: gettext()
- 13.3.6. Тестирование переводов в персональном каталоге
- 13.3.8. Создание переводов
- Использование условных переменных
- Применение вложенных операторов from
- Порядок выполнения операторов