Почему эта минимальная программа Jack (nand2tetris) не компилируется?

Я использую язык под названием Джек, как часть курса Nand2Tetris.

Это компилирует и производит вывод, который я ожидаю при запуске:

class Main {
    function void main() {
        var Foo f;
        do f.doSomething();
        return;
    }
}

class Foo {
    method void doSomething() {
        do Output.printString("Hello, world!");
        return;
    }
}

Но когда я добавляю строку...

class Main {
    function void main() {
        var Foo f;
        do f.doSomething();

        var int i; // doesn't seem to matter what's here, anything breaks it

        return;
    }
}

... я получаю эту ошибку компилятора:

В Main.jack (строка 6): В подпрограмме main: Ожидаемый оператор (do, let, while, return или if)

Почему дополнительная линия имеет значение?

1 ответ

Решение

Есть языки программирования, которые более структурированы, чем другие. Джек, кажется, очень строг, когда дело доходит до мест, где вам разрешено объявлять переменные.

После презентации Джек вы предоставили:

subroutine_type name (parameter-list) {
    local variable declarations
    statements
}

Перемещение декларации переменной i туда, где она должна быть, должно решить вашу проблему.

class Main {
    function void main() {
        var Foo f;
        var int i;
        do f.doSomething();

        return;
    }
} 
Другие вопросы по тегам