Исправление SZT, (текущая версия) :
а какой смысл запрещать частные случаи?
Для однородности. Вообще, если по хорошему, любой цикл реализуется через if (условие) goto метка
и никакие циклы попросту не нужны.
Но! Можно вводить какие угодно свои представления кода, и с ними работать, потом они все равно при компиляции во что-то там одинаковое развернутся компилятором. Это не принципиально.
Типа, написали мы код (представление 1)
(do_while
(
(//код)
(//код)
)
(a != x))
А развернется оно в что-то вроде (п. 2)
(##label)
(//код)
(//код)
(ifgoto (a != x) ##label)
но работать (трансформировать) можно при желании и 1, и 2 п.
Иными словами, можно вводить поверх (##label) (ifgoto (a != x) ##label)
свой синтаксический сахар, и с этим сахаром выполнять какие-то свои трансформации, а потом этот сахар можно «преобразовать» обратно в сырой вид с goto и прочим.
Можно взять некий код, и попробовать его развернуть, например
(for (:= i 0) (< i 1000) (+= i 1)
(
(//код, который не меняет значения i)
)
)
преобразовать к виду
(:= i 0)
(while (< i 1000)
(
(//код, который не меняет значения i)
(+= i 1)
(//код, который не меняет значения i)
(+= i 1)
(//код, который не меняет значения i)
(+= i 1)
(//код, который не меняет значения i)
(+= i 1)
(//код, который не меняет значения i)
(+= i 1)
)
)
Потом он уже преобразуется в какой-то там ifgoto
но работать можно и с таким представлением
Исправление SZT, :
а какой смысл запрещать частные случаи?
Для однородности. Вообще, если по хорошему, любой цикл реализуется через if (условие) goto метка
и никакие циклы попросту не нужны.
Но! Можно вводить какие угодно свои представления кода, и с ними работать, потом они все равно при компиляции во что-то там одинаковое развернутся компилятором. Это не принципиально.
Типа, написали мы код (представление 1)
(do_while
(
(//код)
(//код)
)
(a != x))
А развернется оно в что-то вроде (п. 2)
(##label)
(//код)
(//код)
(ifgoto (a != x) ##label)
но работать (трансформировать) можно при желании и 1, и 2 п.
Иными словами, можно вводить поверх (##label) (ifgoto (a != x) ##label)
свой синтаксический сахар, и с этим сахаром выполнять какие-то свои трансформации, а потом этот сахар можно «преобразовать» обратно в сырой вид с goto и прочим.
Можно взять некий код, и попробовать его развернуть, например
(for (:= i 0) (< i 1000) (+= i 1)
(
(//код, который не меняет значения i)
)
)
преобразовать к виду
(while (< i 1000)
(
(//код, который не меняет значения i)
(+= i 1)
(//код, который не меняет значения i)
(+= i 1)
(//код, который не меняет значения i)
(+= i 1)
(//код, который не меняет значения i)
(+= i 1)
(//код, который не меняет значения i)
(+= i 1)
)
)
Потом он уже преобразуется в какой-то там ifgoto
но работать можно и с таким представлением
Исходная версия SZT, :
а какой смысл запрещать частные случаи?
Для однородности. Вообще, если по хорошему, любой цикл реализуется через if (условие) goto метка
и никакие циклы попросту не нужны.
Но! Можно вводить какие угодно свои представления кода, и с ними работать, потом они все равно при компиляции во что-то там одинаковое развернутся компилятором. Это не принципиально.
Типа, написали мы код (представление 1)
(do_while
(
(//код)
(//код)
)
(a != x))
А развернется оно в что-то вроде (п. 2)
(##label)
(//код)
(//код)
(ifgoto (a != x) ##label)
но работать (трансформировать) можно при желании и 1, и 2 п.
Иными словами, можно вводить поверх (##label) (ifgoto (a != x) ##label)
свой синтаксический сахар, и с этим сахаром выполнять какие-то свои трансформации, а потом этот сахар можно «преобразовать» обратно в сырой вид с goto и прочим.
Можно взять некий код, и попробовать его развернуть, например
(for (:= i 0) (< i 1000) (+= i 1)
(
(//код, который не меняет значения i)
)
)
преобразовать к виду
(while (< i 1000)
(
(//код, который не меняет значения i)
(+= i 1)
(//код, который не меняет значения i)
(+= i 1)
(//код, который не меняет значения i)
(+= i 1)
(//код, который не меняет значения i)
(+= i 1)
(//код, который не меняет значения i)
(+= i 1)
)
)
Потом он уже преобразуется в какой-то там (##label) (ifgoto (a != x) ##label)
но работать можно и с таким представлением