2016-04-27 1 views
1

Я использую язык под названием 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)

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

ответ

1

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

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

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

Перемещение объявление переменной я туда, где она принадлежит должно решить вам проблему.

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

     return; 
    } 
} 
+0

Слайд 26 PDF, если кто-либо еще его ищет. –

+0

Чтобы быть ясным, проблема заключается в том, что все объявления локальной переменной должны поступать перед операторами. В слайде 26 PDF показан порядок написания кода. Причина, по которой Джек настолько структурирован, заключается в том, чтобы сделать последующую запись компилятора максимально простой. –