#pragma once #include "lexer.h" #include #include #include 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 cols_defs; CreateTableNode(const std::string name, std::vector defs) : Node(NodeType::create_table), table_name(name), cols_defs(defs) {} }; class Parser { private: public: Parser(); std::unique_ptr parse(const std::string &code); private: std::unique_ptr parse_create_table(); std::unique_ptr parse_select(); private: Lexer lexer; };