예제 #1
0
 def __init__(self, filepath, vm_writer):
     self.wf = open(filepath[:-5] + ".myImpl.xml", 'w')
     self.tokenizer = JackTokenizer(filepath)
     self.symbol_table = SymbolTable()
     self.vmw = vm_writer
     self.compiled_class_name = None
     self.label_num = 0
예제 #2
0
    def __init__(self, jack_file):
        self.vm_writer = VMWriter(jack_file)
        self.tokenizer = JackTokenizer(jack_file)
        self.symbol_table = SymbolTable()

        self.if_index = -1
        self.while_index = -1
예제 #3
0
 def __init__(self, jack_file, vm_file):
     self._jack_tokenizer = JackTokenizer(jack_file)
     self._vm_file = vm_file
     self._vm_text = ''
     self._xml_text = ''
     self._symbol_table = SymbolTable()
     self._vm_writer = VmWriter(self._vm_file)
     self._class_name = None
     self._label_count = 0
     self._compiled_class_name = ''
예제 #4
0
    def __init__(self, input_file, output_file):
        self.tokenizer = JackTokenizer(input_file)
        self.out = open(output_file, 'w')
        self.token = None
        self.class_name = None

        #######################
        ### PROJECT 11 CODE ###
        #######################

        self.symbol_table = SymbolTable()
        self.vm_writer = VMWriter(output_file)
예제 #5
0
    def compile(self, input_file, output_file):
        self._tokenizer = JackTokenizer(input_file)
        self._output_file = output_file
        self._offset = 0

        while self._tokenizer.has_more_tokens:
            if self._tokenizer.advance() == VALID_TOKEN:
                if self._tokenizer.current_token == 'class':
                    tag = 'class'
                    self._open_tag(tag)
                    self._compile_class()
                    self._close_tag(tag)
                else:
                    line_n = self._tokenizer.line_number
                    raise Exception(
                        f"Class declaration expected. Line {line_n}")
예제 #6
0
def main():
    if len(sys.argv) != 2:
        print(
            "Expected 1 argument (either the .jack file or a directory containing .jack files). Exiting!"
        )
        return

    is_file_arg = sys.argv[1].endswith(".jack")

    if is_file_arg:
        jack_files = [sys.argv[1]]
    else:
        jack_files = [
            join(sys.argv[1], f) for f in listdir(sys.argv[1])
            if f.endswith(".jack")
        ]

    for jack_file in jack_files:
        ce = CompilationEngine(JackTokenizer(jack_file),
                               jack_file.split(".jack")[0] + "Nisarg.xml")
        ce.compile()
예제 #7
0
 def build_tokenizer(self):
     self.tokenizer = JackTokenizer(self.jack_input)
예제 #8
0
from sys import argv

# For handling file/dir paths
from pathlib import Path

# Import Analyzer components
from compilation_engine import CompilationEngine
from jack_tokenizer import JackTokenizer

# Get input path
in_path = Path(argv[1])

if in_path.is_file():
    # Path points to a file
    # Initialize tokenizer
    tokenizer = JackTokenizer(in_path)
    # Initialize compilation engine
    compilationEngine = CompilationEngine(tokenizer,
                                          in_path.with_suffix(".xml"))

    # Start compilation
    compilationEngine.start_compilation()

elif in_path.is_dir():
    # Path points to a directory
    for item in in_path.iterdir():
        if item.is_file():
            # Compile every jack file
            if item.suffix == ".jack":
                tokenizer = JackTokenizer(item)
                ci = CompilationEngine(tokenizer, item.with_suffix(".xml"))
예제 #9
0
 def __init__(self, source_filepath):
     self.source_path = source_filepath
     self.tokenizer = JackTokenizer(self.source_path)
     self.class_name = None
     self.syntax_tree_root = self.compile_class()
예제 #10
0
    def tokenize(self, code, outfile):

        tokenizer = JackTokenizer(code)
        CompilationEngine(tokenizer, outfile).compile()
 def __init__(self, input_file_path, vm_writer: VMWriter):
     self.jack_tokenizer = JackTokenizer(input_file_path)
     self.symbol_table = SymbolTable()
     self.vm_writer = vm_writer
     if self.jack_tokenizer.has_more_tokens():
         self.compile_class()
 def __init__(self, filepath):
     self.wf = open(filepath[:-5] + ".my.xml", 'w')
     self.tokenizer = JackTokenizer(filepath)
예제 #13
0
import glob
import sys
from pathlib import Path, PurePath
from os.path import isfile, isdir, join

from jack_tokenizer import JackTokenizer
from compilation_engine import CompilationEngine


if __name__ == '__main__':
    if len(sys.argv) > 1:
        program_path = sys.argv[1]
        if isfile(program_path):
            files = [program_path]
            output_path = Path(program_path).parent
        elif isdir(program_path):
            files = glob.glob(join(program_path, '*.jack'))
            output_path = program_path
        else:
            raise FileNotFoundError("[Errno 2] No such file or directory: ", program_path)

        for file in files:
            output_file_name = PurePath(file).name.split('.')[0] + '.vm'
            output_file = Path(output_path, output_file_name)
            file_tokenizer = JackTokenizer(file)
            CompilationEngine(file_tokenizer, output_file)

    else:
        raise TypeError("1 argument is required: program path, 0 arguments entered")
 def __init__(self, input_file_path, output_file_path):
     self.output_file = open(output_file_path, 'w')
     self.jack_tokenizer = JackTokenizer(input_file_path)
     if self.jack_tokenizer.has_more_tokens():
         self.compile_class()
예제 #15
0
 def __init__(self, jack_file, xml_file):
     self._jack_tokenizer = JackTokenizer(jack_file)
     self._xml_file = xml_file
     self._xml_text = ''
예제 #16
0
    def analyze(self):
        for filename in self.files_to_translate:
            tokenizer = JackTokenizer(filename)
            compiler = CompilationEngine(tokenizer.tokens)

            self.__write_out(filename, compiler.xml_output)