Я занимаюсь некоторыми исследованиями в этой теме и не нашел хороших конкретных ответов. Скажем, у вас есть эти выражения в коде:Как компилятор изменяет имена переменных?
B = 2
…
B = B + 5
…
B = J + B
…
(Это очень простые примеры, я знаю, что они не являются реалистичными)
B
имеет много различных значений на протяжении этих строк. В первой строке это 2
, позже он становится 7
, а более поздним - 7 + J
. Компилятор должен будет отслеживать эти разные значения для B
, поэтому одним из способов является их переименование. Например, когда B
переопределено как B = B+5
, его можно изменить на B1 = B+5
. Последнее переопределение тогда будет выглядеть как B2 = J+B1
.
Мотивация этой идеи связана с оптимизирующей программой, которую я создаю. Это связано с заменой переменных выражениями, с которыми они связаны. Однако, если переменная переопределена, символ «B» может означать сразу несколько вещей. Метод, который я использую для отслеживания вещей, - это то, что я описал выше, переопределение имен переменных.
Это вообще не то, как работает компилятор? Есть ли имя для этого?
Я пытаюсь как можно больше узнать об этом процессе компилятора, переопределяющего переменные в случае переопределения переменных.
Если это помогает, я считаю, что это будет сделано на этапе предварительной обработки компиляции, и я считаю, что это аналогичная концепция для макроразложения.
EDIT: Я добавил немного больше контекста к вопросу.
Этот вопрос относится к любому языку программирования? как C#, C++, VBA, VB.Net и т. д.? если это так, укажите для этого тег. Если нет, вы бы не получили много ответов. Более того, довольно рискованно, что ваш вопрос будет закрыт, поскольку он не совсем соответствует стандартам SO ... –
Я предполагаю, что я ищу любой компилятор, который делает это, а не какой-либо конкретный язык. Я ищу используемую концепцию, а не ее конкретное использование. –
, на мой взгляд, каждый компилятор меняет/заменяет предыдущее значение переменной новым, не сохраняя никаких ссылок/дорожек на предыдущее значение (или способ его вычисления на любом более раннем этапе). Это связано с эффективностью процесса компиляции. Задача программистов - отслеживать все этапы изменения B, а не компилятор. –