为什么这个最小的Jack(nand2tetris)程序不能编译?

时间:2016-04-27 09:09:06

标签: compiler-errors 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;
    }
}

...我得到了这个编译错误:

  

在Main.jack中(第6行):在子程序main中:预期语句(do,let,while,return或if)

为什么附加行有所作为?

1 个答案:

答案 0 :(得分:2)

有些编程语言比其他语言更有条理。 杰克在允许你声明变量的地方似乎非常严格。

按照杰克的介绍,您提供了:

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;
    }
}