def CompileClass(classname,outputFile): global pos global fpw pos = 0 tokens = JackTokenizer.tokens_all(classname) # get tokens of inputfile(a class file) fpw = open(outputFile,'w') fpw.write('<class>\n') fpw.write('<keyword>'+tokens[pos]+'</keyword>\n') #class pos += 1 fpw.write('<identifier>'+tokens[pos]+'</identifier>\n') # classname pos += 1 fpw.write('<symbol>'+tokens[pos]+'</symbol>\n') #'{' pos += 1 while (tokens[pos] in ['field','static'] ): # classVarDec fpw.write('<ClassVarDec>\n') CompileClassVarDec(tokens,pos) fpw.write('</ClassVarDec>\n') while (tokens[pos] in ['constructor','function','method']): # subroutineDec fpw.write('<SubroutineDec>\n') CompileSubroutine(tokens,pos) fpw.write('</SubroutineDec>\n') pos += 1 fpw.write('<symbol>'+tokens[pos]+'</symbol>\n') #'}' fpw.write('</class>\n') fpw.close()
def CompileClass(classname,outputFile): global pos,fpw,className outputFilename = classname[:classname.rfind('.')]+'.vm' # set output file name fpw = open(outputFilename,'w') pos = 0 # initialize to 0 at beginning each file tokens = JackTokenizer.tokens_all(classname) # get tokens of inputfile(a class file) SymbolTable.Constructor() # prepare to build up symbol tables className = classname[:classname.find('.')] # get className pos += 1 pos += 1 # arrive '{' pos += 1 # begin class while (tokens[pos] in ['field','static'] ): # classVarDec CompileClassVarDec(tokens) while (tokens[pos] in ['constructor','function','method']): # subroutineDec CompileSubroutine(tokens) # end of compilatione, close output file writer fpw.close()