-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathparser.hpp
More file actions
67 lines (66 loc) · 2.25 KB
/
parser.hpp
File metadata and controls
67 lines (66 loc) · 2.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#ifndef PARSER_H
#define PARSER_H
#include "stmt.hpp"
struct Token {
enum Type {
USE,
DROP,
DATABASE,
TABLE,
SET,
CREATE,
SHOW,
DESC,
DELETE,
UPDATE,
INSERT,
VARCHAR_LIT,
INT_LIT,
OPER,
ID,
SELECT,
WHERE,
FROM,
AND,
INTO,
VALUES,
PRIMARY,
INT,
VARCHAR,
NULL_LIT,
} token;
std::string raw;
};
struct Parser {
LiteralManager litManager;
typedef std::vector<Token> TokenList;
typedef TokenList::iterator TokenIter;
void clear();
Stmt* parse(const std::string& sql);
TokenList tokenize(const std::string& sql);
Stmt* parseSQL(TokenIter beg, TokenIter end);
SelectStmt* parseSelect(TokenIter beg, TokenIter end);
DeleteStmt* parseDelete(TokenIter beg, TokenIter end);
UpdateStmt* parseUpdate(TokenIter beg, TokenIter end);
InsertStmt* parseInsert(TokenIter beg, TokenIter end);
ShowTblStmt* parseShow(TokenIter beg, TokenIter end);
DescStmt* parseDesc(TokenIter beg, TokenIter end);
CreateTableStmt* parseCreateTable(TokenIter beg, TokenIter end);
DropTableStmt* parseDropTable(TokenIter beg, TokenIter end);
CreateDBStmt* parseCreateDB(TokenIter beg, TokenIter end);
DropDBStmt* parseDropDB(TokenIter beg, TokenIter end);
UseStmt* parseUse(TokenIter beg, TokenIter end);
std::pair<std::string, std::string> parseFrom(TokenIter beg, TokenIter end);
std::vector<Condition> parseWhere(TokenIter beg, TokenIter end);
std::string parseTableName(TokenIter beg, TokenIter end);
std::pair<ReadExpr*, Object> parseSet(TokenIter beg, TokenIter end);
Condition parseCond(TokenIter beg, TokenIter end);
std::vector<Expr*>* parseExprs(TokenIter beg, TokenIter end);
Expr* parseExpr(TokenIter beg, TokenIter end);
std::vector<std::vector<Object>> parseRows(TokenIter beg, TokenIter end);
std::vector<Object> parseRow(TokenIter beg, TokenIter end);
std::pair<std::vector<Type>, std::string> parseTypes(TokenIter beg, TokenIter end);
Type parseType(TokenIter beg, TokenIter end);
TokenIter findToken(TokenIter beg, TokenIter end, Token::Type token, const std::string& raw = "");
};
#endif