lang: ast: implement support for multiple expression terminator tokens

This commit is contained in:
2024-12-07 21:28:25 +00:00
parent 7e3322e2ad
commit e8c30b65b5
12 changed files with 68 additions and 30 deletions

View File

@@ -2,6 +2,33 @@
#include "../node.h"
void expr_add_terminator(struct expr_parser_state *state, unsigned short tok)
{
if (state->s_nr_terminators < EXPR_TERMINATOR_MAX) {
state->s_terminators[state->s_nr_terminators++] = tok;
}
}
void expr_copy_terminators(const struct expr_parser_state *src, struct expr_parser_state *dest)
{
dest->s_nr_terminators = src->s_nr_terminators;
for (unsigned int i = 0; i < src->s_nr_terminators; i++) {
dest->s_terminators[i] = src->s_terminators[i];
}
}
bool expr_terminates_at_token(struct expr_parser_state *state, unsigned short tok)
{
for (unsigned int i = 0; i < EXPR_TERMINATOR_MAX; i++) {
if (state->s_terminators[i] == tok) {
return true;
}
}
return false;
}
static enum ivy_status add_child(
struct parser_state *parent, struct ivy_ast_node *child)
{