dReal4
prefix_printer.h
1 #pragma once
2 
3 #include <ios>
4 #include <ostream>
5 #include <string>
6 
8 
9 namespace dreal {
10 
11 /// Class to print expressions and formulas in prefix-form.
13  public:
14  /// Constructs a PrefixPrinter with @p os. It temporarily sets the
15  /// precision of @p os to the maximum precision.
16  explicit PrefixPrinter(std::ostream& os);
17 
18  PrefixPrinter(const PrefixPrinter&) = delete;
19  PrefixPrinter(PrefixPrinter&&) = delete;
20  PrefixPrinter& operator=(const PrefixPrinter&) = delete;
21  PrefixPrinter& operator=(PrefixPrinter&&) = delete;
22 
23  /// Destroys this. It restores the original precision of the ostream.
25 
26  /// Prints the prefix form of the expression @p e to the ostream.
27  std::ostream& Print(const Expression& e);
28 
29  /// Prints the prefix form of the formula @p f to the ostream.
30  std::ostream& Print(const Formula& f);
31 
32  private:
33  std::ostream& VisitVariable(const Expression& e);
34  std::ostream& VisitConstant(const Expression& e);
35  std::ostream& VisitRealConstant(const Expression& e);
36  std::ostream& VisitAddition(const Expression& e);
37  std::ostream& VisitMultiplication(const Expression& e);
38  std::ostream& VisitDivision(const Expression& e);
39  std::ostream& VisitLog(const Expression& e);
40  std::ostream& VisitAbs(const Expression& e);
41  std::ostream& VisitExp(const Expression& e);
42  std::ostream& VisitSqrt(const Expression& e);
43  std::ostream& VisitPow(const Expression& e);
44  std::ostream& VisitSin(const Expression& e);
45  std::ostream& VisitCos(const Expression& e);
46  std::ostream& VisitTan(const Expression& e);
47  std::ostream& VisitAsin(const Expression& e);
48  std::ostream& VisitAcos(const Expression& e);
49  std::ostream& VisitAtan(const Expression& e);
50  std::ostream& VisitAtan2(const Expression& e);
51  std::ostream& VisitSinh(const Expression& e);
52  std::ostream& VisitCosh(const Expression& e);
53  std::ostream& VisitTanh(const Expression& e);
54  std::ostream& VisitMin(const Expression& e);
55  std::ostream& VisitMax(const Expression& e);
56  std::ostream& VisitIfThenElse(const Expression& e);
57  static std::ostream& VisitUninterpretedFunction(const Expression& e);
58 
59  std::ostream& VisitFalse(const Formula& f);
60  std::ostream& VisitTrue(const Formula& f);
61  std::ostream& VisitVariable(const Formula& f);
62  std::ostream& VisitEqualTo(const Formula& f);
63  std::ostream& VisitNotEqualTo(const Formula& f);
64  std::ostream& VisitGreaterThan(const Formula& f);
65  std::ostream& VisitGreaterThanOrEqualTo(const Formula& f);
66  std::ostream& VisitLessThan(const Formula& f);
67  std::ostream& VisitLessThanOrEqualTo(const Formula& f);
68  std::ostream& VisitConjunction(const Formula& f);
69  std::ostream& VisitDisjunction(const Formula& f);
70  std::ostream& VisitNegation(const Formula& f);
71  static std::ostream& VisitForall(const Formula& f);
72 
73  std::ostream& VisitUnaryFunction(const std::string& name,
74  const Expression& e);
75  std::ostream& VisitBinaryFunction(const std::string& name,
76  const Expression& e);
77 
78  // Makes VisitExpression a friend of this class so that it can use private
79  // operator()s.
80  friend std::ostream& drake::symbolic::VisitExpression<std::ostream&>(
81  PrefixPrinter*, const Expression& e);
82 
83  // Makes VisitFormula a friend of this class so that it can use private
84  // operator()s.
85  friend std::ostream& drake::symbolic::VisitFormula<std::ostream&>(
86  PrefixPrinter*, const Formula& f);
87 
88  std::ostream& os_;
89  std::streamsize old_precision_{};
90 };
91 
92 /// Returns the prefix-string representation of the expression @p e.
93 std::string ToPrefix(const Expression& e);
94 
95 /// Returns the prefix-string representation of the formula @p e.
96 std::string ToPrefix(const Formula& f);
97 
98 } // namespace dreal
Class to print expressions and formulas in prefix-form.
Definition: prefix_printer.h:12
Sum type of symbolic::Expression and symbolic::Formula.
Definition: api.cc:9
std::ostream & Print(const Expression &e)
Prints the prefix form of the expression e to the ostream.
Definition: prefix_printer.cc:23
string ToPrefix(const Expression &e)
Returns the prefix-string representation of the expression e.
Definition: prefix_printer.cc:275
PrefixPrinter(std::ostream &os)
Constructs a PrefixPrinter with os.
Definition: prefix_printer.cc:14
~PrefixPrinter()
Destroys this. It restores the original precision of the ostream.
Definition: prefix_printer.cc:21
This is the header file that we consolidate Drake&#39;s symbolic classes and expose them inside of dreal ...
Represents a symbolic form of an expression.
Definition: symbolic_expression.h:164
Represents a symbolic form of a first-order logic formula.
Definition: symbolic_formula.h:101