| #ifndef THIRD_PARTY_MILOTIC_EXTERNAL_CC_TLBMC_EXPRESSION_EXPRESSION_H_ |
| #define THIRD_PARTY_MILOTIC_EXTERNAL_CC_TLBMC_EXPRESSION_EXPRESSION_H_ |
| |
| #include <memory> |
| #include <string> |
| |
| #include "absl/container/flat_hash_map.h" |
| #include "absl/container/flat_hash_set.h" |
| #include "absl/status/statusor.h" |
| #include "absl/strings/string_view.h" |
| |
| namespace milotic_tlbmc { |
| |
| class Expression { |
| public: |
| virtual ~Expression() = default; |
| virtual absl::StatusOr<double> Evaluate( |
| const absl::flat_hash_map<std::string, double>& variable_maps |
| ) const = 0; |
| virtual void GetRequiredVariables( |
| absl::flat_hash_set<std::string>& variable_names) const = 0; |
| }; |
| |
| // Parses an expression string into an Expression object. |
| absl::StatusOr<std::unique_ptr<Expression>> Parse( |
| absl::string_view expression); |
| |
| // Exposed for testing only. Do not use these functions directly. |
| namespace expression::internal { |
| |
| absl::string_view ConsumeWhitespace(absl::string_view s); |
| char Peek(absl::string_view s); |
| bool Consume(absl::string_view& s, char c); |
| absl::StatusOr<std::unique_ptr<Expression>> ParsePrimary(absl::string_view& s); |
| absl::StatusOr<std::unique_ptr<Expression>> ParseFactor(absl::string_view& s); |
| absl::StatusOr<std::unique_ptr<Expression>> ParseTerm(absl::string_view& s); |
| absl::StatusOr<std::unique_ptr<Expression>> ParseExpression( |
| absl::string_view& s); |
| } // namespace expression::internal |
| } // namespace milotic_tlbmc |
| |
| #endif // THIRD_PARTY_MILOTIC_EXTERNAL_CC_TLBMC_EXPRESSION_EXPRESSION_H_ |