def __init__(self, input_stream: str, jack_tokenizer: JackTokenizer):
        """
        creates a new compilation engine with the given
        input and output.
        :param input_stream: given input stream
        :param jack_tokenizer: given jack tokenizer
        """
        self.tokenizer = jack_tokenizer
        self.tokens = jack_tokenizer.get_tokens()
        self.file_name = input_stream.replace(".jack", "")
        self.output_file_name = input_stream.replace(".jack", ".xml")
        self.output_file = open(self.output_file_name, "wb")
        self.current_class_name = None
        self.root = None
        self.label_counter = 0
        self.tree = None

        # ----- identifier type, project 11, Wednesday -------- #
        self.identifier_counter = {LOCAL: 0,
                                   ARGUMENT: 0,
                                   STATIC: 0,
                                   FIELD: 0}
        # ----------------------------------------------------- #

        self.symbol_table = SymbolTable()
        self.VMWriter = None