Что такое Backpatching?
Что значит backpatching
имею в виду? Пожалуйста, проиллюстрируйте простым примером.
7 ответов
Обратное исправление обычно относится к процессу разрешения прямых ветвей, которые были установлены в коде, например, в операторах "если", когда значение цели становится известным, например, когда встречается закрывающая скобка или совпадающее "другое".
На промежуточной стадии генерации кода компилятора нам часто нужно выполнять команды "перехода" в те места в коде, которые еще не существуют. Чтобы иметь дело с этим типом случаев, целевая метка вставлена для этой инструкции. Нетерминал маркера в производственном правиле вызывает выбор семантического действия.
Некоторые операторы, такие как условные операторы while и т. Д., Будут представлены в виде набора синтаксиса "if" и "goto" при создании промежуточного кода. Проблема заключается в том, что эти инструкции "goto" не имеют действительной ссылки в начале (когда компилятор начинает читать исходный код построчно - 1-й проход AKA). Но, после прочтения всего исходного кода в первый раз, метки и ссылки, на которые указывают эти "переходы", определены.
Проблема в том, что мы можем сделать компилятор способным заполнять X в выражениях "goto X" за один проход или нет? Ответ - да.
Если мы не используем backpatching, это может быть достигнуто с помощью двухпроходного анализа исходного кода. Но создание резервных копий позволяет нам создавать и хранить отдельный список, который предназначен исключительно для операторов "goto". Поскольку это делается только за один проход, первый проход не заполнит X в выражениях "goto X", потому что компилятор не знает, где X на первый взгляд. Но он сохраняет X в этом эксклюзивном списке и, пройдя весь код и обнаружив, что X, X заменяется этим адресом или ссылкой.
Backpaching - это процесс оставления пустых записей для инструкции goto, где целевой адрес неизвестен при прямой передаче в первом проходе, и заполнение этих неизвестных во втором проходе.
Backpatching: Синтаксически направленное определение может быть реализовано в два или более проходов (у нас есть как синтезированные атрибуты, так и унаследованные атрибуты).
Построить дерево первым.
Пройдите по дереву в порядке глубины.
Основная сложность генерации кода за один проход состоит в том, что мы можем не знать цель ветвления, когда генерируем код для потока управляющих операторов.
Backpatching - техника, чтобы обойти эту проблему. Генерация инструкций ветвления с пустыми целями. Когда цель известна, заполните метку инструкций ветвления (обратный патчинг).
backpatching - это процесс, в котором поле операнда инструкции, содержащей прямую ссылку, изначально остается пустым. адрес прямого символа ссылки вводится в это поле, когда его определение встречается в программе.
Обратное исправление - это заполнение неопределенной информации меток с использованием соответствующего семантического выражения в процессе генерации кода.
Это делается путем:
- логическое выражение.
- поток контрольного заявления.