[10] Adds XML output support
This commit is contained in:
parent
8dedf23832
commit
c54e5ccaa4
|
@ -1,12 +1,15 @@
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
import re
|
import re
|
||||||
|
import sys
|
||||||
|
from html import escape
|
||||||
|
|
||||||
class Token(Enum):
|
class Token(Enum):
|
||||||
KEYWORD = 1
|
KEYWORD = 1
|
||||||
SYMBOL = 2
|
SYMBOL = 2
|
||||||
IDENTIFIER = 3
|
IDENTIFIER = 3
|
||||||
INT_CONST = 4
|
INTEGERCONSTANT = 4
|
||||||
STRING_CONST = 5
|
STRING_CONST = 5
|
||||||
|
UNKNOWN = 6
|
||||||
|
|
||||||
class Keyword(Enum):
|
class Keyword(Enum):
|
||||||
CLASS = 1
|
CLASS = 1
|
||||||
|
@ -37,16 +40,24 @@ class JackAnalyzer:
|
||||||
|
|
||||||
class JackTokenizer:
|
class JackTokenizer:
|
||||||
|
|
||||||
# KEYWORD_REGEXES='(class|constructor|function|method|field|static|var|int|char|boolean|void|true|false|null|this|let|do|if|else|while|return)'
|
|
||||||
|
|
||||||
# SYMBOL_REGEXES = [
|
|
||||||
# "{","}","\(","\)","]","["
|
|
||||||
# ]
|
|
||||||
|
|
||||||
""" Returns the type of the current token """
|
""" Returns the type of the current token """
|
||||||
def tokenType(self):
|
def tokenType(self):
|
||||||
|
t = self.current_token()
|
||||||
|
if t in ['class','constructor','function','method','field','static','var','int','char','boolean','void','true','false','null','this','let','do','if','else','while','return']:
|
||||||
|
return Token.KEYWORD
|
||||||
|
elif re.compile("(\(|\)|\[|\]|,|\+|-|;|<|>|=|~|&|{|}|\*|\/|\||\.)").match(t):
|
||||||
|
return Token.SYMBOL
|
||||||
|
elif re.compile("\d+").match(t):
|
||||||
|
return Token.INTEGERCONSTANT
|
||||||
|
elif re.compile("\".*\"").match(t):
|
||||||
|
return Token.STRING_CONST
|
||||||
|
else:
|
||||||
|
return Token.IDENTIFIER
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def printable_token(self):
|
||||||
|
return escape(self.current_token(), True)
|
||||||
|
|
||||||
""" Returns the character which is the current token """
|
""" Returns the character which is the current token """
|
||||||
def symbol(self):
|
def symbol(self):
|
||||||
if self.tokenType() != Token.SYMBOL:
|
if self.tokenType() != Token.SYMBOL:
|
||||||
|
@ -59,8 +70,8 @@ class JackTokenizer:
|
||||||
|
|
||||||
""" Returns the integer value of the current token """
|
""" Returns the integer value of the current token """
|
||||||
def intVal(self):
|
def intVal(self):
|
||||||
if self.tokenType() != Token.INT_CONST:
|
if self.tokenType() != Token.INTEGERCONSTANT:
|
||||||
raise RuntimeError("Should only be called when tokenType is INT_CONST")
|
raise RuntimeError("Should only be called when tokenType is INTEGERCONSTANT")
|
||||||
return int(self.token)
|
return int(self.token)
|
||||||
|
|
||||||
""" Returns a list of tokens for that line """
|
""" Returns a list of tokens for that line """
|
||||||
|
@ -102,25 +113,45 @@ class JackTokenizer:
|
||||||
if len(line) == 0:
|
if len(line) == 0:
|
||||||
return []
|
return []
|
||||||
else:
|
else:
|
||||||
regex = re.compile("(class|constructor|function|method|field|static|var|int|char|boolean|void|true|false|null|this|let|do|if|else|while|return)|(\(|\)|\[|\]|,|\+|-|;|<|>|=|~|&|{|}|\*|\/|\|)")
|
regex = re.compile("(class|constructor|function|method|field|static|var|int|char|boolean|void|true|false|null|this|let|do|if|else|while|return)|(\(|\)|\[|\]|,|\+|-|;|<|>|=|~|&|{|}|\*|\/|\||\.)|\s+")
|
||||||
tokens = regex.split(line)
|
tokens = regex.split(line)
|
||||||
return [e.strip() for e in tokens if e != None and e.strip()!='']
|
return [e.strip() for e in tokens if e != None and e.strip()!='']
|
||||||
|
|
||||||
|
def has_more_tokens(self):
|
||||||
|
return self.ptr < len(self.tokens)
|
||||||
|
|
||||||
|
def current_token(self):
|
||||||
|
return self.tokens[self.ptr]
|
||||||
|
|
||||||
def advance(self):
|
def advance(self):
|
||||||
|
self.ptr += 1
|
||||||
|
|
||||||
|
def __init__(self, filename, print_xml=False):
|
||||||
|
self.ptr = 0
|
||||||
|
self.insideMultiLineComment = False
|
||||||
|
self.file = open(filename, 'r')
|
||||||
self.tokens = []
|
self.tokens = []
|
||||||
for line in self.file:
|
for line in self.file:
|
||||||
self.tokens += self.parse_line(line)
|
self.tokens += self.parse_line(line)
|
||||||
|
|
||||||
print(self.tokens)
|
if(print_xml):
|
||||||
|
self.print_xml(self.xml_file(filename))
|
||||||
|
|
||||||
def __init__(self, filename):
|
def xml_file(self, jack_file):
|
||||||
self.insideMultiLineComment = False
|
return jack_file + "T.xml"
|
||||||
self.file = open(filename, 'r')
|
|
||||||
|
def print_xml(self, xml_filename):
|
||||||
|
with open(xml_filename, 'w') as f:
|
||||||
|
f.write("<tokens>\n")
|
||||||
|
while self.has_more_tokens():
|
||||||
|
f.write("<{type}> {value} </{type}>\n".format(type=self.tokenType().name.lower(), value=self.printable_token()))
|
||||||
|
self.advance()
|
||||||
|
f.write("</tokens>\n")
|
||||||
|
|
||||||
class CompilationEngine:
|
class CompilationEngine:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
jt = JackTokenizer("../projects/10/Square/Square.jack")
|
jt = JackTokenizer(sys.argv[1], True)
|
||||||
jt.advance()
|
|
||||||
|
|
|
@ -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>
|
Loading…
Reference in New Issue