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()