diff options
author | Himbeer <himbeer@disroot.org> | 2024-09-17 10:37:23 +0200 |
---|---|---|
committer | Himbeer <himbeer@disroot.org> | 2024-09-17 18:01:09 +0200 |
commit | 7eb80b416dd7261fb50334a53d0ad48afcd8f04f (patch) | |
tree | e81b919bfc81f0fd6fea1d5803bfcdda86ed9bf6 | |
parent | fd90d274ffc332eef43ce80b24acc89c1419b6cb (diff) |
Add token kind matching lexer function
This function reads the next token, compares its kind to a parameter and
returns a boolean indicating whether it matched. If it did not match,
the token is pushed back into the lexer for later reuse.
-rw-r--r-- | include/lex.h | 1 | ||||
-rw-r--r-- | src/lex.c | 11 |
2 files changed, 12 insertions, 0 deletions
diff --git a/include/lex.h b/include/lex.h index 8b1fdf2..ba1596d 100644 --- a/include/lex.h +++ b/include/lex.h @@ -124,5 +124,6 @@ void lex_finish(struct lexer *lexer); enum lexical_token lex(struct lexer *lexer, struct token *out); void unlex(struct lexer *lexer, const struct token *in); +bool match(struct lexer *lexer, enum lexical_token token); #endif @@ -392,3 +392,14 @@ unlex(struct lexer *lexer, const struct token *in) assert(lexer->un.token == T_NONE); lexer->un = *in; } + +bool +match(struct lexer *lexer, enum lexical_token token) +{ + struct token tmp; + enum lexical_token kind = lex(lexer, &tmp); + if (kind != token) { + unlex(lexer, &tmp); + } + return kind == token; +} |