![]() |
mutable
A Database System for Research and Fast Prototyping
|
#include <Parser.hpp>
Public Types | |
using | follow_set_t = std::array< bool, unsigned(TokenType::TokenType_MAX)+1 > |
Public Member Functions | |
Parser (Lexer &lexer) | |
template<unsigned Idx = 0> | |
const Token & | token () |
bool | is (const TokenType tt) |
bool | no (const TokenType tt) |
Token | consume () |
bool | accept (const TokenType tt) |
bool | expect (const TokenType tt) |
void | recover (const follow_set_t &FS) |
Consumes tokens until the first occurence of a token in the follow set FS is found. | |
template<typename T > | |
std::unique_ptr< T > | recover (Token start, const follow_set_t &FS) |
Consumes tokens until the first occurence of a token in the follow set FS is found. | |
std::unique_ptr< Command > | parse () |
std::unique_ptr< Instruction > | parse_Instruction () |
std::unique_ptr< Stmt > | parse_Stmt () |
std::unique_ptr< Stmt > | parse_CreateDatabaseStmt () |
std::unique_ptr< Stmt > | parse_DropDatabaseStmt () |
std::unique_ptr< Stmt > | parse_UseDatabaseStmt () |
std::unique_ptr< Stmt > | parse_CreateTableStmt () |
std::unique_ptr< Stmt > | parse_DropTableStmt () |
std::unique_ptr< Stmt > | parse_CreateIndexStmt () |
std::unique_ptr< Stmt > | parse_DropIndexStmt () |
std::unique_ptr< Stmt > | parse_SelectStmt () |
std::unique_ptr< Stmt > | parse_InsertStmt () |
std::unique_ptr< Stmt > | parse_UpdateStmt () |
std::unique_ptr< Stmt > | parse_DeleteStmt () |
std::unique_ptr< Stmt > | parse_ImportStmt () |
std::unique_ptr< Clause > | parse_SelectClause () |
std::unique_ptr< Clause > | parse_FromClause () |
std::unique_ptr< Clause > | parse_WhereClause () |
std::unique_ptr< Clause > | parse_GroupByClause () |
std::unique_ptr< Clause > | parse_HavingClause () |
std::unique_ptr< Clause > | parse_OrderByClause () |
std::unique_ptr< Clause > | parse_LimitClause () |
std::unique_ptr< Expr > | parse_Expr (int precedence_lhs=0, std::unique_ptr< Expr > lhs=nullptr) |
std::unique_ptr< Expr > | parse_designator () |
std::unique_ptr< Expr > | expect_integer () |
const Type * | parse_data_type () |
Data Fields | |
Lexer & | lexer |
Diagnostic & | diag |
Private Attributes | |
std::array< Token, 2 > | lookahead_ |
Definition at line 16 of file Parser.hpp.
using m::ast::Parser::follow_set_t = std::array<bool, unsigned(TokenType::TokenType_MAX) + 1> |
Definition at line 18 of file Parser.hpp.
|
inlineexplicit |
Definition at line 28 of file Parser.hpp.
|
inline |
Definition at line 51 of file Parser.hpp.
Referenced by parse_CreateIndexStmt(), parse_CreateTableStmt(), parse_data_type(), parse_DropDatabaseStmt(), parse_DropIndexStmt(), parse_DropTableStmt(), parse_Expr(), parse_FromClause(), parse_GroupByClause(), parse_ImportStmt(), parse_InsertStmt(), parse_LimitClause(), parse_OrderByClause(), parse_SelectClause(), and parse_UpdateStmt().
|
inline |
Definition at line 43 of file Parser.hpp.
References m::ast::Lexer::next().
Referenced by expect_integer(), parse_CreateDatabaseStmt(), parse_CreateIndexStmt(), parse_CreateTableStmt(), parse_data_type(), parse_DeleteStmt(), parse_designator(), parse_DropDatabaseStmt(), parse_DropIndexStmt(), parse_DropTableStmt(), parse_Expr(), parse_FromClause(), parse_GroupByClause(), parse_HavingClause(), parse_ImportStmt(), parse_InsertStmt(), parse_Instruction(), parse_LimitClause(), parse_OrderByClause(), parse_SelectClause(), parse_Stmt(), parse_UpdateStmt(), parse_UseDatabaseStmt(), and parse_WhereClause().
|
inline |
Definition at line 59 of file Parser.hpp.
References m::Diagnostic::e().
Referenced by parse_CreateDatabaseStmt(), parse_CreateIndexStmt(), parse_CreateTableStmt(), parse_data_type(), parse_DeleteStmt(), parse_designator(), parse_DropDatabaseStmt(), parse_DropIndexStmt(), parse_DropTableStmt(), parse_Expr(), parse_FromClause(), parse_GroupByClause(), parse_HavingClause(), parse_ImportStmt(), parse_InsertStmt(), parse_Instruction(), parse_LimitClause(), parse_OrderByClause(), parse_SelectClause(), parse_Stmt(), parse_UpdateStmt(), parse_UseDatabaseStmt(), and parse_WhereClause().
std::unique_ptr< Expr > Parser::expect_integer | ( | ) |
Definition at line 1075 of file Parser.cpp.
References consume(), diag, m::Diagnostic::e(), m::ast::Token::text, and token().
|
inline |
Definition at line 40 of file Parser.hpp.
Referenced by parse_Instruction().
|
inline |
Definition at line 41 of file Parser.hpp.
std::unique_ptr< Command > Parser::parse | ( | ) |
Definition at line 98 of file Parser.cpp.
References parse_Instruction(), parse_Stmt(), and token().
Referenced by m::execute_file(), main(), and m::process_stream().
std::unique_ptr< Stmt > Parser::parse_CreateDatabaseStmt | ( | ) |
Definition at line 192 of file Parser.cpp.
References consume(), expect(), and token().
Referenced by parse_Stmt().
std::unique_ptr< Stmt > Parser::parse_CreateIndexStmt | ( | ) |
Definition at line 395 of file Parser.cpp.
References accept(), m::and, consume(), m::ast::Token::CreateArtificial(), diag, m::Diagnostic::e(), expect(), parse_Expr(), m::ast::Token::text, and token().
Referenced by parse_Stmt().
std::unique_ptr< Stmt > Parser::parse_CreateTableStmt | ( | ) |
Definition at line 258 of file Parser.cpp.
References accept(), consume(), expect(), M_notnull, m::ast::ReferenceConstraint::ON_DELETE_RESTRICT, parse_data_type(), parse_Expr(), recover(), and token().
Referenced by parse_Stmt().
const Type * Parser::parse_data_type | ( | ) |
Definition at line 1089 of file Parser.cpp.
References accept(), consume(), m::ast::Token::CreateArtificial(), diag, m::Diagnostic::e(), expect(), m::Type::Get_Boolean(), m::Type::Get_Char(), m::Type::Get_Date(), m::Type::Get_Datetime(), m::Type::Get_Decimal(), m::Type::Get_Double(), m::Type::Get_Error(), m::Type::Get_Float(), m::Type::Get_Integer(), m::Type::Get_Varchar(), m::Pooled< T, Pool, CanBeNone >::has_value(), m::ast::Token::pos, recover(), m::ast::Token::text, token(), and m::ast::Token::type.
Referenced by parse_CreateTableStmt().
std::unique_ptr< Stmt > Parser::parse_DeleteStmt | ( | ) |
Definition at line 639 of file Parser.cpp.
References consume(), expect(), parse_WhereClause(), and token().
Referenced by parse_Stmt().
std::unique_ptr< Expr > Parser::parse_designator | ( | ) |
Definition at line 1056 of file Parser.cpp.
References consume(), expect(), recover(), and token().
Referenced by parse_Expr().
std::unique_ptr< Stmt > Parser::parse_DropDatabaseStmt | ( | ) |
Definition at line 212 of file Parser.cpp.
References accept(), consume(), expect(), and token().
Referenced by parse_Stmt().
std::unique_ptr< Stmt > Parser::parse_DropIndexStmt | ( | ) |
Definition at line 480 of file Parser.cpp.
References accept(), consume(), expect(), and token().
Referenced by parse_Stmt().
std::unique_ptr< Stmt > Parser::parse_DropTableStmt | ( | ) |
Definition at line 362 of file Parser.cpp.
References accept(), consume(), expect(), and token().
Referenced by parse_Stmt().
std::unique_ptr< Expr > Parser::parse_Expr | ( | int | precedence_lhs = 0 , |
std::unique_ptr< Expr > | lhs = nullptr |
||
) |
Definition at line 966 of file Parser.cpp.
References accept(), args, consume(), diag, m::Diagnostic::e(), expect(), parse_designator(), parse_Expr(), parse_SelectStmt(), recover(), m::ast::Token::text, and token().
Referenced by parse_CreateIndexStmt(), parse_CreateTableStmt(), parse_Expr(), parse_GroupByClause(), parse_HavingClause(), parse_InsertStmt(), parse_OrderByClause(), parse_SelectClause(), parse_UpdateStmt(), and parse_WhereClause().
std::unique_ptr< Clause > Parser::parse_FromClause | ( | ) |
Definition at line 798 of file Parser.cpp.
References accept(), consume(), m::ast::Token::CreateArtificial(), expect(), parse_SelectStmt(), and token().
Referenced by parse_SelectStmt().
std::unique_ptr< Clause > Parser::parse_GroupByClause | ( | ) |
Definition at line 856 of file Parser.cpp.
References accept(), consume(), m::ast::Token::CreateArtificial(), expect(), parse_Expr(), and token().
Referenced by parse_SelectStmt().
std::unique_ptr< Clause > Parser::parse_HavingClause | ( | ) |
Definition at line 887 of file Parser.cpp.
References consume(), expect(), parse_Expr(), and token().
Referenced by parse_SelectStmt().
std::unique_ptr< Stmt > Parser::parse_ImportStmt | ( | ) |
Definition at line 664 of file Parser.cpp.
References accept(), consume(), m::ast::DSVImportStmt::delimiter, diag, m::Diagnostic::e(), m::ast::DSVImportStmt::escape, expect(), m::ast::DSVImportStmt::has_header, m::ast::DSVImportStmt::path, m::ast::DSVImportStmt::quote, m::ast::DSVImportStmt::rows, m::ast::DSVImportStmt::skip_header, m::ast::Token::text, and token().
Referenced by parse_Stmt().
std::unique_ptr< Stmt > Parser::parse_InsertStmt | ( | ) |
Definition at line 545 of file Parser.cpp.
References accept(), consume(), expect(), m::ast::InsertStmt::I_Default, m::ast::InsertStmt::I_Expr, m::ast::InsertStmt::I_Null, parse_Expr(), recover(), and token().
Referenced by parse_Stmt().
std::unique_ptr< Instruction > Parser::parse_Instruction | ( | ) |
Definition at line 106 of file Parser.cpp.
References args, consume(), expect(), m::Catalog::Get(), is(), M_insist, and m::ast::Token::text.
Referenced by m::instruction_from_string(), and parse().
std::unique_ptr< Clause > Parser::parse_LimitClause | ( | ) |
Definition at line 930 of file Parser.cpp.
References accept(), consume(), m::ast::Token::CreateArtificial(), diag, m::Diagnostic::e(), expect(), m::ast::Token::pos, m::ast::Token::text, token(), and m::ast::Token::type.
Referenced by parse_SelectStmt().
std::unique_ptr< Clause > Parser::parse_OrderByClause | ( | ) |
Definition at line 903 of file Parser.cpp.
References accept(), consume(), expect(), parse_Expr(), and token().
Referenced by parse_SelectStmt().
std::unique_ptr< Clause > Parser::parse_SelectClause | ( | ) |
Definition at line 750 of file Parser.cpp.
References accept(), consume(), m::ast::Token::CreateArtificial(), expect(), parse_Expr(), and token().
Referenced by parse_SelectStmt().
std::unique_ptr< Stmt > Parser::parse_SelectStmt | ( | ) |
Definition at line 513 of file Parser.cpp.
References parse_FromClause(), parse_GroupByClause(), parse_HavingClause(), parse_LimitClause(), parse_OrderByClause(), parse_SelectClause(), parse_WhereClause(), and token().
Referenced by parse_Expr(), parse_FromClause(), and parse_Stmt().
std::unique_ptr< Stmt > Parser::parse_Stmt | ( | ) |
Definition at line 133 of file Parser.cpp.
References consume(), diag, m::Diagnostic::e(), expect(), parse_CreateDatabaseStmt(), parse_CreateIndexStmt(), parse_CreateTableStmt(), parse_DeleteStmt(), parse_DropDatabaseStmt(), parse_DropIndexStmt(), parse_DropTableStmt(), parse_ImportStmt(), parse_InsertStmt(), parse_SelectStmt(), parse_UpdateStmt(), parse_UseDatabaseStmt(), m::ast::Token::text, and token().
Referenced by m::command_from_string(), main(), parse(), and m::statement_from_string().
std::unique_ptr< Stmt > Parser::parse_UpdateStmt | ( | ) |
Definition at line 600 of file Parser.cpp.
References accept(), consume(), expect(), parse_Expr(), parse_WhereClause(), and token().
Referenced by parse_Stmt().
std::unique_ptr< Stmt > Parser::parse_UseDatabaseStmt | ( | ) |
Definition at line 241 of file Parser.cpp.
References consume(), expect(), and token().
Referenced by parse_Stmt().
std::unique_ptr< Clause > Parser::parse_WhereClause | ( | ) |
Definition at line 840 of file Parser.cpp.
References consume(), expect(), parse_Expr(), and token().
Referenced by parse_DeleteStmt(), parse_SelectStmt(), and parse_UpdateStmt().
|
inline |
Consumes tokens until the first occurence of a token in the follow set FS
is found.
Definition at line 66 of file Parser.hpp.
References and().
Referenced by parse_CreateTableStmt(), parse_data_type(), parse_designator(), parse_Expr(), and parse_InsertStmt().
|
inline |
Consumes tokens until the first occurence of a token in the follow set FS
is found.
Constructs an object of type T
on start
and returns a unique pointer to it. Here, type T
is either ErrorStmt
or ErrorClause
.
Definition at line 72 of file Parser.hpp.
|
inline |
Definition at line 38 of file Parser.hpp.
Referenced by m::execute_file(), expect_integer(), main(), parse(), parse_CreateDatabaseStmt(), parse_CreateIndexStmt(), parse_CreateTableStmt(), parse_data_type(), parse_DeleteStmt(), parse_designator(), parse_DropDatabaseStmt(), parse_DropIndexStmt(), parse_DropTableStmt(), parse_Expr(), parse_FromClause(), parse_GroupByClause(), parse_HavingClause(), parse_ImportStmt(), parse_InsertStmt(), parse_LimitClause(), parse_OrderByClause(), parse_SelectClause(), parse_SelectStmt(), parse_Stmt(), parse_UpdateStmt(), parse_UseDatabaseStmt(), parse_WhereClause(), and m::process_stream().
Diagnostic& m::ast::Parser::diag |
Definition at line 22 of file Parser.hpp.
Referenced by expect_integer(), parse_CreateIndexStmt(), parse_data_type(), parse_Expr(), parse_ImportStmt(), parse_LimitClause(), and parse_Stmt().
Lexer& m::ast::Parser::lexer |
Definition at line 21 of file Parser.hpp.
|
private |
Definition at line 25 of file Parser.hpp.