Что такое 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 - это процесс, в котором поле операнда инструкции, содержащей прямую ссылку, изначально остается пустым. адрес прямого символа ссылки вводится в это поле, когда его определение встречается в программе.

Обратное исправление - это заполнение неопределенной информации меток с использованием соответствующего семантического выражения в процессе генерации кода.

Это делается путем:

  1. логическое выражение.
  2. поток контрольного заявления.