#include "parser.h" #include "lexer.h" #include #include inline char* allocate_string(const char* source) { char* destination = malloc(strlen(source) + 1); strcpy(destination, source); return destination; } void parser_create(Parser* parser, Lexer* lexer) { *parser = (Parser) { .lexer = lexer, .current = lexer_next(lexer), }; } ParsedExpr* parser_parse_expression(Parser* parser) { return NULL; } ParsedExpr* parser_parse_operand(Parser* parser) { Token current_token = parser_current(parser); if (!parser_done(parser) && parser_current(parser).type == TokenTypeId) { } else { parser_step(parser); return parsed_expr_allocate(&(ParsedExpr) { .type = ParsedExprTypeError, .error = { .position = current_token.position, .message = allocate_string("expected value"), }, }); } } bool parser_done(const Parser* parser) { return parser->current.type == TokenTypeEof; } Token parser_current(const Parser* parser) { return parser->current; } void parser_step(Parser* parser) { parser->current = lexer_next(parser->lexer); } ParsedExpr* parsed_expr_allocate(const ParsedExpr* source) { ParsedExpr* destination = malloc(sizeof(ParsedExpr)); *destination = *source; return destination; }