[10] Finishes compiler implementation
This commit is contained in:
parent
812c76e09a
commit
b0aa03980c
|
@ -77,9 +77,16 @@ class Engine:
|
|||
self.write(line, end="")
|
||||
|
||||
self.advance()
|
||||
for e in grammar:
|
||||
self.compile(e)
|
||||
|
||||
print(lookup_keys)
|
||||
print("grammar inside matchDict ")
|
||||
print(grammar)
|
||||
|
||||
# Grammar can be none
|
||||
if grammar:
|
||||
self.compile(grammar)
|
||||
|
||||
# TODO: Improve open and close for dicts
|
||||
if isinstance(el, Element):
|
||||
self.close(el)
|
||||
|
||||
|
@ -109,7 +116,7 @@ class Engine:
|
|||
self.advance()
|
||||
return True
|
||||
else:
|
||||
# print("%s != %s" % (current, expected))
|
||||
print("%s != %s" % (current, expected))
|
||||
return False
|
||||
|
||||
def open(self, el):
|
||||
|
@ -124,29 +131,37 @@ class Engine:
|
|||
If you set matchOnly = true, the cursor will not move forward
|
||||
If it is forced to move forward (LL1 grammar for eg,) it will raise an error instead
|
||||
"""
|
||||
def compile(self, thing, matchOnly = False):
|
||||
if isinstance(thing, Element):
|
||||
ret = self.compile(thing.grammar[0], True)
|
||||
if (matchOnly == False and ret) or thing.empty:
|
||||
self.open(thing)
|
||||
for e in thing.grammar:
|
||||
ret = self.compile(e)
|
||||
self.close(thing)
|
||||
return ret
|
||||
elif callable(thing):
|
||||
grammar = thing()
|
||||
return self.compile(grammar, matchOnly)
|
||||
else:
|
||||
grammar = thing
|
||||
grammarType = type(grammar)
|
||||
def compile(self, grammar, matchOnly = False):
|
||||
if callable(grammar):
|
||||
ret = self.compile(grammar(), matchOnly)
|
||||
elif isinstance(grammar, Element):
|
||||
ret = self.compile(grammar.grammar, True)
|
||||
|
||||
if grammarType == list:
|
||||
return self.ZeroOrMany(grammar, matchOnly)
|
||||
elif grammarType == dict:
|
||||
return self.MatchDict(grammar, matchOnly)
|
||||
elif grammarType == tuple:
|
||||
return self.ZeroOrOne(grammar, matchOnly)
|
||||
elif grammarType == Atom:
|
||||
return self.MatchAtom(grammar, matchOnly)
|
||||
if grammar.name == 'term':
|
||||
print(ret)
|
||||
print(self.atom())
|
||||
|
||||
if (matchOnly == False and ret) or grammar.empty:
|
||||
self.open(grammar)
|
||||
# Avoid useless compilation
|
||||
if ret:
|
||||
ret = self.compile(grammar.grammar)
|
||||
self.close(grammar)
|
||||
elif isinstance(grammar, Sequence):
|
||||
if matchOnly:
|
||||
ret = self.compile(grammar[0], True)
|
||||
else:
|
||||
raise Exception("Should not have reached here")
|
||||
for e in grammar:
|
||||
ret = self.compile(e)
|
||||
elif isinstance(grammar, list):
|
||||
ret = self.ZeroOrMany(grammar, matchOnly)
|
||||
elif isinstance(grammar,dict):
|
||||
ret = self.MatchDict(grammar, matchOnly)
|
||||
elif isinstance(grammar,tuple):
|
||||
ret = self.ZeroOrOne(grammar, matchOnly)
|
||||
elif isinstance(grammar,Atom):
|
||||
ret = self.MatchAtom(grammar, matchOnly)
|
||||
else:
|
||||
raise Exception("Invalid Grammar")
|
||||
|
||||
return ret
|
||||
|
|
|
@ -20,73 +20,109 @@ This is basically an attempt to translate Figure 10.5 from the book into
|
|||
a Python structure.
|
||||
|
||||
"""
|
||||
|
||||
class Sequence(list):
|
||||
def first(self):
|
||||
return self[0]
|
||||
|
||||
class Element:
|
||||
# Usually I avoid inverted boolean variable names, but this is much cleaner
|
||||
def __init__(self, name, grammar):
|
||||
assert(type(grammar)==list)
|
||||
# Since Any derives from list, this ought to work
|
||||
assert(isinstance(grammar, list) or isinstance(grammar, dict))
|
||||
self.name = name
|
||||
self.grammar = grammar
|
||||
self.empty = False
|
||||
|
||||
def first(self):
|
||||
if isinstance(self.grammar, list):
|
||||
return self.grammar[0]
|
||||
elif isinstance(self.grammar, dict):
|
||||
return list(self.grammar.keys())[0]
|
||||
|
||||
def __repr__(self):
|
||||
return self.name
|
||||
|
||||
CLASSVARDEC = Element('classVarDec', [
|
||||
CLASSVARDEC = Element('classVarDec', Sequence([
|
||||
# static|field type (, name)* ;
|
||||
Atom.STATIC | Atom.FIELD,
|
||||
Atom.INT | Atom.CHAR | Atom.BOOLEAN | Atom.IDENTIFIER,
|
||||
Atom.IDENTIFIER,
|
||||
# Zero or one of these
|
||||
[Atom.COMMA, Atom.IDENTIFIER],
|
||||
Atom.SEMICOLON
|
||||
])
|
||||
]))
|
||||
|
||||
VARDEC = Element('varDec', [Atom.VAR, Atom.INT | Atom.CHAR | Atom.BOOLEAN | Atom.IDENTIFIER, Atom.IDENTIFIER,
|
||||
VARDEC = Element('varDec', Sequence([
|
||||
Atom.VAR, Atom.INT | Atom.CHAR | Atom.BOOLEAN | Atom.IDENTIFIER, Atom.IDENTIFIER,
|
||||
# Zero or one of these
|
||||
[Atom.COMMA, Atom.IDENTIFIER],
|
||||
Atom.SEMICOLON
|
||||
])
|
||||
]))
|
||||
|
||||
# Since this is not a non-terminal, we can just write it as a constant
|
||||
# Since these are not a non-terminal, we can just write it as a constant
|
||||
OP = Atom.PLUS | Atom.MINUS | Atom.MUL | Atom.DIV | Atom.AND | Atom.OR | Atom.GT | Atom.LT | Atom.EQ
|
||||
UNARY_OP = Atom.NOT | Atom.MINUS
|
||||
CONSTANT = Atom.TRUE | Atom.FALSE|Atom.NULL|Atom.THIS
|
||||
CONSTANT = Atom.TRUE | Atom.FALSE | Atom.NULL | Atom.THIS
|
||||
""" Pseudo-element to help define subroutine declarations """
|
||||
RETURN_TYPES= Atom.INT | Atom.CHAR|Atom.BOOLEAN|Atom.IDENTIFIER|Atom.VOID
|
||||
RETURN_TYPES= Atom.INT | Atom.CHAR | Atom.BOOLEAN | Atom.IDENTIFIER | Atom.VOID
|
||||
|
||||
# TODO: This is missing the following:
|
||||
# var [expression]
|
||||
# subRoutineCall
|
||||
# (expressions in parenthes)
|
||||
# unaryOP TERM
|
||||
TERM = Element('term', [
|
||||
Atom.INTEGERCONSTANT | Atom.STRINGCONSTANT | Atom.TRUE | Atom.FALSE | Atom.NULL| Atom.THIS | Atom.IDENTIFIER
|
||||
])
|
||||
# This is a flattened version of the Term structure
|
||||
TERM = Element('term', {
|
||||
(Atom.INTEGERCONSTANT,): None,
|
||||
(Atom.STRINGCONSTANT,): None,
|
||||
(Atom.TRUE,): None,
|
||||
(Atom.FALSE,): None,
|
||||
(Atom.NULL,): None,
|
||||
(Atom.THIS,): None,
|
||||
# unaryOp TERM
|
||||
(Atom.NOT,): Sequence([lambda: TERM]),
|
||||
(Atom.MINUS,): Sequence([lambda: TERM]),
|
||||
# (expression)
|
||||
(Atom.PAREN_OPEN,): Sequence([lambda: EXPRESSION, Atom.PAREN_CLOSE]),
|
||||
(Atom.IDENTIFIER,): {
|
||||
# array lookup
|
||||
(Atom.SQUARE_OPEN,): Sequence([lambda: EXPRESSION, Atom.SQUARE_CLOSE]),
|
||||
# Subroutine call, but with class name
|
||||
(Atom.DOT,): Sequence([
|
||||
Atom.IDENTIFIER,
|
||||
Atom.PAREN_OPEN,
|
||||
lambda: EXPRESSIONLIST,
|
||||
Atom.PAREN_CLOSE
|
||||
]),
|
||||
# Subroutine call, but to same class
|
||||
(Atom.PAREN_OPEN,): Sequence([
|
||||
lambda: EXPRESSIONLIST,
|
||||
Atom.PAREN_CLOSE
|
||||
])
|
||||
}
|
||||
})
|
||||
|
||||
EXPRESSION = Element('expression', [TERM, [OP, TERM]])
|
||||
EXPRESSION = Element('expression', Sequence([TERM, [OP, TERM]]))
|
||||
|
||||
EXPRESSIONLIST = Element('expressionList', [(EXPRESSION, [Atom.COMMA, EXPRESSION])])
|
||||
EXPRESSIONLIST = Element('expressionList', Sequence([
|
||||
(EXPRESSION, [Atom.COMMA, EXPRESSION])
|
||||
]))
|
||||
|
||||
DO_STATEMENT = Element('doStatement', [{
|
||||
(Atom.IDENTIFIER, Atom.PAREN_OPEN): [
|
||||
EXPRESSIONLIST,
|
||||
Atom.PAREN_CLOSE,
|
||||
],
|
||||
(Atom.IDENTIFIER, Atom.DOT): [
|
||||
SUBROUTINE_CALL = [
|
||||
(Atom.IDENTIFIER, Atom.DOT),
|
||||
Atom.IDENTIFIER,
|
||||
Atom.PAREN_OPEN,
|
||||
EXPRESSIONLIST,
|
||||
Atom.PAREN_CLOSE
|
||||
]
|
||||
},Atom.SEMICOLON])
|
||||
]
|
||||
|
||||
LET_STATEMENT = Element('letStatement', [
|
||||
DO_STATEMENT = Element('doStatement', Sequence([SUBROUTINE_CALL,Atom.SEMICOLON]))
|
||||
|
||||
LET_STATEMENT = Element('letStatement', Sequence([
|
||||
Atom.IDENTIFIER,
|
||||
(Atom.SQUARE_OPEN, EXPRESSION, Atom.SQUARE_CLOSE),
|
||||
Atom.EQ,
|
||||
EXPRESSION,
|
||||
Atom.SEMICOLON
|
||||
])
|
||||
]))
|
||||
|
||||
IF_STATEMENT = Element('ifStatement', [
|
||||
IF_STATEMENT = Element('ifStatement', Sequence([
|
||||
Atom.PAREN_OPEN,
|
||||
EXPRESSION,
|
||||
Atom.PAREN_CLOSE,
|
||||
|
@ -95,18 +131,20 @@ IF_STATEMENT = Element('ifStatement', [
|
|||
Atom.BRACE_CLOSE,
|
||||
# This is the tricky one
|
||||
( Atom.ELSE, Atom.BRACE_OPEN, lambda:STATEMENTS, Atom.BRACE_CLOSE)
|
||||
])
|
||||
]))
|
||||
|
||||
WHILE_STATEMENT = Element('whileStatement', [
|
||||
WHILE_STATEMENT = Element('whileStatement', Sequence([
|
||||
Atom.PAREN_OPEN,
|
||||
EXPRESSION,
|
||||
Atom.PAREN_CLOSE,
|
||||
Atom.BRACE_OPEN,
|
||||
lambda: STATEMENTS,
|
||||
Atom.BRACE_CLOSE,
|
||||
])
|
||||
]))
|
||||
|
||||
RETURN_STATEMENT = Element('returnStatement', [(EXPRESSION), Atom.SEMICOLON])
|
||||
RETURN_STATEMENT = Element('returnStatement', Sequence([
|
||||
(EXPRESSION), Atom.SEMICOLON
|
||||
]))
|
||||
|
||||
# Just a constant, since this isn't a non-terminal
|
||||
STATEMENT = {
|
||||
|
@ -117,31 +155,32 @@ STATEMENT = {
|
|||
(Atom.RETURN,): RETURN_STATEMENT
|
||||
}
|
||||
|
||||
STATEMENTS = Element('statements', [[STATEMENT]])
|
||||
STATEMENTS = Element('statements', Sequence([[STATEMENT]]))
|
||||
|
||||
SUBROUTINE_BODY = Element('subroutineBody', [
|
||||
SUBROUTINE_BODY = Element('subroutineBody', Sequence([
|
||||
# One or more variable declarations
|
||||
# `var type varName (, varName)* ;`
|
||||
Atom.BRACE_OPEN,
|
||||
[VARDEC],
|
||||
STATEMENTS,
|
||||
Atom.BRACE_CLOSE
|
||||
])
|
||||
]))
|
||||
|
||||
# Parameter List =
|
||||
# (
|
||||
# (type varName) (, type varName)*
|
||||
# )?
|
||||
# we use tuples for zero OR one of a sequence
|
||||
PARAMETER_LIST = Element('parameterList', [(
|
||||
PARAMETER_LIST = Element('parameterList', Sequence([(
|
||||
Atom.INT | Atom.CHAR | Atom.BOOLEAN | Atom.IDENTIFIER,
|
||||
Atom.IDENTIFIER,
|
||||
# Zero or one of the following:
|
||||
[Atom.COMMA, Atom.INT | Atom.CHAR|Atom.BOOLEAN|Atom.IDENTIFIER, Atom.IDENTIFIER]
|
||||
)])
|
||||
)]))
|
||||
|
||||
EXPRESSIONLIST.empty = PARAMETER_LIST.empty = True
|
||||
|
||||
SUBROUTINEDEC = Element('subroutineDec', [
|
||||
SUBROUTINEDEC = Element('subroutineDec', Sequence([
|
||||
# (constructor | function | method) (void | type) subRoutineName '(' parameterList ')'
|
||||
# subroutineBody
|
||||
Atom.CONSTRUCTOR | Atom.FUNCTION | Atom.METHOD,
|
||||
|
@ -151,13 +190,13 @@ SUBROUTINEDEC = Element('subroutineDec', [
|
|||
PARAMETER_LIST,
|
||||
Atom.PAREN_CLOSE,
|
||||
SUBROUTINE_BODY,
|
||||
])
|
||||
]))
|
||||
|
||||
CLASS = Element('class', [
|
||||
CLASS = Element('class', Sequence([
|
||||
Atom.CLASS,
|
||||
Atom.IDENTIFIER,
|
||||
Atom.BRACE_OPEN,
|
||||
[CLASSVARDEC],
|
||||
[SUBROUTINEDEC],
|
||||
Atom.BRACE_CLOSE
|
||||
])
|
||||
]))
|
||||
|
|
|
@ -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>
|
|
@ -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> test </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>
|
File diff suppressed because it is too large
Load Diff
|
@ -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>
|
Loading…
Reference in New Issue