#pragma once #include #include #include #include #include #include #include #include namespace hex::prv { class Provider; } namespace hex::lang { class Preprocessor; class Lexer; class Parser; class Validator; class Evaluator; class PatternLanguage { public: PatternLanguage(); ~PatternLanguage(); std::optional> executeString(prv::Provider *provider, std::string_view string); std::optional> executeFile(prv::Provider *provider, std::string_view path); const std::vector>& getConsoleLog(); const std::optional>& getError(); private: Preprocessor *m_preprocessor; Lexer *m_lexer; Parser *m_parser; Validator *m_validator; Evaluator *m_evaluator; prv::Provider *m_provider; std::endian m_defaultEndian; u32 m_recursionLimit; std::optional> m_currError; }; }