Beispiel #1
0
 def _parse_and(self, tokens):
     # Handle "... and ... and ..."
     lexpr = self._parse_not(tokens)
     if tokens and tokens[0] == 'and':
         tokens.pop(0)
         rexpr = self._parse_and(tokens)  # recurs
         return ExpressionOperator(operator.and_, lexpr, rexpr)
     else:
         return lexpr
Beispiel #2
0
 def _parse(self, tokens):
     # Operator precedence: or, and, not, <, <=, >, >=, <>, !=, ==
     # so we start with parsing " ... or .. or .." and decent from there
     lexpr = self._parse_and(tokens)
     if tokens and tokens[0] == 'or':
         tokens.pop(0)
         rexpr = self._parse(tokens)  # recurs
         return ExpressionOperator(operator.or_, lexpr, rexpr)
     else:
         return lexpr
Beispiel #3
0
 def _parse_comparison(self, tokens):
     # Handle "... op ..." where op is: <, <=, >, >=, <>, !=, ==
     lexpr = self._parse_statement(tokens)
     if tokens and tokens[0] in self.operators \
     and tokens[0] not in ('or', 'and', 'not'):
         op = tokens.pop(0)
         rexpr = self._parse_statement(tokens)
         return ExpressionOperator(self.operators[op], lexpr, rexpr)
     else:
         return lexpr