def parse_term(self): expr = self.parse_factor() while self.tokens.peek in ('*', '/', '%'): op = self.tokens.next() next_expr = self.parse_factor() expr = ast.BinOp(op.line, op.value, expr, next_expr) return expr
def parse_additive(self): expr = self.parse_term() while self.tokens.peek in ('+', '-'): op = self.tokens.next() next_expr = self.parse_term() expr = ast.BinOp(op.line, op.value, expr, next_expr) return expr
def parse_relational(self): expr = self.parse_additive() while self.tokens.peek in ('<', '>', '<=', '>='): op = self.tokens.next() next_expr = self.parse_additive() expr = ast.BinOp(op.line, op.value, expr, next_expr) return expr
def parse_equality(self): expr = self.parse_relational() while self.tokens.peek in ('==', '!='): op = self.tokens.next() next_expr = self.parse_relational() expr = ast.BinOp(op.line, op.value, expr, next_expr) return expr
def parse_and(self): expr = self.parse_not() while self.tokens.peek == 'and': line = self.tokens.next().line next_expr = self.parse_not() expr = ast.BinOp(line, 'and', expr, next_expr) return expr
def parse_expression(self): """ Parses an expression. """ expr = self.parse_and() while self.tokens.peek == 'or': line = self.tokens.next().line next_expr = self.parse_and() expr = ast.BinOp(line, 'or', expr, next_expr) return expr