You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

51 lines
2.7 KiB

  1. #pragma once
  2. #include <sstream>
  3. #include <unordered_map>
  4. #include "storm/storage/expressions/Variable.h"
  5. #include "storm/storage/expressions/ExpressionVisitor.h"
  6. namespace storm {
  7. namespace expressions {
  8. class Expression;
  9. enum class ToCppTranslationMode {
  10. KeepType, CastDouble, CastRationalNumber, CastRationalFunction
  11. };
  12. class ToCppTranslationOptions {
  13. public:
  14. ToCppTranslationOptions(std::unordered_map<storm::expressions::Variable, std::string> const& prefixes, std::unordered_map<storm::expressions::Variable, std::string> const& names, ToCppTranslationMode mode = ToCppTranslationMode::KeepType);
  15. std::unordered_map<storm::expressions::Variable, std::string> const& getPrefixes() const;
  16. std::unordered_map<storm::expressions::Variable, std::string> const& getNames() const;
  17. ToCppTranslationMode const& getMode() const;
  18. private:
  19. std::reference_wrapper<std::unordered_map<storm::expressions::Variable, std::string> const> prefixes;
  20. std::reference_wrapper<std::unordered_map<storm::expressions::Variable, std::string> const> names;
  21. ToCppTranslationMode mode;
  22. };
  23. class ToCppVisitor : public ExpressionVisitor {
  24. public:
  25. std::string translate(storm::expressions::Expression const& expression, ToCppTranslationOptions const& options);
  26. virtual boost::any visit(IfThenElseExpression const& expression, boost::any const& data) override;
  27. virtual boost::any visit(BinaryBooleanFunctionExpression const& expression, boost::any const& data) override;
  28. virtual boost::any visit(BinaryNumericalFunctionExpression const& expression, boost::any const& data) override;
  29. virtual boost::any visit(BinaryRelationExpression const& expression, boost::any const& data) override;
  30. virtual boost::any visit(VariableExpression const& expression, boost::any const& data) override;
  31. virtual boost::any visit(UnaryBooleanFunctionExpression const& expression, boost::any const& data) override;
  32. virtual boost::any visit(UnaryNumericalFunctionExpression const& expression, boost::any const& data) override;
  33. virtual boost::any visit(BooleanLiteralExpression const& expression, boost::any const& data) override;
  34. virtual boost::any visit(IntegerLiteralExpression const& expression, boost::any const& data) override;
  35. virtual boost::any visit(RationalLiteralExpression const& expression, boost::any const& data) override;
  36. private:
  37. std::stringstream stream;
  38. };
  39. }
  40. }