initial commit
This commit is contained in:
63
parser.h
Normal file
63
parser.h
Normal file
@@ -0,0 +1,63 @@
|
||||
#pragma once
|
||||
|
||||
#include "lexer.h"
|
||||
#include <stdexcept>
|
||||
#include <string>
|
||||
|
||||
#include <vector>
|
||||
|
||||
|
||||
enum class ColumnType {
|
||||
integer_type,
|
||||
float_type,
|
||||
varchar_type
|
||||
};
|
||||
|
||||
enum class NodeType {
|
||||
create_table,
|
||||
select_from,
|
||||
column_def,
|
||||
not_implemented_yet,
|
||||
error
|
||||
};
|
||||
|
||||
struct Node {
|
||||
NodeType node_type;
|
||||
|
||||
Node(const NodeType type) : node_type(type) {}
|
||||
};
|
||||
|
||||
struct ColDefNode : Node {
|
||||
std::string name;
|
||||
ColumnType type;
|
||||
int length;
|
||||
bool null;
|
||||
|
||||
ColDefNode(const std::string col_name, const ColumnType col_type, int col_len, bool nullable) :
|
||||
Node(NodeType::column_def), name(col_name), type(col_type), length(col_len), null(nullable) {}
|
||||
};
|
||||
|
||||
struct CreateTableNode : Node {
|
||||
std::string table_name;
|
||||
std::vector<ColDefNode> cols_defs;
|
||||
|
||||
CreateTableNode(const std::string name, std::vector<ColDefNode> defs) :
|
||||
Node(NodeType::create_table), table_name(name), cols_defs(defs) {}
|
||||
};
|
||||
|
||||
|
||||
class Parser {
|
||||
private:
|
||||
|
||||
public:
|
||||
Parser();
|
||||
|
||||
std::unique_ptr<Node> parse(const std::string &code);
|
||||
|
||||
private:
|
||||
std::unique_ptr<Node> parse_create_table();
|
||||
std::unique_ptr<Node> parse_select();
|
||||
|
||||
private:
|
||||
Lexer lexer;
|
||||
};
|
||||
Reference in New Issue
Block a user