import CppUtils.Language.Lexer.Expression;
import CppUtils;
Type::Token token = 0;
Type::Token name = 0;
std::vector<std::unique_ptr<ILexeme>> lexemes = {};
Expression::Expression() = default;
explicit Expression::Expression(Type::Token c_token, Type::Token c_name = 0, std::vector<std::unique_ptr<ILexeme>> c_lexemes = {});
auto Expression::operator>>(std::unique_ptr<ILexeme>&& lexeme) -> Expression&;
auto Expression::operator>>(std::string string) -> Expression&;
auto Expression::operator>>(char c) -> Expression&;
auto Expression::operator>>(const Expression& expression) -> Expression&;
auto Expression::operator>>(NamedParser<Types...> namedParser) -> Expression&;
auto Expression::operator>>(TagLexeme tagLexeme) -> Expression&;
auto Expression::operator>>(Recurrence recurrence) -> Expression&;
auto Expression::operator>>(Alternative alternative) -> Expression&;
[[nodiscard]] auto Expression::operator~() const -> Recurrence;
[[nodiscard]] auto Expression::operator>(std::size_t repetitions) const -> Recurrence;
[[nodiscard]] auto Expression::operator>=(std::size_t repetitions) const -> Recurrence;
[[nodiscard]] auto Expression::operator*(std::size_t repetitions) const -> Recurrence;
[[nodiscard]] auto Expression::operator||(const Expression& rhs) const -> Alternative;
[[nodiscard]] auto Expression::operator!=(std::string string) const -> Exclusion;
[[nodiscard]] auto Expression::operator!=(char c) const -> Exclusion;
[[nodiscard]] auto Expression::operator!=(const Expression& expression) const -> Exclusion;
[[nodiscard]] auto Expression::operator!=(ParsingFunction<Types...> function) const -> Exclusion;
[[nodiscard]] auto Expression::operator!=(TagLexeme tagLexeme) const -> Exclusion;
[[nodiscard]] auto Expression::operator!=(Recurrence recurrence) const -> Exclusion;
[[nodiscard]] auto Expression::operator!=(Alternative alternative) const -> Exclusion;