Beispiel #1
0
    def test_code_4(self):
        code_length = 10
        code_distance = 5

        code_generator = CodeGenerator(code_length, code_distance)
        code_words = code_generator.generate_code()

        for word in code_words:
            self.assertEqual(word.get_length(), code_length)

        for i in range(0, len(code_words)):
            for j in range(i + 1, len(code_words)):
                word_distance = CodeWord.get_distance(code_words[i],
                                                      code_words[j])
                self.assertEqual(word_distance >= code_distance, True)
Beispiel #2
0
def __main__():
    length, distance = read_inputs()

    code_generator = CodeGenerator(length, distance)

    code_words = code_generator.generate_code()

    if len(code_words) == 1:
        print("No code!")
    else:
        print(f"{len(code_words)} words:")
        for word in code_words:
            print(word)

    run_tests()
Beispiel #3
0
         output = Output()
         factory = AstFactory(output)
         parser = Parser(token_array, output, factory)
         #print 'parse start'
         parser.parse()
         print 'parse success'
         if parser.get_error_message() != '':
             print parser.get_error_message()
             exit()
             
         symbol_table = factory.get_symbol_table()
         ast_root = factory.get_ast_root()
         #print 'code generation start'
         if symbol_table:
             code_generation = CodeGenerator(symbol_table, ast_root)
             code_generation.generate_code()
             code_generation.print_code()
     
 else:
     #if the option is -s, it will run the scanner and produce a list of tokens
     if  sys.argv[1] == '-s':
         input_string = '';
         #if the second argument exist, it means read from file
         if len(sys.argv) == 3:
             #Read the file
             if os.path.exists(sys.argv[2]):
                 f = open(sys.argv[2])
                 input_string = f.read()
             #if the directory of the file does not exist
             else:
                 print 'error: The directory of the file does not exist'
Beispiel #4
0
            dst_file = os.path.basename(path[:-1])
        else:
            dst_file = os.path.basename(path)
        dst_file += '.asm'
        bootstrap = True

    dst_file = open(os.path.join(path, dst_file), 'w+')

    parser = Parser()
    generator = CodeGenerator()

    bootstrap_code = ''
    if bootstrap:
        parsed_line = parser.parse('call Sys.init 0')
        bootstrap_code += '@256\n' + 'D=A\n' + '@SP\n' + 'M=D\n'
        bootstrap_code += generator.generate_code(parsed_line)
    dst_file.write(bootstrap_code)

    for f_name in file_names:
        generator.set_new_file_name(file_name=f_name)
        src_file = open(os.path.join(path, f_name+'.vm'), 'r')
        src_line = src_file.readline()
        while src_line:
            parsed_line = parser.parse(src_line)
            if parsed_line:
                output_code = generator.generate_code(parsed_line)
                # print(output_code)
                dst_file.write(output_code)
            src_line = src_file.readline()
        src_file.close()
    dst_file.close()
Beispiel #5
0
    path, src_file = os.path.split(path)
    f_name = src_file.split('.')[0]
    dst_file = f_name + '.hack'

    src_file = open(os.path.join(path, src_file), 'r')
    dst_file = open(os.path.join(path, dst_file), 'w+')

    parser = Parser()
    generator = CodeGenerator()

    parsed_lines = []
    src_line = src_file.readline()

    while src_line:
        parsed_line = parser.parse(src_line)
        if parsed_line[0]:
            if parsed_line[0] == 'JS':
                generator.add_jump_symb(key=parsed_line[1],
                                        value=parsed_line[2],
                                        file_line=parsed_line[6])
            else:
                parsed_lines.append(parsed_line)
        src_line = src_file.readline()

    for parsed_line in parsed_lines:
        output_line = generator.generate_code(parsed_line)
        dst_file.write(output_line + '\n')

    dst_file.close()
    src_file.close()