wacc/parser.c
SimonFJ20 167ac3d09d burh
2023-02-20 01:22:17 +01:00

58 lines
1.3 KiB
C

#include "parser.h"
#include "lexer.h"
#include <stdlib.h>
#include <string.h>
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;
}