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.')
Esempio n. 2
0
    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, {})
Esempio n. 3
0
    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, {})
Esempio n. 4
0
    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, {})
Esempio n. 5
0
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}.')