История изменений
Исправление quasimoto, (текущая версия) :
А ты какой ответ спрашиваешь?
Даже не знаю, например:
#include <cstddef>
enum op { halt = 0, pls, dbl };
size_t ev(size_t in, op code[]) {
for (size_t reg = in;; ++code)
switch (*code) {
case pls:
++reg;
break;
case dbl:
reg *= 2;
break;
case halt:
return reg;
}
}
int main() {
op code[] = { pls, dbl, pls, pls, dbl, dbl, halt };
return ev(1, code);
}
теперь вопрос — как нам получить ассемблер соответствующий ev? Ну -S. Ассемблер для { pls, dbl, pls, pls, dbl, dbl, halt } — любо петросянство про то что ev для любого аргумента возвращает свой собственный машинный код (какого звучит, а :)), либо нам надо пройтись руками по цепочке, делать switch и собрать нужный код руками. Ну то есть выбросить интерпретатор и написать компилятор (не путаем с превращением ev в транслятор из (size_t, op[]) в size_t — речь про (size_t, op[]) -> asm).
Исправление quasimoto, :
А ты какой ответ спрашиваешь?
Даже не знаю, например:
#include <cstddef>
enum op { halt = 0, pls, dbl };
size_t ev(size_t in, op code[]) {
size_t reg = in;
for (;; ++code)
switch (*code) {
case pls:
++reg;
break;
case dbl:
reg *= 2;
break;
case halt:
return reg;
}
}
int main() {
op code[] = { pls, dbl, pls, pls, dbl, dbl, halt };
return ev(1, code);
}
теперь вопрос — как нам получить ассемблер соответствующий ev? Ну -S. Ассемблер для { pls, dbl, pls, pls, dbl, dbl, halt } — любо петросянство про то что ev для любого аргумента возвращает свой собственный машинный код (какого звучит, а :)), либо нам надо пройтись руками по цепочке, делать switch и собрать нужный код руками. Ну то есть выбросить интерпретатор и написать компилятор (не путаем с превращением ev в транслятор из (size_t, op[]) в size_t — речь про (size_t, op[]) -> asm).
Исходная версия quasimoto, :
А ты какой ответ спрашиваешь?
Даже не знаю, например:
#include <stddef.h>
enum op { halt = 0, pls, dbl };
size_t ev(size_t in, op code[]) {
size_t reg = in;
for (;; ++code)
switch (*code) {
case pls:
++reg;
break;
case dbl:
reg *= 2;
break;
case halt:
return reg;
}
}
int main() {
op code[] = { pls, dbl, pls, pls, dbl, dbl, halt };
return ev(1, code);
}
теперь вопрос — как нам получить ассемблер соответствующий ev? Ну -S. Ассемблер для { pls, dbl, pls, pls, dbl, dbl, halt } — любо петросянство про то что ev для любого аргумента возвращает свой собственный машинный код (какого звучит, а :)), либо нам надо пройтись руками по цепочке, делать switch и собрать нужный код руками. Ну то есть выбросить интерпретатор и написать компилятор (не путаем с превращением ev в транслятор из (size_t, op[]) в size_t — речь про (size_t, op[]) -> asm).