Some work on parser, not used yet.

This commit is contained in:
eelke 2019-01-28 20:53:10 +01:00
parent 3b482c1c73
commit 39ac8ef02d
5 changed files with 50 additions and 9 deletions

View file

@ -2,16 +2,19 @@
#include "SqlAstSelectList.h"
#include "SqlParser.h"
using namespace SqlAst;
namespace SqlAst {
std::shared_ptr<SqlAst::Select> parseSelect(SqlParser &parser)
{
std::shared_ptr<SqlAst::Select> ast_select = std::make_shared<SqlAst::Select>();
auto ast_select = std::make_shared<SqlAst::Select>();
// parse select list of expression + aliasses, required
auto select_list = parseSelectList(parser);
ast_select->setSelectList(select_list);
// auto select_list = parseSelectList(parser);
// ast_select->setSelectList(select_list);
// parse optional from list
return ast_select;
}
}

View file

@ -33,7 +33,7 @@ SqlParser::SqlParser(SqlLexer &lexer)
}
void SqlParser::parse()
std::shared_ptr<SqlAst::Node> SqlParser::parse()
{
// Basic algo:
// LOOP
@ -41,6 +41,7 @@ void SqlParser::parse()
// IF NOT try_reduce(token)
// THEN SHIFT
// END LOOP
std::shared_ptr<SqlAst::Node> result;
while (true) {
SqlToken token = lexer.nextBasicToken();
if (token.ok) {
@ -57,10 +58,14 @@ void SqlParser::parse()
break;
}
}
else if (token.tokenType == BasicTokenType::End) {
// Are we at the top level?
return result;
}
}
else {
// error during lexical analysis, need to recover
throw std::runtime_error("Unrecognized input");
}
}
}

View file

@ -2,6 +2,7 @@
#define SQLPARSER_H
#include "SqlLexer.h"
#include "SqlAstNode.h"
#include <memory>
#include <optional>
@ -22,6 +23,7 @@ enum class Keyword {
namespace SqlAst {
class Node;
class Select;
class SelectList;
@ -37,7 +39,7 @@ class SqlParser
public:
explicit SqlParser(SqlLexer &lexer);
void parse();
std::shared_ptr<SqlAst::Node> parse();
/** Checks to see if the next token is the expected keyword.
*