#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); } }