2016-04-27 8 views
1

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 
} 

を、それはあなたの問題を修正する必要があります属しどこに変数iの宣言を移動。

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

     return; 
    } 
} 
+0

誰かがそれを探している場合、PDFのスライド26。 –

+0

明確にするには、すべてのローカル変数宣言がbeforeステートメントになる必要があるという問題があります。 PDFのSlide 26に、コードを書き込む必要がある順序が示されています。 Jackがそのように構成されている理由は、コンパイラの後続の書き込みをできるだけ簡単にするためです。 –

関連する問題