Почему эта минимальная программа 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;
}
}