mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 06:47:34 +00:00
LibSQL: Add Parser::parse_comma_separated_list helper
A quite common semantic emerged for parsing comma-separated expressions: consume(TokenType::ParenOpen); do { // do something if (!match(TokenType::Comma)) break; consume(TokenType::Comma); } while (!match(TokenType::Eof)); consume(TokenType::ParenClose); Add a helper to do the bulk of the while loop.
This commit is contained in:
parent
6a69b8efa7
commit
418884ab64
2 changed files with 39 additions and 95 deletions
|
@ -85,6 +85,25 @@ private:
|
|||
NonnullRefPtr<TableOrSubquery> parse_table_or_subquery();
|
||||
NonnullRefPtr<OrderingTerm> parse_ordering_term();
|
||||
|
||||
template<typename ParseCallback>
|
||||
void parse_comma_separated_list(bool surrounded_by_parentheses, ParseCallback&& parse_callback)
|
||||
{
|
||||
if (surrounded_by_parentheses)
|
||||
consume(TokenType::ParenOpen);
|
||||
|
||||
while (!has_errors() && !match(TokenType::Eof)) {
|
||||
parse_callback();
|
||||
|
||||
if (!match(TokenType::Comma))
|
||||
break;
|
||||
|
||||
consume(TokenType::Comma);
|
||||
};
|
||||
|
||||
if (surrounded_by_parentheses)
|
||||
consume(TokenType::ParenClose);
|
||||
}
|
||||
|
||||
Token consume();
|
||||
Token consume(TokenType type);
|
||||
bool consume_if(TokenType type);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue