def test_init_operation(self): textSource = TextSource(TEST_SOURCE_1_LINE) parser = Parser(64, 256, textSource) tree = parser.parse() visitor = Visitor(tree) program = Interpreter(visitor, lib) program.interpret() printable = f'Returned {program.return_val}.' print(printable) self.assertEqual(printable, 'Returned 1296.')
def test_condition_operation(self): line = "2 < 3 " put_line_in_lexer_text_source(self.parser, line) tree = self.parser._parse_condition() visitor = Visitor(tree) program = Interpreter(visitor, lib) program.visitor.scope_manager.scope_stack[1].append(Scope('test')) program.visitor._visit_less_operation(tree) self.assertEqual(program.visitor.scope_manager.last_operation_result, True) self.assertEqual(program.visitor.scope_manager.return_result, None) self.assertEqual( program.visitor.scope_manager.scope_stack[1][0].vars_or_attrs, {}) program.visitor._visit_greater_equal_operation(tree) self.assertEqual(program.visitor.scope_manager.last_operation_result, False) self.assertEqual(program.visitor.scope_manager.return_result, None) self.assertEqual( program.visitor.scope_manager.scope_stack[1][0].vars_or_attrs, {}) program.visitor._visit_less_equal_operation(tree) self.assertEqual(program.visitor.scope_manager.last_operation_result, True) self.assertEqual(program.visitor.scope_manager.return_result, None) self.assertEqual( program.visitor.scope_manager.scope_stack[1][0].vars_or_attrs, {}) program.visitor._visit_greater_operation(tree) self.assertEqual(program.visitor.scope_manager.last_operation_result, False) self.assertEqual(program.visitor.scope_manager.return_result, None) self.assertEqual( program.visitor.scope_manager.scope_stack[1][0].vars_or_attrs, {})
def test_if_else_operation2(self): line = "if (2 < 3) { Integer a = 2; } else { Double temp = 3.0; return temp; } " put_line_in_lexer_text_source(self.parser, line) tree = self.parser._parse_if() visitor = Visitor(tree) program = Interpreter(visitor, lib) program.visitor.scope_manager.scope_stack[1].append(Scope('test')) program.visitor._visit_if_else_operation(tree) self.assertEqual(program.visitor.scope_manager.last_operation_result, None) self.assertEqual(program.visitor.scope_manager.return_result, None) self.assertEqual( program.visitor.scope_manager.scope_stack[1][0].vars_or_attrs, {})
def test_return_operation(self): line = "return 2; " put_line_in_lexer_text_source(self.parser, line) tree = self.parser._parse_return() visitor = Visitor(tree) program = Interpreter(visitor, lib) program.visitor.scope_manager.scope_stack[1].append(Scope('test')) program.visitor._visit_return_stat_operation(tree) self.assertEqual(program.visitor.scope_manager.last_operation_result, 2) self.assertEqual(program.visitor.scope_manager.return_result, 2) self.assertEqual( program.visitor.scope_manager.scope_stack[1][0].vars_or_attrs, {})
from my_parser.parser import Parser import my_interpreter.lib_methods as lib from lexer.source_read import TextSource from my_interpreter.visitor import Visitor, Interpreter if __name__ == '__main__': arg_parser = ArgumentParser() arg_parser.add_argument('--file_path', type=str, default='../test_files/test_interpreter_code.txt') arg_parser.add_argument('--ident_length', type=int, default=64) arg_parser.add_argument('--string_length', type=int, default=256) args = arg_parser.parse_args() textSource = TextSource(args.file_path) parser = Parser(args.ident_length, args.string_length, textSource) tree = parser.parse() visitor = Visitor(tree) program = Interpreter(visitor, lib) program.interpret() print(f'Returned {program.return_val}.')