43 lines
852 B
C++
43 lines
852 B
C++
#ifndef SQLLEXER_H
|
|
#define SQLLEXER_H
|
|
|
|
#include <QString>
|
|
|
|
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
|