compiler/parser.c
2025-02-23 23:46:42 -06:00

36 lines
791 B
C

#include "parser.h"
#include "lexer.h"
#include "assert.h"
struct token_reader {
bool have_token;
struct token token;
struct lexer_state lexer_state;
};
struct token peek(struct token_reader * reader)
{
if (reader->have_token) {
return reader->token;
} else {
reader->token = lexer_next_token(reader->lexer_state);
reader->have_token = true;
return reader->token;
}
}
struct token consume(struct token_reader * reader)
{
struct token token = peek(reader);
reader->have_token = false;
}
void expect_type(struct token_reader * reader, enum token_type token_type)
{
struct token token = consume(reader);
if (!(token->type == token_type)) {
printf("token->type=%d token_type=%d\n", token->type, token_type);
fail(token->type == token_type);
}
}