Под стэковую машину гораздо проще написать компилятор, особенно если не выдумать всякие продвинутые оптимизации.
А откуда берется множество DUP/DROP?
			
		|  | roboforum.ruТехнический форум по робототехнике. |  | 




function fib(@n)
{
    if (@n = 0) return 0;
    if (@n = 1) return 1;
    return fib(@n-1) + fib(@n-2);
}
function fib2(@n) : @n1, @n2, @tmp
{
    if (@n = 0) return 0;
    if (@n = 1) return 1;
    @n1 := 0;
    @n2 := 1;
    while (@n) {
        @tmp := @n2;
        @n2 := @n1 + @n2;
        @n1 := @tmp;
        @n := @n - 1;
    }
    return @n2;
}
   fib: L_LOAD 0
        CONST_0
        EQ
        BRF 9
        CONST_0
        RET_POP_0
     9: L_LOAD 0
        CONST_1
        EQ
        BRF 18
        CONST_1
        RET_POP_0
    18: L_LOAD 0
        CONST_1
        MINUS
        CALL fib
        L_LOAD 0
        CONST_2
        MINUS
        CALL fib
        PLUS
        RET_POP_0
  fib2: LOCALS 3
        L_LOAD 0
        CONST_0
        EQ
        BRF 46
        CONST_0
        RET_POP 3
    46: L_LOAD 0
        CONST_1
        EQ
        BRF 56
        CONST_1
        RET_POP 3
    56: CONST_0
        L_STORE 1
        CONST_1
        L_STORE 2
    62: L_LOAD 0
        BRF 91
        L_LOAD 2
        L_STORE 3
        L_LOAD 1
        L_LOAD 2
        PLUS
        L_STORE 2
        L_LOAD 3
        L_STORE 1
        L_LOAD 0
        CONST_1
        MINUS
        L_STORE 0
        BR 62
    91: L_LOAD 2
        RET_POP 3



Michael_K писал(а):входной язык не понравился

fib(n)
    if (n = 0) return 0
    if (n = 1) return 1
    return fib(n-1) + fib(n-2)
fib2(n) 
    if (n = 0) return 0
    if (n = 1) return 1
    n1 = 0
    n2 = 1
    while (n)
        tmp = n2
        n2 = n1 + n2
        n1 = tmp
        n = n - 1
    return n2


 ) были добавлены для упрощения компилятора на начальном этапе - это хинт компилятору, что перед ним - локальная переменная, глобальная или константа. Потом уберу
 ) были добавлены для упрощения компилятора на начальном этапе - это хинт компилятору, что перед ним - локальная переменная, глобальная или константа. Потом уберу
в самом языке - только копирующее присваивание.



def fib(n):
    if n == 0: return 0
    if n == 1: return 1
    return fib(n-1) + fib(n-2)
def fib2(n) 
    if n == 0: return 0
    if n == 1: return 1
    n1 = 0
    n2 = 1
    while n:
        tmp = n2
        n2 = n1 + n2
        n1 = tmp
        n = n - 1
    return n2


Michael_K писал(а):Мне кажется, что нужно думать о красоте и юзабилити...
(Ну вот такое у меня представление о том, как работает этот мир)

угу, а у брейнф*ка грамматика еще короче.



Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0