Compiler errors 为什么';这个最小的Jack(nand2tetris)程序不能编译吗?
作为课程的一部分,我正在使用一种叫做的语言 这将编译并生成运行时预期的输出:Compiler errors 为什么';这个最小的Jack(nand2tetris)程序不能编译吗?,compiler-errors,nand2tetris,Compiler Errors,Nand2tetris,作为课程的一部分,我正在使用一种叫做的语言 这将编译并生成运行时预期的输出: class Main { function void main() { var Foo f; do f.doSomething(); return; } } class Foo { method void doSomething() { do Output.printString("Hello, world!");
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)
为什么增加一行会有不同?有些编程语言比其他语言更结构化。 对于允许声明变量的地方,Jack似乎非常严格 以下是您提供的Jack演示:
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;
}
}
PDF的幻灯片26,如果其他人正在搜索它。需要明确的是,所有局部变量声明都必须在语句之前。PDF的幻灯片26显示了编写代码的顺序。Jack如此结构化的原因是为了使编译器的后续编写尽可能简单。