Пример #1
0
literalt cvc_convt::convert(const exprt &expr)
{
  //out << "%% E: " << expr << std::endl;

  if(expr.type().id()!=ID_bool)
  {
    std::string msg="cvc_convt::convert got "
                    "non-boolean expression:\n";
    msg+=expr.to_string();
    throw msg;
  }

  // Three special cases in which we don't need to generate
  // a handle.
  
  if(expr.is_true())
    return const_literal(true);
  else if(expr.is_false())
    return const_literal(false);
  else if(expr.id()==ID_literal)
    return to_literal_expr(expr).get_literal();

  // Generate new handle

  literalt l(no_boolean_variables, false);
  no_boolean_variables++;
  
  find_symbols(expr);

  // define new handle
  out << "ASSERT ";
  convert_literal(l);
  out << " <=> (";
  convert_expr(expr);
  out << ");" << std::endl << std::endl;

  return l;
}