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

@ -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");
}
}
}