Пример #1
0
    def test_nested_scopes02(self):
        with open("test/data/nestedscopes02.pas") as source_file:
            stb = SemanticAnalyzer()
            stb.analyze(_make_parse_tree(text=source_file.read()))

            s1 = stb.scope.lookup(INTEGER_NAME)
            self.assertEqual(type(s1), BuiltinTypeSymbol)
            self.assertEqual(s1.get_name(), INTEGER_NAME)
            self.assertEqual(s1.get_type(), None)

            s2 = stb.scope.lookup(REAL_NAME)
            self.assertEqual(type(s2), BuiltinTypeSymbol)
            self.assertEqual(s2.get_name(), REAL_NAME)
            self.assertEqual(s2.get_type(), None)

            s3 = stb.scope.lookup("x")
            self.assertEqual(type(s3), VarSymbol)
            self.assertEqual(s3.get_type().get_name(), REAL_NAME)

            s4 = stb.scope.lookup("y")
            self.assertEqual(type(s4), VarSymbol)
            self.assertEqual(s4.get_type().get_name(), REAL_TYPE)

            s5 = stb.scope.lookup("alpha")
            self.assertEqual(type(s5), ProcedureSymbol)
            self.assertEqual(s5.get_type().get_name(), PROCEDURE_TYPE)
Пример #2
0
 def execute(self):
     """
     Executes a pascal program.
     """
     tree = self._parser.parse()
     semantic_analyzer = SemanticAnalyzer()
     semantic_analyzer.analyze(tree)
     return self._visit(tree)
Пример #3
0
    def test_symtab4(self):
        with open("test/data/symtab4.pas") as source_file:
            sa = SemanticAnalyzer()
            sa.analyze(_make_parse_tree(text=source_file.read()))

            s3 = sa.scope.lookup("x")
            self.assertEqual(type(s3), VarSymbol)
            self.assertEqual(s3.get_type().get_name(), INTEGER_TYPE)

            s4 = sa.scope.lookup("y")
            self.assertEqual(type(s4), VarSymbol)
            self.assertEqual(s4.get_type().get_name(), INTEGER_TYPE)
Пример #4
0
    def test_part11(self):
        with open("test/data/part11.pas") as source_file:
            stb = SemanticAnalyzer()
            stb.analyze(_make_parse_tree(text=source_file.read()))

            s1 = stb.scope.lookup(INTEGER_NAME)
            self.assertEqual(type(s1), BuiltinTypeSymbol)
            self.assertEqual(s1.get_name(), INTEGER_NAME)
            self.assertEqual(s1.get_type(), None)

            s2 = stb.scope.lookup(REAL_NAME)
            self.assertEqual(type(s2), BuiltinTypeSymbol)
            self.assertEqual(s2.get_name(), REAL_NAME)
            self.assertEqual(s2.get_type(), None)

            s3 = stb.scope.lookup("x")
            self.assertEqual(type(s3), VarSymbol)
            self.assertEqual(s3.get_type().get_name(), INTEGER_TYPE)

            s4 = stb.scope.lookup("y")
            self.assertEqual(type(s4), VarSymbol)
            self.assertEqual(s4.get_type().get_name(), REAL_NAME)
Пример #5
0
    def test_symtab6(self):
        with open("test/data/symtab6.pas") as source_file:
            sa = SemanticAnalyzer()

            with self.assertRaises(SemanticError):
                sa.analyze(_make_parse_tree(text=source_file.read()))
Пример #6
0
 def test_name_error(self):
     with open("test/data/name_error1.pas") as source_file:
         stb = SemanticAnalyzer()
         with self.assertRaises(SemanticError):
             stb.analyze(_make_parse_tree(text=source_file.read()))
Пример #7
0
 def test_argument_mismatch3(self):
     with open("test/data/part16ArgumentMismatch3.pas") as source_file:
         sa = SemanticAnalyzer()
         with self.assertRaises(SemanticError):
             sa.analyze(_make_parse_tree(text=source_file.read()))
Пример #8
0
 def test_positive_argument_check(self):
     with open("test/data/part16.pas") as source_file:
         sa = SemanticAnalyzer()
         sa.analyze(_make_parse_tree(text=source_file.read()))
         self.assertTrue(True)