Some work on parser, not used yet.
This commit is contained in:
parent
3b482c1c73
commit
39ac8ef02d
5 changed files with 50 additions and 9 deletions
|
|
@ -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");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue