From 88f4ca6ea3cd758faffd7e3e2a70569e365bc707 Mon Sep 17 00:00:00 2001 From: c+1 Date: Sun, 29 Oct 2023 17:38:02 -0400 Subject: halk halk halk --- src/parser.c | 122 +++-------------------------------------------------------- 1 file changed, 6 insertions(+), 116 deletions(-) (limited to 'src/parser.c') diff --git a/src/parser.c b/src/parser.c index c32202e..300f3de 100644 --- a/src/parser.c +++ b/src/parser.c @@ -1,125 +1,15 @@ -#include -#include -#include - -#include "include/token.h" -#include "include/util.h" -#include "include/tree.h" -#include "include/lexer.h" #include "include/parser.h" -parser_t* parser_init(lexer_t* lexer) { +parser_t* parser_init(token_t* token) { parser_t* parser; - parser = calloc(1, sizeof(struct PARSER_STRUC)); - parser->lexer = lexer; - parser->token = lexer_get_next_token(lexer); + parser = emalloc(sizeof(struct PARSER)); + parser->token = token; + parser->tree = NULL; return parser; } -void parser_destroy(parser_t* parser) { free(parser); } - -void parser_token_expect(parser_t* parser, int tokens, ...) { - va_list ap; - va_start(ap, tokens); - for (int i = 0; i < tokens; ++i) { - va_arg(ap, int) == parser->token->type? - parser->token = lexer_get_next_token(parser->lexer): - die( - "unexpected token\n\ttype: [%s]\n\tvalue: [%s]", - token_get_type(parser->token->type), - parser->token->value - ); - } - va_end(ap); -} - -tree_t* parser_parse(parser_t* parser) { return parser_parse_exprs(parser); } - -tree_t* parser_parse_expr(parser_t* parser) { - switch (parser->token->type) { - case TOKEN_DEF_TAG: - return parser_parse_def(parser); - break; - case TOKEN_KEYWORD: - return parser_parse_call(parser); - break; - default: - die("BAD TOKEN"); /* TODO: make more informative error msgs */ - } - - return NULL; /* unreachable */ - /* hopefully */ -} - -tree_t* parser_parse_exprs(parser_t* parser) { - tree_t* comp; - tree_t* statement; - - comp = tree_init(TREE_COMP); - comp->data.comp.value = calloc(1, sizeof(struct TREE_STRUC*)); - - statement = parser_parse_expr(parser); - comp->data.comp.value[0] = statement; - while (parser->token->type == TOKEN_STMNT_END) { - tree_t* statement; - - parser_token_expect(parser, TOKEN_STMNT_END); - - statement = parser_parse_expr(parser); - comp->data.comp.size ++; - comp->data.comp.value = realloc( - comp->data.comp.value, - comp->data.comp.size * sizeof(struct TREE_STRUC) - ); - comp->data.comp.value[comp->data.comp.size - 1] = statement; - } - - return comp; -} - -tree_t* parser_parse_blocks(parser_t* parser) { - -} - -tree_t* parser_parse_block(parser_t* parser) { - -} - -tree_t* parser_parse_def(parser_t* parser) { - tree_t* def; - - def->type = TREE_DEF; - - while (parser->token->type == TOKEN_DEF_TAG) { - def->data.def.tags_size ++; - def->data.def.tags = realloc( - def->data.def.args, - def->data.def.args_size + sizeof(parser->token->value) - ); - } - -} - -tree_t* parser_parse_call(parser_t* parser) { +void parser_destroy(parser_t* parser) { + free(parser); } - -tree_t* parser_parse_type_str(parser_t* parser) { - tree_t* tree; - - tree->type = TREE_TYPE_STR; - tree->data.type_str.value = parser->token->value; - - return tree; -} - -tree_t* parser_parse_type_int(parser_t* parser) { - tree_t* tree; - - tree->type = TREE_TYPE_INT; - tree->data.type_int.value = strtol(parser->token->value, NULL, 10); - - return tree; -} - -- cgit v1.2.3