-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathparser.hpp
More file actions
47 lines (37 loc) · 1.34 KB
/
parser.hpp
File metadata and controls
47 lines (37 loc) · 1.34 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
#ifndef CLOUDSQL_PARSER_PARSER_HPP
#define CLOUDSQL_PARSER_PARSER_HPP
#include <memory>
#include "parser/expression.hpp"
#include "parser/lexer.hpp"
#include "parser/statement.hpp"
namespace cloudsql::parser {
class Parser {
public:
explicit Parser(std::unique_ptr<Lexer> lexer);
std::unique_ptr<Statement> parse_statement();
private:
std::unique_ptr<Lexer> lexer_;
Token current_token_;
bool has_current_ = false;
Token next_token();
Token peek_token();
bool consume(TokenType type);
std::unique_ptr<Statement> parse_select();
std::unique_ptr<Statement> parse_create_table();
std::unique_ptr<Statement> parse_create_index();
std::unique_ptr<Statement> parse_insert();
std::unique_ptr<Statement> parse_update();
std::unique_ptr<Statement> parse_delete();
std::unique_ptr<Statement> parse_drop();
std::unique_ptr<Expression> parse_expression();
std::unique_ptr<Expression> parse_or();
std::unique_ptr<Expression> parse_and();
std::unique_ptr<Expression> parse_not();
std::unique_ptr<Expression> parse_compare();
std::unique_ptr<Expression> parse_add_sub();
std::unique_ptr<Expression> parse_mul_div();
std::unique_ptr<Expression> parse_unary();
std::unique_ptr<Expression> parse_primary();
};
} // namespace cloudsql::parser
#endif // CLOUDSQL_PARSER_PARSER_HPP