docs: def create_and_push_expression(token, expressions):
      """Creates an expression from the given token and adds it
      to the stack of the given expression.
  
      In the case of "and" and "or" expressions the last expression
      is poped from the expression stack to link it to the new
      created one.
      """
      if token == 'and':
          right_expr = expressions.pop()
          expressions.append(And(expressions.pop(), right_expr))
      elif token == 'or':
          right_expr = expressions.pop()
          expressions.append(Or(expressions.pop(), right_expr))
      elif token == 'not':
          expressions.append(Not(expressions.pop()))
      else:
          expressions.append(Literal(token))