Я использую язык под названием Jack, как часть курса Nand2Tetris.Почему эта минимальная программа Jack (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;
}
}
... Я получаю эту ошибку при компиляции:
In Main.jack (line 6): In subroutine main: Expected statement(do, let, while, return, or if)
Почему дополнительная линия имеет значение?
Слайд 26 PDF, если кто-либо еще его ищет. –
Чтобы быть ясным, проблема заключается в том, что все объявления локальной переменной должны поступать перед операторами. В слайде 26 PDF показан порядок написания кода. Причина, по которой Джек настолько структурирован, заключается в том, чтобы сделать последующую запись компилятора максимально простой. –