Что означает Backpatching?

что значит backpatching в смысле ? Проиллюстрируйте это простым примером.

7 ответов


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


на промежуточном этапе генерации кода компилятора нам часто нужно выполнять инструкции "перехода" в места в коде, которые еще не существуют. Для работы с такими случаями для этой инструкции вставляется метка назначения. Нетерминальный маркер в производственном правиле вызывает семантическое действие.


Backpaching-это процесс оставления пустых записей для инструкции goto, где целевой адрес не указан в прямой передаче в первом проходе и заполнение этих неизвестных во втором проходе.


Backpatching: Определение синтаксиса может быть реализовано в двух или более проходах (у нас есть как синтезированные атрибуты, так и унаследованные атрибуты).

сначала постройте дерево.

прогулка по дереву в глубине-первый порядок.

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

Backpatching-это техника, чтобы обойти это проблема. Создание инструкций ветви с пустыми целями Когда цель известна, заполните метку инструкции ветви (backpatching).


некоторые операторы, такие как условные операторы, while и т. д. будет представлен как куча синтаксиса" if "и" goto " при генерации промежуточного кода. Проблема в том, что эти инструкции "goto" не имеют действительная ссылка в начале (когда компилятор начинает читать исходный код строка за строкой-A. K. A 1-й проход). Но, прочитав весь исходный код в первый раз,метки и ссылки эти "Гото" указывают, определяются.

проблема в том, что мы можем сделать компилятор способным заполнить X в операторах "goto X" за один проход или нет? Ответ-да.

Если мы не используем backpatching, то это может быть достигано анализом 2 проходов на исходном коде. Но, backpatching позволяет нам создавать и удерживать отдельным списком который предназначен исключительно для операторов" goto". Поскольку это делается только за один проход, первый проход не заполняется X в операторах "goto X", потому что комиплер не знает где X на первый взгляд. Но, это делает магазины X в этом эксклюзивном списке и после прохождения всего кода и нахождения этого X на X заменяется этим адресом или ссылкой.


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


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

Это делается:

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