.
This commit is contained in:
Executable
+38
@@ -0,0 +1,38 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/10/ArrayTest/Main.jack
|
||||
|
||||
// (identical to projects/09/Average/Main.jack)
|
||||
|
||||
/** Computes the average of a sequence of integers. */
|
||||
class Main {
|
||||
function void main() {
|
||||
var Array a;
|
||||
var int length;
|
||||
var int i, sum;
|
||||
|
||||
let length = Keyboard.readInt("HOW MANY NUMBERS? ");
|
||||
let a = Array.new(length);
|
||||
let i = 0;
|
||||
|
||||
while (i < length) {
|
||||
let a[i] = Keyboard.readInt("ENTER THE NEXT NUMBER: ");
|
||||
let i = i + 1;
|
||||
}
|
||||
|
||||
let i = 0;
|
||||
let sum = 0;
|
||||
|
||||
while (i < length) {
|
||||
let sum = sum + a[i];
|
||||
let i = i + 1;
|
||||
}
|
||||
|
||||
do Output.printString("THE AVERAGE IS: ");
|
||||
do Output.printInt(sum / length);
|
||||
do Output.println();
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
Executable
+286
@@ -0,0 +1,286 @@
|
||||
<class>
|
||||
<keyword> class </keyword>
|
||||
<identifier> Main </identifier>
|
||||
<symbol> { </symbol>
|
||||
<subroutineDec>
|
||||
<keyword> function </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> main </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<varDec>
|
||||
<keyword> var </keyword>
|
||||
<identifier> Array </identifier>
|
||||
<identifier> a </identifier>
|
||||
<symbol> ; </symbol>
|
||||
</varDec>
|
||||
<varDec>
|
||||
<keyword> var </keyword>
|
||||
<keyword> int </keyword>
|
||||
<identifier> length </identifier>
|
||||
<symbol> ; </symbol>
|
||||
</varDec>
|
||||
<varDec>
|
||||
<keyword> var </keyword>
|
||||
<keyword> int </keyword>
|
||||
<identifier> i </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> sum </identifier>
|
||||
<symbol> ; </symbol>
|
||||
</varDec>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> length </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> Keyboard </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> readInt </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<stringConstant> HOW MANY NUMBERS? </stringConstant>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> a </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> Array </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> new </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> length </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> i </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<integerConstant> 0 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<whileStatement>
|
||||
<keyword> while </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> i </identifier>
|
||||
</term>
|
||||
<symbol> < </symbol>
|
||||
<term>
|
||||
<identifier> length </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> a </identifier>
|
||||
<symbol> [ </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> i </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ] </symbol>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> Keyboard </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> readInt </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<stringConstant> ENTER THE NEXT NUMBER: </stringConstant>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> i </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> i </identifier>
|
||||
</term>
|
||||
<symbol> + </symbol>
|
||||
<term>
|
||||
<integerConstant> 1 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</whileStatement>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> i </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<integerConstant> 0 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> sum </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<integerConstant> 0 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<whileStatement>
|
||||
<keyword> while </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> i </identifier>
|
||||
</term>
|
||||
<symbol> < </symbol>
|
||||
<term>
|
||||
<identifier> length </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> sum </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> sum </identifier>
|
||||
</term>
|
||||
<symbol> + </symbol>
|
||||
<term>
|
||||
<identifier> a </identifier>
|
||||
<symbol> [ </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> i </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ] </symbol>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> i </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> i </identifier>
|
||||
</term>
|
||||
<symbol> + </symbol>
|
||||
<term>
|
||||
<integerConstant> 1 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</whileStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Output </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> printString </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<stringConstant> THE AVERAGE IS: </stringConstant>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Output </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> printInt </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> sum </identifier>
|
||||
</term>
|
||||
<symbol> / </symbol>
|
||||
<term>
|
||||
<identifier> length </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Output </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> println </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<symbol> } </symbol>
|
||||
</class>
|
||||
Executable
+142
@@ -0,0 +1,142 @@
|
||||
<tokens>
|
||||
<keyword> class </keyword>
|
||||
<identifier> Main </identifier>
|
||||
<symbol> { </symbol>
|
||||
<keyword> function </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> main </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> var </keyword>
|
||||
<identifier> Array </identifier>
|
||||
<identifier> a </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> var </keyword>
|
||||
<keyword> int </keyword>
|
||||
<identifier> length </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> var </keyword>
|
||||
<keyword> int </keyword>
|
||||
<identifier> i </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> sum </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> length </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> Keyboard </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> readInt </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<stringConstant> HOW MANY NUMBERS? </stringConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> a </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> Array </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> new </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> length </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> i </identifier>
|
||||
<symbol> = </symbol>
|
||||
<integerConstant> 0 </integerConstant>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> while </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> i </identifier>
|
||||
<symbol> < </symbol>
|
||||
<identifier> length </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> a </identifier>
|
||||
<symbol> [ </symbol>
|
||||
<identifier> i </identifier>
|
||||
<symbol> ] </symbol>
|
||||
<symbol> = </symbol>
|
||||
<identifier> Keyboard </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> readInt </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<stringConstant> ENTER THE NEXT NUMBER: </stringConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> i </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> i </identifier>
|
||||
<symbol> + </symbol>
|
||||
<integerConstant> 1 </integerConstant>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> i </identifier>
|
||||
<symbol> = </symbol>
|
||||
<integerConstant> 0 </integerConstant>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> sum </identifier>
|
||||
<symbol> = </symbol>
|
||||
<integerConstant> 0 </integerConstant>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> while </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> i </identifier>
|
||||
<symbol> < </symbol>
|
||||
<identifier> length </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> sum </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> sum </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> a </identifier>
|
||||
<symbol> [ </symbol>
|
||||
<identifier> i </identifier>
|
||||
<symbol> ] </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> i </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> i </identifier>
|
||||
<symbol> + </symbol>
|
||||
<integerConstant> 1 </integerConstant>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Output </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> printString </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<stringConstant> THE AVERAGE IS: </stringConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Output </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> printInt </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> sum </identifier>
|
||||
<symbol> / </symbol>
|
||||
<identifier> length </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Output </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> println </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<symbol> } </symbol>
|
||||
</tokens>
|
||||
Executable
+28
@@ -0,0 +1,28 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/10/ExpressionLessSquare/Main.jack
|
||||
|
||||
/** Expressionless version of projects/10/Square/Main.jack. */
|
||||
|
||||
class Main {
|
||||
static boolean test; // Added for testing -- there is no static keyword
|
||||
// in the Square files.
|
||||
|
||||
function void main() {
|
||||
var SquareGame game;
|
||||
let game = game;
|
||||
do game.run();
|
||||
do game.dispose();
|
||||
return;
|
||||
}
|
||||
|
||||
function void more() { // Added to test Jack syntax that is not used in
|
||||
var boolean b; // the Square files.
|
||||
if (b) {
|
||||
}
|
||||
else { // There is no else keyword in the Square files.
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
Executable
+114
@@ -0,0 +1,114 @@
|
||||
<class>
|
||||
<keyword> class </keyword>
|
||||
<identifier> Main </identifier>
|
||||
<symbol> { </symbol>
|
||||
<classVarDec>
|
||||
<keyword> static </keyword>
|
||||
<keyword> boolean </keyword>
|
||||
<identifier> test </identifier>
|
||||
<symbol> ; </symbol>
|
||||
</classVarDec>
|
||||
<subroutineDec>
|
||||
<keyword> function </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> main </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<varDec>
|
||||
<keyword> var </keyword>
|
||||
<identifier> SquareGame </identifier>
|
||||
<identifier> game </identifier>
|
||||
<symbol> ; </symbol>
|
||||
</varDec>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> game </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> game </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> game </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> run </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> game </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> dispose </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<subroutineDec>
|
||||
<keyword> function </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> more </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<varDec>
|
||||
<keyword> var </keyword>
|
||||
<keyword> boolean </keyword>
|
||||
<identifier> b </identifier>
|
||||
<symbol> ; </symbol>
|
||||
</varDec>
|
||||
<statements>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> b </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
<keyword> else </keyword>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<symbol> } </symbol>
|
||||
</class>
|
||||
Executable
+64
@@ -0,0 +1,64 @@
|
||||
<tokens>
|
||||
<keyword> class </keyword>
|
||||
<identifier> Main </identifier>
|
||||
<symbol> { </symbol>
|
||||
<keyword> static </keyword>
|
||||
<keyword> boolean </keyword>
|
||||
<identifier> test </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> function </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> main </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> var </keyword>
|
||||
<identifier> SquareGame </identifier>
|
||||
<identifier> game </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> game </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> game </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> game </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> run </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> game </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> dispose </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> function </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> more </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> var </keyword>
|
||||
<keyword> boolean </keyword>
|
||||
<identifier> b </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> b </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> else </keyword>
|
||||
<symbol> { </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<symbol> } </symbol>
|
||||
</tokens>
|
||||
Executable
+99
@@ -0,0 +1,99 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
/// File name: projects/10/ExpressionLessSquare/Square.jack
|
||||
|
||||
/** Expressionless version of projects/10/Square/Square.jack. */
|
||||
|
||||
class Square {
|
||||
|
||||
field int x, y;
|
||||
field int size;
|
||||
|
||||
constructor Square new(int Ax, int Ay, int Asize) {
|
||||
let x = Ax;
|
||||
let y = Ay;
|
||||
let size = Asize;
|
||||
do draw();
|
||||
return x;
|
||||
}
|
||||
|
||||
method void dispose() {
|
||||
do Memory.deAlloc(this);
|
||||
return;
|
||||
}
|
||||
|
||||
method void draw() {
|
||||
do Screen.setColor(x);
|
||||
do Screen.drawRectangle(x, y, x, y);
|
||||
return;
|
||||
}
|
||||
|
||||
method void erase() {
|
||||
do Screen.setColor(x);
|
||||
do Screen.drawRectangle(x, y, x, y);
|
||||
return;
|
||||
}
|
||||
|
||||
method void incSize() {
|
||||
if (x) {
|
||||
do erase();
|
||||
let size = size;
|
||||
do draw();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
method void decSize() {
|
||||
if (size) {
|
||||
do erase();
|
||||
let size = size;
|
||||
do draw();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
method void moveUp() {
|
||||
if (y) {
|
||||
do Screen.setColor(x);
|
||||
do Screen.drawRectangle(x, y, x, y);
|
||||
let y = y;
|
||||
do Screen.setColor(x);
|
||||
do Screen.drawRectangle(x, y, x, y);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
method void moveDown() {
|
||||
if (y) {
|
||||
do Screen.setColor(x);
|
||||
do Screen.drawRectangle(x, y, x, y);
|
||||
let y = y;
|
||||
do Screen.setColor(x);
|
||||
do Screen.drawRectangle(x, y, x, y);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
method void moveLeft() {
|
||||
if (x) {
|
||||
do Screen.setColor(x);
|
||||
do Screen.drawRectangle(x, y, x, y);
|
||||
let x = x;
|
||||
do Screen.setColor(x);
|
||||
do Screen.drawRectangle(x, y, x, y);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
method void moveRight() {
|
||||
if (x) {
|
||||
do Screen.setColor(x);
|
||||
do Screen.drawRectangle(x, y, x, y);
|
||||
let x = x;
|
||||
do Screen.setColor(x);
|
||||
do Screen.drawRectangle(x, y, x, y);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
Executable
+967
@@ -0,0 +1,967 @@
|
||||
<class>
|
||||
<keyword> class </keyword>
|
||||
<identifier> Square </identifier>
|
||||
<symbol> { </symbol>
|
||||
<classVarDec>
|
||||
<keyword> field </keyword>
|
||||
<keyword> int </keyword>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> ; </symbol>
|
||||
</classVarDec>
|
||||
<classVarDec>
|
||||
<keyword> field </keyword>
|
||||
<keyword> int </keyword>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ; </symbol>
|
||||
</classVarDec>
|
||||
<subroutineDec>
|
||||
<keyword> constructor </keyword>
|
||||
<identifier> Square </identifier>
|
||||
<identifier> new </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
<keyword> int </keyword>
|
||||
<identifier> Ax </identifier>
|
||||
<symbol> , </symbol>
|
||||
<keyword> int </keyword>
|
||||
<identifier> Ay </identifier>
|
||||
<symbol> , </symbol>
|
||||
<keyword> int </keyword>
|
||||
<identifier> Asize </identifier>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> x </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> Ax </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> y </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> Ay </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> size </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> Asize </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> draw </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<subroutineDec>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> dispose </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Memory </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> deAlloc </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<keyword> this </keyword>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<subroutineDec>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> draw </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<subroutineDec>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> erase </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<subroutineDec>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> incSize </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> erase </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> size </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> size </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> draw </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<subroutineDec>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> decSize </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> size </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> erase </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> size </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> size </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> draw </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<subroutineDec>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> moveUp </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> y </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<subroutineDec>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> moveDown </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> y </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<subroutineDec>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> moveLeft </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> x </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<subroutineDec>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> moveRight </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> x </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> x </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> y </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<symbol> } </symbol>
|
||||
</class>
|
||||
+60
@@ -0,0 +1,60 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/10/ExpressionLessSquare/SquareGame.jack
|
||||
|
||||
/** Expressionless version of projects/10/Square/SquareGame.jack. */
|
||||
|
||||
class SquareGame {
|
||||
field Square square;
|
||||
field int direction;
|
||||
|
||||
constructor SquareGame new() {
|
||||
let square = square;
|
||||
let direction = direction;
|
||||
return square;
|
||||
}
|
||||
|
||||
method void dispose() {
|
||||
do square.dispose();
|
||||
do Memory.deAlloc(square);
|
||||
return;
|
||||
}
|
||||
|
||||
method void moveSquare() {
|
||||
if (direction) { do square.moveUp(); }
|
||||
if (direction) { do square.moveDown(); }
|
||||
if (direction) { do square.moveLeft(); }
|
||||
if (direction) { do square.moveRight(); }
|
||||
do Sys.wait(direction);
|
||||
return;
|
||||
}
|
||||
|
||||
method void run() {
|
||||
var char key;
|
||||
var boolean exit;
|
||||
|
||||
let exit = key;
|
||||
while (exit) {
|
||||
while (key) {
|
||||
let key = key;
|
||||
do moveSquare();
|
||||
}
|
||||
|
||||
if (key) { let exit = exit; }
|
||||
if (key) { do square.decSize(); }
|
||||
if (key) { do square.incSize(); }
|
||||
if (key) { let direction = exit; }
|
||||
if (key) { let direction = key; }
|
||||
if (key) { let direction = square; }
|
||||
if (key) { let direction = direction; }
|
||||
|
||||
while (key) {
|
||||
let key = key;
|
||||
do moveSquare();
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
+544
@@ -0,0 +1,544 @@
|
||||
<class>
|
||||
<keyword> class </keyword>
|
||||
<identifier> SquareGame </identifier>
|
||||
<symbol> { </symbol>
|
||||
<classVarDec>
|
||||
<keyword> field </keyword>
|
||||
<identifier> Square </identifier>
|
||||
<identifier> square </identifier>
|
||||
<symbol> ; </symbol>
|
||||
</classVarDec>
|
||||
<classVarDec>
|
||||
<keyword> field </keyword>
|
||||
<keyword> int </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> ; </symbol>
|
||||
</classVarDec>
|
||||
<subroutineDec>
|
||||
<keyword> constructor </keyword>
|
||||
<identifier> SquareGame </identifier>
|
||||
<identifier> new </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> square </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> direction </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> square </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<subroutineDec>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> dispose </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> dispose </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Memory </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> deAlloc </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> square </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<subroutineDec>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> moveSquare </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> direction </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> moveUp </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> direction </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> moveDown </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> direction </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> moveLeft </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> direction </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> moveRight </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Sys </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> wait </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> direction </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<subroutineDec>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> run </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<varDec>
|
||||
<keyword> var </keyword>
|
||||
<keyword> char </keyword>
|
||||
<identifier> key </identifier>
|
||||
<symbol> ; </symbol>
|
||||
</varDec>
|
||||
<varDec>
|
||||
<keyword> var </keyword>
|
||||
<keyword> boolean </keyword>
|
||||
<identifier> exit </identifier>
|
||||
<symbol> ; </symbol>
|
||||
</varDec>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> exit </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<whileStatement>
|
||||
<keyword> while </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> exit </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<whileStatement>
|
||||
<keyword> while </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> key </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> moveSquare </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</whileStatement>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> exit </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> exit </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> decSize </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> incSize </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> exit </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> square </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> direction </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<whileStatement>
|
||||
<keyword> while </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> key </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> moveSquare </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</whileStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</whileStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<symbol> } </symbol>
|
||||
</class>
|
||||
+268
@@ -0,0 +1,268 @@
|
||||
<tokens>
|
||||
<keyword> class </keyword>
|
||||
<identifier> SquareGame </identifier>
|
||||
<symbol> { </symbol>
|
||||
<keyword> field </keyword>
|
||||
<identifier> Square </identifier>
|
||||
<identifier> square </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> field </keyword>
|
||||
<keyword> int </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> constructor </keyword>
|
||||
<identifier> SquareGame </identifier>
|
||||
<identifier> new </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> square </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> return </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> dispose </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> dispose </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Memory </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> deAlloc </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> square </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> moveSquare </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> moveUp </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> moveDown </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> moveLeft </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> moveRight </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Sys </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> wait </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> run </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> var </keyword>
|
||||
<keyword> char </keyword>
|
||||
<identifier> key </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> var </keyword>
|
||||
<keyword> boolean </keyword>
|
||||
<identifier> exit </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> exit </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> while </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> exit </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> while </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> key </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> moveSquare </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> exit </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> exit </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> decSize </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> incSize </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> exit </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> square </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> while </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> key </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> moveSquare </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<symbol> } </symbol>
|
||||
</tokens>
|
||||
Executable
+449
@@ -0,0 +1,449 @@
|
||||
<tokens>
|
||||
<keyword> class </keyword>
|
||||
<identifier> Square </identifier>
|
||||
<symbol> { </symbol>
|
||||
<keyword> field </keyword>
|
||||
<keyword> int </keyword>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> field </keyword>
|
||||
<keyword> int </keyword>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> constructor </keyword>
|
||||
<identifier> Square </identifier>
|
||||
<identifier> new </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<keyword> int </keyword>
|
||||
<identifier> Ax </identifier>
|
||||
<symbol> , </symbol>
|
||||
<keyword> int </keyword>
|
||||
<identifier> Ay </identifier>
|
||||
<symbol> , </symbol>
|
||||
<keyword> int </keyword>
|
||||
<identifier> Asize </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> x </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> Ax </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> y </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> Ay </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> size </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> Asize </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> draw </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> return </keyword>
|
||||
<identifier> x </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> dispose </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Memory </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> deAlloc </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<keyword> this </keyword>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> draw </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> erase </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> incSize </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> erase </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> size </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> draw </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> decSize </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> erase </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> size </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> draw </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> moveUp </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> y </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> moveDown </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> y </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> moveLeft </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> x </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> moveRight </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> x </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<symbol> } </symbol>
|
||||
</tokens>
|
||||
Executable
+410
@@ -0,0 +1,410 @@
|
||||
import re
|
||||
import os
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
class Tokenizer:
|
||||
|
||||
def __init__(self):
|
||||
self.i = 0
|
||||
self.file = ''
|
||||
self.symbols = ('(', ')', '[', ']', '}', '{', '>', '<', '=', '*', '+', '-', '/', '.', ';', ',', '&', '|',
|
||||
'~', '>', '<', '&')
|
||||
self.key_word = (
|
||||
'class', 'method', 'function', 'constructor', 'int', 'boolean', 'char', 'void', 'var', 'static', 'field',
|
||||
'let', 'do', 'if', 'else', 'while', 'return', 'true', 'false', 'null', 'this')
|
||||
self.token = ''
|
||||
|
||||
def token_type(self):
|
||||
if self.token is None or self.token == '':
|
||||
return None
|
||||
if self.token in self.key_word:
|
||||
return 'keyword'
|
||||
elif self.token[0] == '"':
|
||||
return 'stringConstant'
|
||||
elif re.match(r"\d+", self.token):
|
||||
return 'integerConstant'
|
||||
elif self.token in self.symbols:
|
||||
return 'symbol'
|
||||
else:
|
||||
return 'identifier'
|
||||
|
||||
def advance(self):
|
||||
token = ''
|
||||
i = self.i
|
||||
while i < len(self.file):
|
||||
if re.match(r'\s', self.file[i]):
|
||||
i = i + 1
|
||||
continue
|
||||
else:
|
||||
if self.file[i] in self.symbols:
|
||||
if self.file[i] == '>':
|
||||
self.token = '>'
|
||||
elif self.file[i] == '<':
|
||||
self.token = '<'
|
||||
elif self.file[i] == '&':
|
||||
self.token = '&'
|
||||
else:
|
||||
self.token = self.file[i]
|
||||
# self.token = self.file[i]
|
||||
self.i = i + 1
|
||||
return
|
||||
elif self.file[i] == '"':
|
||||
i += 1
|
||||
while self.file[i] != '"':
|
||||
token += self.file[i]
|
||||
i += 1
|
||||
self.i = i + 1
|
||||
self.token = '"' + token + '"'
|
||||
return
|
||||
else:
|
||||
while re.match(r'\w', self.file[i]):
|
||||
token += self.file[i]
|
||||
if i + 1 > len(self.file) - 1:
|
||||
break
|
||||
i += 1
|
||||
self.i = i
|
||||
self.token = token
|
||||
return
|
||||
|
||||
def clear_file(self, directory):
|
||||
with open(directory, "r") as my_file:
|
||||
txt = my_file.read()
|
||||
txt = re.sub(r"//.*", "", txt)
|
||||
txt = re.sub(r"/[*][*].*[*]/", "", txt)
|
||||
txt = re.sub(r"/[*][*][\w*\W*]*[*]/", "", txt)
|
||||
self.file = txt
|
||||
|
||||
|
||||
class CompilationEngine:
|
||||
def __init__(self):
|
||||
self.string = ''
|
||||
self.tab = 0
|
||||
|
||||
def write_token(self, tokenizer):
|
||||
if tokenizer.token_type() == 'stringConstant':
|
||||
self.string += ' ' * self.tab + '<' + tokenizer.token_type() + '> ' + tokenizer.token.strip('"') + ' </' \
|
||||
+ tokenizer.token_type() + '>\n'
|
||||
else:
|
||||
self.string += ' ' * self.tab + '<' + tokenizer.token_type() + '> ' + tokenizer.token + ' </' \
|
||||
+ tokenizer.token_type() + '>\n'
|
||||
|
||||
def compile_class(self, tokenizer):
|
||||
tokenizer.advance()
|
||||
self.string += '<class>\n' + ' ' * self.tab
|
||||
self.tab += 2
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
while tokenizer.token != '}':
|
||||
if tokenizer.token in ['static', 'field']:
|
||||
self.compile_class_var_dec(tokenizer)
|
||||
if tokenizer.token in ['constructor', 'function', 'method']:
|
||||
self.compile_subroutine(tokenizer)
|
||||
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.tab -= 2
|
||||
self.string += ' ' * self.tab + '</class>\n'
|
||||
|
||||
def compile_class_var_dec(self, tokenizer):
|
||||
self.string += ' ' * self.tab + '<classVarDec>\n'
|
||||
self.tab += 2
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
while tokenizer.token == ',':
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.tab -= 2
|
||||
self.string += ' ' * self.tab + '</classVarDec>\n'
|
||||
|
||||
def compile_subroutine(self, tokenizer):
|
||||
self.string += ' ' * self.tab + '<subroutineDec>\n'
|
||||
self.tab += 2
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.compile_parameter_list(tokenizer)
|
||||
self.string += ' ' * self.tab + '<subroutineBody>\n'
|
||||
self.tab += 2
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
while tokenizer.token != '}':
|
||||
if tokenizer.token == 'var':
|
||||
self.compile_var_dec(tokenizer)
|
||||
elif tokenizer.token in ['let', 'if', 'while', 'do', 'return']:
|
||||
self.compile_statements(tokenizer)
|
||||
self.write_token(tokenizer)
|
||||
self.tab -= 2
|
||||
self.string += ' ' * self.tab + '</subroutineBody>\n'
|
||||
tokenizer.advance()
|
||||
self.tab -= 2
|
||||
self.string += ' ' * self.tab + '</subroutineDec>\n'
|
||||
|
||||
def compile_parameter_list(self, tokenizer):
|
||||
self.string += ' ' * self.tab + '<parameterList>\n'
|
||||
self.tab += 2
|
||||
while tokenizer.token != ')':
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
while tokenizer.token == ',':
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.tab -= 2
|
||||
self.string += ' ' * self.tab + '</parameterList>\n'
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
|
||||
def compile_var_dec(self, tokenizer):
|
||||
self.string += ' ' * self.tab + '<varDec>\n'
|
||||
self.tab += 2
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
while tokenizer.token == ',':
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.tab -= 2
|
||||
self.string += ' ' * self.tab + '</varDec>\n'
|
||||
|
||||
def compile_statements(self, tokenizer):
|
||||
self.string += ' ' * self.tab + '<statements>\n'
|
||||
self.tab += 2
|
||||
while True:
|
||||
if tokenizer.token == 'let':
|
||||
self.compile_let(tokenizer)
|
||||
elif tokenizer.token == 'if':
|
||||
self.compile_if(tokenizer)
|
||||
elif tokenizer.token == 'while':
|
||||
self.compile_while(tokenizer)
|
||||
elif tokenizer.token == 'do':
|
||||
self.compile_do(tokenizer)
|
||||
elif tokenizer.token == 'return':
|
||||
self.compile_return(tokenizer)
|
||||
else:
|
||||
self.tab -= 2
|
||||
self.string += ' ' * self.tab + '</statements>\n'
|
||||
break
|
||||
|
||||
def compile_do(self, tokenizer):
|
||||
self.string += ' ' * self.tab + '<doStatement>\n'
|
||||
self.tab += 2
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
if tokenizer.token == '(':
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.compile_expression_list(tokenizer)
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
elif tokenizer.token == '.':
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.compile_expression_list(tokenizer)
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.tab -= 2
|
||||
self.string += ' ' * self.tab + '</doStatement>\n'
|
||||
|
||||
def compile_let(self, tokenizer):
|
||||
self.string += ' ' * self.tab + '<letStatement>\n'
|
||||
self.tab += 2
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
if tokenizer.token == '[':
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.compile_expression(tokenizer)
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.compile_expression(tokenizer)
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.tab -= 2
|
||||
self.string += ' ' * self.tab + '</letStatement>\n'
|
||||
|
||||
def compile_while(self, tokenizer):
|
||||
self.string += ' ' * self.tab + '<whileStatement>\n'
|
||||
self.tab += 2
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.compile_expression(tokenizer)
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.compile_statements(tokenizer)
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.tab -= 2
|
||||
self.string += ' ' * self.tab + '</whileStatement>\n'
|
||||
|
||||
def compile_return(self, tokenizer):
|
||||
self.string += ' ' * self.tab + '<returnStatement>\n'
|
||||
self.tab += 2
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
if tokenizer.token != ';':
|
||||
self.compile_expression(tokenizer)
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.tab -= 2
|
||||
self.string += ' ' * self.tab + '</returnStatement>\n'
|
||||
|
||||
def compile_if(self, tokenizer):
|
||||
self.string += ' ' * self.tab + '<ifStatement>\n'
|
||||
self.tab += 2
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.compile_expression(tokenizer)
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.compile_statements(tokenizer)
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
while tokenizer.token == 'else':
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.compile_statements(tokenizer)
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.tab -= 2
|
||||
self.string += ' ' * self.tab + '</ifStatement>\n'
|
||||
|
||||
def compile_expression(self, tokenizer):
|
||||
if tokenizer.token in ['(', '~', '-'] or tokenizer.token_type() != 'symbol':
|
||||
self.string += ' ' * self.tab + '<expression>\n'
|
||||
self.tab += 2
|
||||
self.compile_term(tokenizer)
|
||||
while tokenizer.token in ['+', '-', '*', '/', '&', '|', '<', '>', '=']:
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.compile_term(tokenizer)
|
||||
self.tab -= 2
|
||||
self.string += ' ' * self.tab + '</expression>\n'
|
||||
|
||||
def compile_term(self, tokenizer):
|
||||
if tokenizer.token == '(':
|
||||
self.string += ' ' * self.tab + '<term>\n'
|
||||
self.tab += 2
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.compile_expression(tokenizer)
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.tab -= 2
|
||||
self.string += ' ' * self.tab + '</term>\n'
|
||||
elif tokenizer.token in ['~', '-']:
|
||||
self.string += ' ' * self.tab + '<term>\n'
|
||||
self.tab += 2
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.compile_term(tokenizer)
|
||||
self.tab -= 2
|
||||
self.string += ' ' * self.tab + '</term>\n'
|
||||
elif tokenizer.token_type() != 'symbol':
|
||||
self.string += ' ' * self.tab + '<term>\n'
|
||||
self.tab += 2
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
if tokenizer.token == '[':
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.compile_expression(tokenizer)
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.tab -= 2
|
||||
self.string += ' ' * self.tab + '</term>\n'
|
||||
elif tokenizer.token == '(':
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.compile_expression_list(tokenizer)
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.tab -= 2
|
||||
self.string += ' ' * self.tab + '</term>\n'
|
||||
elif tokenizer.token == '.':
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.compile_expression_list(tokenizer)
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.tab -= 2
|
||||
self.string += ' ' * self.tab + '</term>\n'
|
||||
else:
|
||||
self.tab -= 2
|
||||
self.string += ' ' * self.tab + '</term>\n'
|
||||
|
||||
def compile_expression_list(self, tokenizer):
|
||||
self.string += ' ' * self.tab + '<expressionList>\n'
|
||||
self.tab += 2
|
||||
self.compile_expression(tokenizer)
|
||||
while tokenizer.token == ',':
|
||||
self.write_token(tokenizer)
|
||||
tokenizer.advance()
|
||||
self.compile_expression(tokenizer)
|
||||
self.tab -= 2
|
||||
self.string += ' ' * self.tab + '</expressionList>\n'
|
||||
|
||||
|
||||
path = os.getcwd()
|
||||
for root, dirs, files in os.walk(path, topdown=False):
|
||||
for name in files:
|
||||
if name[-4:] == 'jack':
|
||||
tok = Tokenizer()
|
||||
tok.clear_file(Path(root, name))
|
||||
ce = CompilationEngine()
|
||||
ce.compile_class(tok)
|
||||
with open(Path(root, name[:-4] + 'xml'), "w+") as my_xml:
|
||||
my_xml.write(ce.string)
|
||||
Executable
+36
@@ -0,0 +1,36 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/10/Square/Main.jack
|
||||
|
||||
// (derived from projects/09/Square/Main.jack, with testing additions)
|
||||
|
||||
/** Initializes a new Square Dance game and starts running it. */
|
||||
class Main {
|
||||
static boolean test; // Added for testing -- there is no static keyword
|
||||
// in the Square files.
|
||||
function void main() {
|
||||
var SquareGame game;
|
||||
let game = SquareGame.new();
|
||||
do game.run();
|
||||
do game.dispose();
|
||||
return;
|
||||
}
|
||||
|
||||
function void more() { // Added to test Jack syntax that is not used in
|
||||
var int i, j; // the Square files.
|
||||
var String s;
|
||||
var Array a;
|
||||
if (false) {
|
||||
let s = "string constant";
|
||||
let s = null;
|
||||
let a[1] = a[2];
|
||||
}
|
||||
else { // There is no else keyword in the Square files.
|
||||
let i = i * (-j);
|
||||
let j = j / (-2); // note: unary negate constant 2
|
||||
let i = i | j;
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
Executable
+244
@@ -0,0 +1,244 @@
|
||||
<class>
|
||||
<keyword> class </keyword>
|
||||
<identifier> Main </identifier>
|
||||
<symbol> { </symbol>
|
||||
<classVarDec>
|
||||
<keyword> static </keyword>
|
||||
<keyword> boolean </keyword>
|
||||
<identifier> test </identifier>
|
||||
<symbol> ; </symbol>
|
||||
</classVarDec>
|
||||
<subroutineDec>
|
||||
<keyword> function </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> main </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<varDec>
|
||||
<keyword> var </keyword>
|
||||
<identifier> SquareGame </identifier>
|
||||
<identifier> game </identifier>
|
||||
<symbol> ; </symbol>
|
||||
</varDec>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> game </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> SquareGame </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> new </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> game </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> run </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> game </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> dispose </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<subroutineDec>
|
||||
<keyword> function </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> more </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<varDec>
|
||||
<keyword> var </keyword>
|
||||
<keyword> int </keyword>
|
||||
<identifier> i </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> j </identifier>
|
||||
<symbol> ; </symbol>
|
||||
</varDec>
|
||||
<varDec>
|
||||
<keyword> var </keyword>
|
||||
<identifier> String </identifier>
|
||||
<identifier> s </identifier>
|
||||
<symbol> ; </symbol>
|
||||
</varDec>
|
||||
<varDec>
|
||||
<keyword> var </keyword>
|
||||
<identifier> Array </identifier>
|
||||
<identifier> a </identifier>
|
||||
<symbol> ; </symbol>
|
||||
</varDec>
|
||||
<statements>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<keyword> false </keyword>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> s </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<stringConstant> string constant </stringConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> s </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<keyword> null </keyword>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> a </identifier>
|
||||
<symbol> [ </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<integerConstant> 1 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ] </symbol>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> a </identifier>
|
||||
<symbol> [ </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<integerConstant> 2 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ] </symbol>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
<keyword> else </keyword>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> i </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> i </identifier>
|
||||
</term>
|
||||
<symbol> * </symbol>
|
||||
<term>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<symbol> - </symbol>
|
||||
<term>
|
||||
<identifier> j </identifier>
|
||||
</term>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> j </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> j </identifier>
|
||||
</term>
|
||||
<symbol> / </symbol>
|
||||
<term>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<symbol> - </symbol>
|
||||
<term>
|
||||
<integerConstant> 2 </integerConstant>
|
||||
</term>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> i </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> i </identifier>
|
||||
</term>
|
||||
<symbol> | </symbol>
|
||||
<term>
|
||||
<identifier> j </identifier>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<symbol> } </symbol>
|
||||
</class>
|
||||
Executable
+126
@@ -0,0 +1,126 @@
|
||||
<tokens>
|
||||
<keyword> class </keyword>
|
||||
<identifier> Main </identifier>
|
||||
<symbol> { </symbol>
|
||||
<keyword> static </keyword>
|
||||
<keyword> boolean </keyword>
|
||||
<identifier> test </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> function </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> main </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> var </keyword>
|
||||
<identifier> SquareGame </identifier>
|
||||
<identifier> game </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> game </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> SquareGame </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> new </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> game </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> run </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> game </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> dispose </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> function </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> more </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> var </keyword>
|
||||
<keyword> int </keyword>
|
||||
<identifier> i </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> j </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> var </keyword>
|
||||
<identifier> String </identifier>
|
||||
<identifier> s </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> var </keyword>
|
||||
<identifier> Array </identifier>
|
||||
<identifier> a </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<keyword> false </keyword>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> s </identifier>
|
||||
<symbol> = </symbol>
|
||||
<stringConstant> string constant </stringConstant>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> s </identifier>
|
||||
<symbol> = </symbol>
|
||||
<keyword> null </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> a </identifier>
|
||||
<symbol> [ </symbol>
|
||||
<integerConstant> 1 </integerConstant>
|
||||
<symbol> ] </symbol>
|
||||
<symbol> = </symbol>
|
||||
<identifier> a </identifier>
|
||||
<symbol> [ </symbol>
|
||||
<integerConstant> 2 </integerConstant>
|
||||
<symbol> ] </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> else </keyword>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> i </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> i </identifier>
|
||||
<symbol> * </symbol>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> - </symbol>
|
||||
<identifier> j </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> j </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> j </identifier>
|
||||
<symbol> / </symbol>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> - </symbol>
|
||||
<integerConstant> 2 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> i </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> i </identifier>
|
||||
<symbol> | </symbol>
|
||||
<identifier> j </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<symbol> } </symbol>
|
||||
</tokens>
|
||||
Executable
+110
@@ -0,0 +1,110 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/10/Square/Square.jack
|
||||
|
||||
// (same as projects/09/Square/Square.jack)
|
||||
|
||||
/** Implements a graphical square. */
|
||||
class Square {
|
||||
|
||||
field int x, y; // screen location of the square's top-left corner
|
||||
field int size; // length of this square, in pixels
|
||||
|
||||
/** Constructs a new square with a given location and size. */
|
||||
constructor Square new(int Ax, int Ay, int Asize) {
|
||||
let x = Ax;
|
||||
let y = Ay;
|
||||
let size = Asize;
|
||||
do draw();
|
||||
return this;
|
||||
}
|
||||
|
||||
/** Disposes this square. */
|
||||
method void dispose() {
|
||||
do Memory.deAlloc(this);
|
||||
return;
|
||||
}
|
||||
|
||||
/** Draws the square on the screen. */
|
||||
method void draw() {
|
||||
do Screen.setColor(true);
|
||||
do Screen.drawRectangle(x, y, x + size, y + size);
|
||||
return;
|
||||
}
|
||||
|
||||
/** Erases the square from the screen. */
|
||||
method void erase() {
|
||||
do Screen.setColor(false);
|
||||
do Screen.drawRectangle(x, y, x + size, y + size);
|
||||
return;
|
||||
}
|
||||
|
||||
/** Increments the square size by 2 pixels. */
|
||||
method void incSize() {
|
||||
if (((y + size) < 254) & ((x + size) < 510)) {
|
||||
do erase();
|
||||
let size = size + 2;
|
||||
do draw();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/** Decrements the square size by 2 pixels. */
|
||||
method void decSize() {
|
||||
if (size > 2) {
|
||||
do erase();
|
||||
let size = size - 2;
|
||||
do draw();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/** Moves the square up by 2 pixels. */
|
||||
method void moveUp() {
|
||||
if (y > 1) {
|
||||
do Screen.setColor(false);
|
||||
do Screen.drawRectangle(x, (y + size) - 1, x + size, y + size);
|
||||
let y = y - 2;
|
||||
do Screen.setColor(true);
|
||||
do Screen.drawRectangle(x, y, x + size, y + 1);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/** Moves the square down by 2 pixels. */
|
||||
method void moveDown() {
|
||||
if ((y + size) < 254) {
|
||||
do Screen.setColor(false);
|
||||
do Screen.drawRectangle(x, y, x + size, y + 1);
|
||||
let y = y + 2;
|
||||
do Screen.setColor(true);
|
||||
do Screen.drawRectangle(x, (y + size) - 1, x + size, y + size);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/** Moves the square left by 2 pixels. */
|
||||
method void moveLeft() {
|
||||
if (x > 1) {
|
||||
do Screen.setColor(false);
|
||||
do Screen.drawRectangle((x + size) - 1, y, x + size, y + size);
|
||||
let x = x - 2;
|
||||
do Screen.setColor(true);
|
||||
do Screen.drawRectangle(x, y, x + 1, y + size);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/** Moves the square right by 2 pixels. */
|
||||
method void moveRight() {
|
||||
if ((x + size) < 510) {
|
||||
do Screen.setColor(false);
|
||||
do Screen.drawRectangle(x, y, x + 1, y + size);
|
||||
let x = x + 2;
|
||||
do Screen.setColor(true);
|
||||
do Screen.drawRectangle((x + size) - 1, y, x + size, y + size);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
Executable
+1211
File diff suppressed because it is too large
Load Diff
Executable
+81
@@ -0,0 +1,81 @@
|
||||
// This file is part of www.nand2tetris.org
|
||||
// and the book "The Elements of Computing Systems"
|
||||
// by Nisan and Schocken, MIT Press.
|
||||
// File name: projects/10/Square/SquareGame.jack
|
||||
|
||||
// (same as projects/09/Square/SquareGame.jack)
|
||||
|
||||
/**
|
||||
* Implements the Square Dance game.
|
||||
* This simple game allows the user to move a black square around
|
||||
* the screen, and change the square's size during the movement.
|
||||
* When the game starts, a square of 30 by 30 pixels is shown at the
|
||||
* top-left corner of the screen. The user controls the square as follows.
|
||||
* The 4 arrow keys are used to move the square up, down, left, and right.
|
||||
* The 'z' and 'x' keys are used, respectively, to decrement and increment
|
||||
* the square's size. The 'q' key is used to quit the game.
|
||||
*/
|
||||
|
||||
class SquareGame {
|
||||
field Square square; // the square of this game
|
||||
field int direction; // the square's current direction:
|
||||
// 0=none, 1=up, 2=down, 3=left, 4=right
|
||||
|
||||
/** Constructs a new Square Game. */
|
||||
constructor SquareGame new() {
|
||||
// Creates a 30 by 30 pixels square and positions it at the top-left
|
||||
// of the screen.
|
||||
let square = Square.new(0, 0, 30);
|
||||
let direction = 0; // initial state is no movement
|
||||
return this;
|
||||
}
|
||||
|
||||
/** Disposes this game. */
|
||||
method void dispose() {
|
||||
do square.dispose();
|
||||
do Memory.deAlloc(this);
|
||||
return;
|
||||
}
|
||||
|
||||
/** Moves the square in the current direction. */
|
||||
method void moveSquare() {
|
||||
if (direction = 1) { do square.moveUp(); }
|
||||
if (direction = 2) { do square.moveDown(); }
|
||||
if (direction = 3) { do square.moveLeft(); }
|
||||
if (direction = 4) { do square.moveRight(); }
|
||||
do Sys.wait(5); // delays the next movement
|
||||
return;
|
||||
}
|
||||
|
||||
/** Runs the game: handles the user's inputs and moves the square accordingly */
|
||||
method void run() {
|
||||
var char key; // the key currently pressed by the user
|
||||
var boolean exit;
|
||||
let exit = false;
|
||||
|
||||
while (~exit) {
|
||||
// waits for a key to be pressed
|
||||
while (key = 0) {
|
||||
let key = Keyboard.keyPressed();
|
||||
do moveSquare();
|
||||
}
|
||||
if (key = 81) { let exit = true; } // q key
|
||||
if (key = 90) { do square.decSize(); } // z key
|
||||
if (key = 88) { do square.incSize(); } // x key
|
||||
if (key = 131) { let direction = 1; } // up arrow
|
||||
if (key = 133) { let direction = 2; } // down arrow
|
||||
if (key = 130) { let direction = 3; } // left arrow
|
||||
if (key = 132) { let direction = 4; } // right arrow
|
||||
|
||||
// waits for the key to be released
|
||||
while (~(key = 0)) {
|
||||
let key = Keyboard.keyPressed();
|
||||
do moveSquare();
|
||||
}
|
||||
} // while
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Executable
+643
@@ -0,0 +1,643 @@
|
||||
<class>
|
||||
<keyword> class </keyword>
|
||||
<identifier> SquareGame </identifier>
|
||||
<symbol> { </symbol>
|
||||
<classVarDec>
|
||||
<keyword> field </keyword>
|
||||
<identifier> Square </identifier>
|
||||
<identifier> square </identifier>
|
||||
<symbol> ; </symbol>
|
||||
</classVarDec>
|
||||
<classVarDec>
|
||||
<keyword> field </keyword>
|
||||
<keyword> int </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> ; </symbol>
|
||||
</classVarDec>
|
||||
<subroutineDec>
|
||||
<keyword> constructor </keyword>
|
||||
<identifier> SquareGame </identifier>
|
||||
<identifier> new </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> Square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> new </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<integerConstant> 0 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<integerConstant> 0 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> , </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<integerConstant> 30 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<integerConstant> 0 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<expression>
|
||||
<term>
|
||||
<keyword> this </keyword>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<subroutineDec>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> dispose </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> dispose </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Memory </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> deAlloc </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<keyword> this </keyword>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<subroutineDec>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> moveSquare </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> direction </identifier>
|
||||
</term>
|
||||
<symbol> = </symbol>
|
||||
<term>
|
||||
<integerConstant> 1 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> moveUp </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> direction </identifier>
|
||||
</term>
|
||||
<symbol> = </symbol>
|
||||
<term>
|
||||
<integerConstant> 2 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> moveDown </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> direction </identifier>
|
||||
</term>
|
||||
<symbol> = </symbol>
|
||||
<term>
|
||||
<integerConstant> 3 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> moveLeft </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> direction </identifier>
|
||||
</term>
|
||||
<symbol> = </symbol>
|
||||
<term>
|
||||
<integerConstant> 4 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> moveRight </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Sys </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> wait </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
<expression>
|
||||
<term>
|
||||
<integerConstant> 5 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<subroutineDec>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> run </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<parameterList>
|
||||
</parameterList>
|
||||
<symbol> ) </symbol>
|
||||
<subroutineBody>
|
||||
<symbol> { </symbol>
|
||||
<varDec>
|
||||
<keyword> var </keyword>
|
||||
<keyword> char </keyword>
|
||||
<identifier> key </identifier>
|
||||
<symbol> ; </symbol>
|
||||
</varDec>
|
||||
<varDec>
|
||||
<keyword> var </keyword>
|
||||
<keyword> boolean </keyword>
|
||||
<identifier> exit </identifier>
|
||||
<symbol> ; </symbol>
|
||||
</varDec>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> exit </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<keyword> false </keyword>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<whileStatement>
|
||||
<keyword> while </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<symbol> ~ </symbol>
|
||||
<term>
|
||||
<identifier> exit </identifier>
|
||||
</term>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<whileStatement>
|
||||
<keyword> while </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
<symbol> = </symbol>
|
||||
<term>
|
||||
<integerConstant> 0 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> key </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> Keyboard </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> keyPressed </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> moveSquare </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</whileStatement>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
<symbol> = </symbol>
|
||||
<term>
|
||||
<integerConstant> 81 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> exit </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<keyword> true </keyword>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
<symbol> = </symbol>
|
||||
<term>
|
||||
<integerConstant> 90 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> decSize </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
<symbol> = </symbol>
|
||||
<term>
|
||||
<integerConstant> 88 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> incSize </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
<symbol> = </symbol>
|
||||
<term>
|
||||
<integerConstant> 131 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<integerConstant> 1 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
<symbol> = </symbol>
|
||||
<term>
|
||||
<integerConstant> 133 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<integerConstant> 2 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
<symbol> = </symbol>
|
||||
<term>
|
||||
<integerConstant> 130 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<integerConstant> 3 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<ifStatement>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
<symbol> = </symbol>
|
||||
<term>
|
||||
<integerConstant> 132 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<integerConstant> 4 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</ifStatement>
|
||||
<whileStatement>
|
||||
<keyword> while </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<symbol> ~ </symbol>
|
||||
<term>
|
||||
<symbol> ( </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> key </identifier>
|
||||
</term>
|
||||
<symbol> = </symbol>
|
||||
<term>
|
||||
<integerConstant> 0 </integerConstant>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
</term>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<statements>
|
||||
<letStatement>
|
||||
<keyword> let </keyword>
|
||||
<identifier> key </identifier>
|
||||
<symbol> = </symbol>
|
||||
<expression>
|
||||
<term>
|
||||
<identifier> Keyboard </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> keyPressed </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
</term>
|
||||
</expression>
|
||||
<symbol> ; </symbol>
|
||||
</letStatement>
|
||||
<doStatement>
|
||||
<keyword> do </keyword>
|
||||
<identifier> moveSquare </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<expressionList>
|
||||
</expressionList>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
</doStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</whileStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</whileStatement>
|
||||
<returnStatement>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
</returnStatement>
|
||||
</statements>
|
||||
<symbol> } </symbol>
|
||||
</subroutineBody>
|
||||
</subroutineDec>
|
||||
<symbol> } </symbol>
|
||||
</class>
|
||||
Executable
+315
@@ -0,0 +1,315 @@
|
||||
<tokens>
|
||||
<keyword> class </keyword>
|
||||
<identifier> SquareGame </identifier>
|
||||
<symbol> { </symbol>
|
||||
<keyword> field </keyword>
|
||||
<identifier> Square </identifier>
|
||||
<identifier> square </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> field </keyword>
|
||||
<keyword> int </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> constructor </keyword>
|
||||
<identifier> SquareGame </identifier>
|
||||
<identifier> new </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> Square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> new </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<integerConstant> 0 </integerConstant>
|
||||
<symbol> , </symbol>
|
||||
<integerConstant> 0 </integerConstant>
|
||||
<symbol> , </symbol>
|
||||
<integerConstant> 30 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<integerConstant> 0 </integerConstant>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> return </keyword>
|
||||
<keyword> this </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> dispose </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> dispose </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Memory </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> deAlloc </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<keyword> this </keyword>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> moveSquare </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<integerConstant> 1 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> moveUp </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<integerConstant> 2 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> moveDown </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<integerConstant> 3 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> moveLeft </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<integerConstant> 4 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> moveRight </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Sys </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> wait </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<integerConstant> 5 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> run </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> var </keyword>
|
||||
<keyword> char </keyword>
|
||||
<identifier> key </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> var </keyword>
|
||||
<keyword> boolean </keyword>
|
||||
<identifier> exit </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> exit </identifier>
|
||||
<symbol> = </symbol>
|
||||
<keyword> false </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> while </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ~ </symbol>
|
||||
<identifier> exit </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> while </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> = </symbol>
|
||||
<integerConstant> 0 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> key </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> Keyboard </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> keyPressed </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> moveSquare </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> = </symbol>
|
||||
<integerConstant> 81 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> exit </identifier>
|
||||
<symbol> = </symbol>
|
||||
<keyword> true </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> = </symbol>
|
||||
<integerConstant> 90 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> decSize </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> = </symbol>
|
||||
<integerConstant> 88 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> square </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> incSize </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> = </symbol>
|
||||
<integerConstant> 131 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<integerConstant> 1 </integerConstant>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> = </symbol>
|
||||
<integerConstant> 133 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<integerConstant> 2 </integerConstant>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> = </symbol>
|
||||
<integerConstant> 130 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<integerConstant> 3 </integerConstant>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> = </symbol>
|
||||
<integerConstant> 132 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> direction </identifier>
|
||||
<symbol> = </symbol>
|
||||
<integerConstant> 4 </integerConstant>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> while </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ~ </symbol>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> key </identifier>
|
||||
<symbol> = </symbol>
|
||||
<integerConstant> 0 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> key </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> Keyboard </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> keyPressed </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> moveSquare </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<symbol> } </symbol>
|
||||
</tokens>
|
||||
Executable
+561
@@ -0,0 +1,561 @@
|
||||
<tokens>
|
||||
<keyword> class </keyword>
|
||||
<identifier> Square </identifier>
|
||||
<symbol> { </symbol>
|
||||
<keyword> field </keyword>
|
||||
<keyword> int </keyword>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> field </keyword>
|
||||
<keyword> int </keyword>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> constructor </keyword>
|
||||
<identifier> Square </identifier>
|
||||
<identifier> new </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<keyword> int </keyword>
|
||||
<identifier> Ax </identifier>
|
||||
<symbol> , </symbol>
|
||||
<keyword> int </keyword>
|
||||
<identifier> Ay </identifier>
|
||||
<symbol> , </symbol>
|
||||
<keyword> int </keyword>
|
||||
<identifier> Asize </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> x </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> Ax </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> y </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> Ay </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> size </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> Asize </identifier>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> draw </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> return </keyword>
|
||||
<keyword> this </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> dispose </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Memory </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> deAlloc </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<keyword> this </keyword>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> draw </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<keyword> true </keyword>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> erase </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<keyword> false </keyword>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> incSize </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> < </symbol>
|
||||
<integerConstant> 254 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> & </symbol>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> < </symbol>
|
||||
<integerConstant> 510 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> erase </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> size </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> + </symbol>
|
||||
<integerConstant> 2 </integerConstant>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> draw </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> decSize </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> > </symbol>
|
||||
<integerConstant> 2 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> erase </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> size </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> - </symbol>
|
||||
<integerConstant> 2 </integerConstant>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> draw </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> moveUp </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> > </symbol>
|
||||
<integerConstant> 1 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<keyword> false </keyword>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> - </symbol>
|
||||
<integerConstant> 1 </integerConstant>
|
||||
<symbol> , </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> y </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> - </symbol>
|
||||
<integerConstant> 2 </integerConstant>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<keyword> true </keyword>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> + </symbol>
|
||||
<integerConstant> 1 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> moveDown </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> < </symbol>
|
||||
<integerConstant> 254 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<keyword> false </keyword>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> + </symbol>
|
||||
<integerConstant> 1 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> y </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> + </symbol>
|
||||
<integerConstant> 2 </integerConstant>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<keyword> true </keyword>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> - </symbol>
|
||||
<integerConstant> 1 </integerConstant>
|
||||
<symbol> , </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> moveLeft </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> > </symbol>
|
||||
<integerConstant> 1 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<keyword> false </keyword>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> - </symbol>
|
||||
<integerConstant> 1 </integerConstant>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> x </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> - </symbol>
|
||||
<integerConstant> 2 </integerConstant>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<keyword> true </keyword>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> + </symbol>
|
||||
<integerConstant> 1 </integerConstant>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> method </keyword>
|
||||
<keyword> void </keyword>
|
||||
<identifier> moveRight </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> if </keyword>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> < </symbol>
|
||||
<integerConstant> 510 </integerConstant>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> { </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<keyword> false </keyword>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> + </symbol>
|
||||
<integerConstant> 1 </integerConstant>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> let </keyword>
|
||||
<identifier> x </identifier>
|
||||
<symbol> = </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> + </symbol>
|
||||
<integerConstant> 2 </integerConstant>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> setColor </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<keyword> true </keyword>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<keyword> do </keyword>
|
||||
<identifier> Screen </identifier>
|
||||
<symbol> . </symbol>
|
||||
<identifier> drawRectangle </identifier>
|
||||
<symbol> ( </symbol>
|
||||
<symbol> ( </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> - </symbol>
|
||||
<integerConstant> 1 </integerConstant>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> x </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> , </symbol>
|
||||
<identifier> y </identifier>
|
||||
<symbol> + </symbol>
|
||||
<identifier> size </identifier>
|
||||
<symbol> ) </symbol>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<keyword> return </keyword>
|
||||
<symbol> ; </symbol>
|
||||
<symbol> } </symbol>
|
||||
<symbol> } </symbol>
|
||||
</tokens>
|
||||
Executable
+2
@@ -0,0 +1,2 @@
|
||||
python3
|
||||
debug
|
||||
Reference in New Issue
Block a user