#ifndef SQLLEXER_H #define SQLLEXER_H #include enum class BasicTokenType { None, End, // End of input Symbol, // can be many things, keyword, object name, operator, .. Comment, QuotedString, DollarQuotedString, QuotedIdentifier }; enum class LexerState { Null, InDollarQuotedString }; class SqlLexer { public: SqlLexer(const QString &block, LexerState currentstate); QChar nextChar(); QChar peekChar(); /** * @brief NextBasicToken * @param in * @param ofs * @param start * @param length * @return false when input seems invalid, it will return what it did recognize but something wasn't right, parser should try to recover */ bool nextBasicToken(int &startpos, int &length, BasicTokenType &tokentype, QString &out); private: QString m_block; int m_pos = 0; LexerState m_state; }; #endif // SQLLEXER_H