Esempio n. 1
0
    def collectRules(self):

        custom_ops = {}
        for name in dir(self):
            if name.startswith('op_'):
                precedence = int(name[3:6])
                existing = custom_ops.get(precedence)
                if existing is None:
                    custom_ops[precedence] = [name]
                else:
                    existing.append(name)

        precedences = set(operators_by_prec.keys() + custom_ops.keys())
        precedences = sorted(precedences)

        for precedence in precedences:
            builtin = operators_by_prec.get(precedence, [])

            for operator in builtin:

                def p_op(args, operator=operator):
                    return operator.parse(args)

                p_op.__name__ = 'p_zzzz_%.4d' % precedence  #(1000-precedence)
                rule = operator.get_rule()
                p_op = parsing_static(p_op)
                self.addRule(rule, p_op)

            custom = custom_ops.get(precedence, [])
            for name in custom:
                func = getattr(self, name)
                doc = func.__doc__

                def p_op(args, func=func):
                    return func(args)

                p_op.__name__ = 'p_zzzz_%.4d_%s' % (precedence, name)
                p_op = parsing_static(p_op)
                self.addRule(doc, p_op)

        @parsing_static
        def p_binary_op(args):
            return args[0]

        rule = ''
        for operator in binary_operators:
            rule += u'binary_op ::= %s\n' % operator

        self.addRule(rule, p_binary_op)

        GenericParser.collectRules(self)
Esempio n. 2
0
 def collectRules(self):
     
     custom_ops = {}
     for name in dir(self):
         if name.startswith('op_'):
             precedence = int(name[3:6])
             existing = custom_ops.get(precedence)
             if existing is None:
                 custom_ops[precedence] = [name]
             else:
                 existing.append(name)
     
     precedences = set(operators_by_prec.keys() + custom_ops.keys())
     precedences = sorted(precedences)
     
     for precedence in precedences:
         builtin = operators_by_prec.get(precedence, [])
         
         for operator in builtin:
             def p_op(args, operator=operator):
                 return operator.parse(args)
             p_op.__name__ = 'p_zzzz_%.4d' % precedence #(1000-precedence)
             rule = operator.get_rule()
             p_op = parsing_static(p_op)
             self.addRule(rule, p_op)
         
         custom = custom_ops.get(precedence, [])
         for name in custom:
             func = getattr(self, name)
             doc = func.__doc__
             def p_op(args, func=func):
                 return func(args)
             p_op.__name__ = 'p_zzzz_%.4d_%s' % (precedence, name)
             p_op = parsing_static(p_op)
             self.addRule(doc, p_op)
     
     @parsing_static
     def p_binary_op(args):
         return args[0]
         
     rule = ''    
     for operator in binary_operators:
         rule += u'binary_op ::= %s\n' % operator
     
     self.addRule(rule, p_binary_op)
             
     GenericParser.collectRules(self)
Esempio n. 3
0
 def parse(self, tokens):
     result = GenericParser.parse(self, tokens)
     result = result.post_parse()
     return result
Esempio n. 4
0
 def __init__(self):
     GenericParser.__init__(self, start='expr')
Esempio n. 5
0
 def parse(self, tokens):
     result = GenericParser.parse(self, tokens)
     result = result.post_parse()
     return result
Esempio n. 6
0
 def __init__(self):
     GenericParser.__init__(self, start='expr')