Ich verwende eine Sprache namens Jack, als Teil der Nand2Tetris natürlich.Warum kompiliert dieses minimale Jack (nand2tetris) Programm nicht?
Dies kompiliert und erzeugt die Ausgabe Ich erwarte, dass bei der Ausführung:
class Main {
function void main() {
var Foo f;
do f.doSomething();
return;
}
}
class Foo {
method void doSomething() {
do Output.printString("Hello, world!");
return;
}
}
Aber wenn ich eine Zeile hinzufügen ...
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;
}
}
... Ich erhalte diesen Compiler-Fehler:
In Main.jack (line 6): In subroutine main: Expected statement(do, let, while, return, or if)
Warum macht die zusätzliche Leitung einen Unterschied?
Folie 26 der PDF-Datei, wenn noch jemand danach sucht. –
Um es klar zu stellen, das Problem ist, dass alle lokalen Variablen-Deklarationen vor Anweisungen kommen müssen. Folie 26 der PDF zeigt die Reihenfolge, in der der Code geschrieben werden muss. Der Grund, warum Jack so strukturiert ist, ist, das nachfolgende Schreiben des Compilers so einfach wie möglich zu machen. –