Files
usql/parser.h
2021-06-29 19:28:14 +02:00

64 lines
1.1 KiB
C++

#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;
};