RB
чтобы потом на нём написать свой же компилятор
Size: a a a
RB
RB
PS
x = 1То необходимо переименовать соответствующие переменные (одно из древнейших и очень мощных компиляторных преобразований).
y = x + 2
x = 4
x = 1Вот, теперь у нас снова код по канонам ФП. Но что делать с ветвлениями?
y = x + 2
x1 = 4
x = 1Пробуем заняться переименованиями.
if (y > 2) {
x = x + 1
} else {
x = y
}
z = x
x = 1Вот тут phi-функция и нужна, она "знает", откуда именно пришло управление в данный момент. То есть нужна она именно на этапе слияния потоков управления, когда возникает неоднозначность с выбором имен (здесь для двух блоков -- if и else).
if (y > 2) {
x1 = x + 1
} else {
x2 = y
}
z = x // x1 или x2?
RB
M
x = 1То необходимо переименовать соответствующие переменные (одно из древнейших и очень мощных компиляторных преобразований).
y = x + 2
x = 4
x = 1Вот, теперь у нас снова код по канонам ФП. Но что делать с ветвлениями?
y = x + 2
x1 = 4
x = 1Пробуем заняться переименованиями.
if (y > 2) {
x = x + 1
} else {
x = y
}
z = x
x = 1Вот тут phi-функция и нужна, она "знает", откуда именно пришло управление в данный момент. То есть нужна она именно на этапе слияния потоков управления, когда возникает неоднозначность с выбором имен (здесь для двух блоков -- if и else).
if (y > 2) {
x1 = x + 1
} else {
x2 = y
}
z = x // x1 или x2?
PS
M
PS
RB
RB
RB
A
PS
A
SM
PS
A
PS
PS
A