#pragma once #include #include #include #include #include #include #include namespace hex::prv { class Provider; } namespace hex::pl { class Preprocessor; class Lexer; class Parser; class Validator; class Evaluator; class PatternData; class ASTNode; class PatternLanguage { public: PatternLanguage(); ~PatternLanguage(); std::optional> executeString(prv::Provider *provider, const std::string &string); std::optional> executeFile(prv::Provider *provider, const std::string &path); void abort(); const std::vector>& getConsoleLog(); const std::optional>& getError(); u32 getCreatedPatternCount(); u32 getMaximumPatternCount(); private: Preprocessor *m_preprocessor; Lexer *m_lexer; Parser *m_parser; Validator *m_validator; Evaluator *m_evaluator; std::vector m_currAST; std::optional> m_currError; }; }