Exemple #1
0
 def test_04_file_error(self):
     """
     Test ERROR
     """
     with self.assertRaises(error.Diagnostic) as pe:
         T = grammar.from_file(os.getcwd() + "/tests/bnf/error_bracket.bnf",
                               'source')
     self.assertTrue(pe.exception, "Can't detect error in BNF")
     self.assertEqual(pe.exception.logs[0].msg, "Expected ']'",
                      "Bad message in Error")
     self.assertEqual(pe.exception.logs[0].location.line, 2, "Bad line")
     self.assertEqual(pe.exception.logs[0].location.col, 7, "Bad col")
     with self.assertRaises(error.Diagnostic) as pe:
         T = grammar.from_file(
             os.getcwd() + "/tests/bnf/error_bracket2.bnf", 'source')
     self.assertTrue(pe.exception, "Can't detect error in BNF")
     self.assertEqual(pe.exception.logs[0].msg, "Expected '['",
                      "Bad message in Error")
     self.assertEqual(pe.exception.logs[0].location.line, 2, "Bad line")
     self.assertEqual(pe.exception.logs[0].location.col, 1, "Bad col")
     with self.assertRaises(error.Diagnostic) as pe:
         T = grammar.from_file(os.getcwd() + "/tests/bnf/error_rule.bnf",
                               'source')
     self.assertTrue(pe.exception, "Can't detect error in BNF")
     self.assertEqual(pe.exception.logs[0].msg, "Expected '='",
                      "Bad message in Error")
     self.assertEqual(pe.exception.logs[0].location.line, 2, "Bad line")
     self.assertEqual(pe.exception.logs[0].location.col, 1, "Bad col")
     with self.assertRaises(error.Diagnostic) as pe:
         T = grammar.from_file(
             os.getcwd() + "/tests/bnf/error_bracket3.bnf", 'source')
     self.assertTrue(pe.exception, "Can't detect error in BNF")
     self.assertEqual(pe.exception.logs[0].msg, "Expected sequences",
                      "Bad message in Error")
     self.assertEqual(pe.exception.logs[0].location.line, 1, "Bad line")
     self.assertEqual(pe.exception.logs[0].location.col, 8, "Bad col")
     with self.assertRaises(error.Diagnostic) as pe:
         T = grammar.from_file(os.getcwd() + "/tests/bnf/error_empty.bnf",
                               'source')
     self.assertTrue(pe.exception, "Can't detect error in BNF")
     self.assertEqual(pe.exception.logs[0].msg,
                      "Parse error in 'directive' in EBNF bnf",
                      "Bad message in Error")
     self.assertEqual(pe.exception.logs[0].location.line, 1, "Bad line")
     self.assertEqual(pe.exception.logs[0].location.col, 7, "Bad col")
Exemple #2
0
    def to_tl4t(self):
        return fmt.sep("", [self.call_expr.to_tl4t(), self.p[0].to_tl4t()])


class Paren(Expr):
    def __init__(self, expr: Expr):
        super().__init__(None, [expr])

    def to_tl4t(self):
        return fmt.block("(", ")", [self.p[0].to_tl4t()])


### PARSING

TL4T = grammar.from_file(os.getcwd() + "/tests/bnf/tl4t.bnf", 'source')

# AST NODES


@meta.hook(TL4T)
def info(self):
    n = Node()
    n.info = LocationInfo.from_stream(self._stream, is_error=self.from_string)
    return n


@meta.hook(TL4T)
def new_declvar(self, ast, n, t, e, i):
    typ = None
    txt = self.value(t)
Exemple #3
0
    def to_tl4t(self):
        return fmt.sep("", [self.call_expr.to_tl4t(), self.p[0].to_tl4t()])


class Paren(Expr):
    def __init__(self, expr: Expr):
        super().__init__(None, [expr])

    def to_tl4t(self):
        return fmt.block("(", ")", [self.p[0].to_tl4t()])


### PARSING


TL4T = grammar.from_file(os.getcwd() + "/tests/bnf/tl4t.bnf", 'source')


# AST NODES


@meta.hook(TL4T)
def info(self, n):
    n.info = LocationInfo.from_stream(self._stream, is_error=self.from_string)
    return True


@meta.hook(TL4T)
def new_declvar(self, ast, n, t, e, i):
    typ = None
    txt = self.value(t)
Exemple #4
0
    def test_02_json(self):
        """
        Test JSON
        """
        JSON = grammar.from_file(os.getcwd() + "/tests/bnf/json.bnf", 'json')

        # add hook to the dynamically created base class
        @meta.hook(JSON)
        def is_num(self, ast, n):
            ast.node = float(self.value(n))
            return True

        @meta.hook(JSON)
        def is_str(self, ast, s):
            ast.node = self.value(s).strip('"')
            return True

        @meta.hook(JSON)
        def is_bool(self, ast, b):
            bval = self.value(b)
            if bval == "true":
                ast.node = True
            if bval == "false":
                ast.node = False
            return True

        @meta.hook(JSON)
        def is_none(self, ast):
            ast.node = None
            return True

        @meta.hook(JSON)
        def is_pair(self, ast, s, v):
            ast.node = (self.value(s).strip('"'), v.node)
            return True

        @meta.hook(JSON)
        def is_array(self, ast):
            ast.node = []
            return True

        @meta.hook(JSON)
        def add_item(self, ast, item):
            ast.node.append(item.node)
            return True

        @meta.hook(JSON)
        def is_dict(self, ast):
            ast.node = {}
            return True

        @meta.hook(JSON)
        def add_kv(self, ast, item):
            ast.node[item.node[0]] = item.node[1]
            return True

        json = JSON()
        res = json.parse('{"test":12}')
        self.assertEqual(res.node['test'], 12)
        res = json.parse('{"test":12,"puf":[1,2,3]}')
        self.assertEqual(res.node['puf'][1], 2)
        res = json.parse('{"test":12,"puf":[1,2,3],"obj":{"flags":true}}')
        self.assertTrue(res.node['obj']['flags'])
Exemple #5
0
    def test_02_json(self):
        """
        Test JSON
        """
        JSON = grammar.from_file(os.getcwd() + "/tests/bnf/json.bnf", 'json')

        # add hook to the dynamically created base class
        @meta.hook(JSON)
        def is_num(self, ast, n):
            ast.node = float(self.value(n))
            return True

        @meta.hook(JSON)
        def is_str(self, ast, s):
            ast.node = self.value(s).strip('"')
            return True

        @meta.hook(JSON)
        def is_bool(self, ast, b):
            bval = self.value(b)
            if bval == "true":
                ast.node = True
            if bval == "false":
                ast.node = False
            return True

        @meta.hook(JSON)
        def is_none(self, ast):
            ast.node = None
            return True

        @meta.hook(JSON)
        def is_pair(self, ast, s, v):
            ast.node = (self.value(s).strip('"'), v.node)
            return True

        @meta.hook(JSON)
        def is_array(self, ast):
            ast.node = []
            return True

        @meta.hook(JSON)
        def add_item(self, ast, item):
            ast.node.append(item.node)
            return True

        @meta.hook(JSON)
        def is_dict(self, ast):
            ast.node = {}
            return True

        @meta.hook(JSON)
        def add_kv(self, ast, item):
            ast.node[item.node[0]] = item.node[1]
            return True

        json = JSON()
        res = json.parse('{"test":12}')
        self.assertEqual(res.node['test'], 12)
        res = json.parse('{"test":12,"puf":[1,2,3]}')
        self.assertEqual(res.node['puf'][1], 2)
        res = json.parse('{"test":12,"puf":[1,2,3],"obj":{"flags":true}}')
        self.assertTrue(res.node['obj']['flags'])
Exemple #6
0
 def test_04_file_error(self):
     """
     Test ERROR
     """
     with self.assertRaises(error.Diagnostic) as pe:
         T = grammar.from_file(
             os.getcwd() + "/tests/bnf/error_bracket.bnf",
             'source'
         )
     self.assertTrue(pe.exception, "Can't detect error in BNF")
     self.assertEqual(
         pe.exception.logs[0].msg,
         "Expected ']'",
         "Bad message in Error"
     )
     self.assertEqual(pe.exception.logs[0].location.line, 2, "Bad line")
     self.assertEqual(pe.exception.logs[0].location.col, 7, "Bad col")
     with self.assertRaises(error.Diagnostic) as pe:
         T = grammar.from_file(
             os.getcwd() + "/tests/bnf/error_bracket2.bnf",
             'source'
         )
     self.assertTrue(pe.exception, "Can't detect error in BNF")
     self.assertEqual(
         pe.exception.logs[0].msg,
         "Expected '['",
         "Bad message in Error"
     )
     self.assertEqual(pe.exception.logs[0].location.line, 2, "Bad line")
     self.assertEqual(pe.exception.logs[0].location.col, 1, "Bad col")
     with self.assertRaises(error.Diagnostic) as pe:
         T = grammar.from_file(
             os.getcwd() + "/tests/bnf/error_rule.bnf",
             'source'
         )
     self.assertTrue(pe.exception, "Can't detect error in BNF")
     self.assertEqual(
         pe.exception.logs[0].msg,
         "Expected '='",
         "Bad message in Error"
     )
     self.assertEqual(pe.exception.logs[0].location.line, 2, "Bad line")
     self.assertEqual(pe.exception.logs[0].location.col, 1, "Bad col")
     with self.assertRaises(error.Diagnostic) as pe:
         T = grammar.from_file(
             os.getcwd() + "/tests/bnf/error_bracket3.bnf",
             'source'
         )
     self.assertTrue(pe.exception, "Can't detect error in BNF")
     self.assertEqual(
         pe.exception.logs[0].msg,
         "Expected sequences",
         "Bad message in Error"
     )
     self.assertEqual(pe.exception.logs[0].location.line, 1, "Bad line")
     self.assertEqual(pe.exception.logs[0].location.col, 8, "Bad col")
     with self.assertRaises(error.Diagnostic) as pe:
         T = grammar.from_file(
             os.getcwd() + "/tests/bnf/error_empty.bnf",
             'source'
         )
     self.assertTrue(pe.exception, "Can't detect error in BNF")
     self.assertEqual(
         pe.exception.logs[0].msg,
         "Parse error in 'directive' in EBNF bnf",
         "Bad message in Error"
     )
     self.assertEqual(pe.exception.logs[0].location.line, 1, "Bad line")
     self.assertEqual(pe.exception.logs[0].location.col, 7, "Bad col")