#pragma once #include "Parsing/Menu/MenuFileParserState.h" #include "Parsing/Sequence/SequenceResult.h" #include "Parsing/Simple/Matcher/SimpleMatcherFactory.h" namespace menu { class MenuMatcherFactory : public SimpleMatcherFactory { static constexpr auto TAG_STRING_CHAIN = 1420; static constexpr auto TAG_IDENTIFIER = 1421; static constexpr auto TAG_INT = 1422; static constexpr auto TAG_NUMERIC = 1423; static constexpr auto TAG_EXPRESSION = 1424; static constexpr auto CAPTURE_FIRST_TOKEN = 1420; static constexpr auto CAPTURE_STRING_CHAIN = 1421; static constexpr auto CAPTURE_IDENTIFIER = 1422; static constexpr auto CAPTURE_INT = 1423; static constexpr auto CAPTURE_NUMERIC = 1424; public: explicit MenuMatcherFactory(const IMatcherForLabelSupplier* labelSupplier); _NODISCARD MatcherFactoryWrapper StringChain() const; _NODISCARD MatcherFactoryWrapper Text() const; _NODISCARD MatcherFactoryWrapper TextNoChain() const; _NODISCARD MatcherFactoryWrapper Numeric() const; _NODISCARD MatcherFactoryWrapper TextExpression() const; _NODISCARD MatcherFactoryWrapper IntExpression() const; _NODISCARD MatcherFactoryWrapper NumericExpression() const; _NODISCARD static int TokenNumericIntValue(const SimpleParserValue& value); _NODISCARD static double TokenNumericFloatingPointValue(const SimpleParserValue& value); _NODISCARD static std::string& TokenTextValue(const SimpleParserValue& value); _NODISCARD static std::string TokenTextExpressionValue(MenuFileParserState* state, SequenceResult& result); _NODISCARD static int TokenIntExpressionValue(MenuFileParserState* state, SequenceResult& result); _NODISCARD static double TokenNumericExpressionValue(MenuFileParserState* state, SequenceResult& result); }; } // namespace menu