stackexchange не имеют больше тегов о тегах компилятора, поэтому я отправляю здесь этот вопрос.Анализ живой переменной, верно ли мое объяснение?
переменной х называется жить в заявлении Si в программе, если выполняются следующие три условия выполняются одновременно:
1. There exists a statement Sj that uses x
2. There is a path from Si to Sj in the flow
graph corresponding to the program
3. The path has no intervening assignment to x
including at Si and Sj
Переменные, которые живут как на в базовом блоке 2 и в заявлении в базовом блоке 3 приведенного выше диаграммы потока управления:
- р, з, и
- г, з, и
- г, и
- д, v
Я пытаюсь объяснить:
Как wikipedia говорит: «Просто сказано: переменная живая, если она содержит значение, которое может понадобиться в будущем».
Согласно определению, данному в вопросе, переменная является живой, если она используется в будущем перед любым новым назначением. Блок 2 имеет «r» и «v» как переменные. поскольку они используются в блоке 4 перед любым новым значением, полученным для них. Обратите внимание, что переменная 'u' не является живым в блоке 2, поскольку «u» назначается новое значение в блоке 1, прежде чем оно будет использоваться в блоке 3. Переменные «p», «s» и «q» также не живут в блоке 2 по той же причине. Блок 3 имеет только переменную «r» как переменную, так как каждой другой переменной перед использованием назначается новое значение.
Другое объяснение, как:
Только г.
p, s и u назначены в 1, и до этого их промежуточное использование не применяется. Следовательно, p, s и u не являются живыми как в 2, так и в 3. q назначается в 4 и, следовательно, не является живым как в обоих, так и в 2 и 3.
v живет в 3, но не в 2. Только r составляет 2 и 3.
Но официальный ключ GATE сказал как r, так и u.