From 8dd1bf3637c0d01816bbd48b28c02e9791243d35 Mon Sep 17 00:00:00 2001 From: c+1 Date: Wed, 10 May 2023 07:53:59 -0400 Subject: THE halk --- src/include/tree.h | 4 ++-- src/main.c | 4 ++++ src/parser.c | 20 ++++++++++---------- src/tree.c | 27 ++++++++++++++------------- 4 files changed, 30 insertions(+), 25 deletions(-) (limited to 'src') diff --git a/src/include/tree.h b/src/include/tree.h index 1cf029c..e42f761 100644 --- a/src/include/tree.h +++ b/src/include/tree.h @@ -24,7 +24,7 @@ typedef struct TREE_STRUC { struct var_def_struc { char* name; struct TREE_STRUC* val; - int is_const; + int* is_const; } var_def; struct var_struc { @@ -49,7 +49,7 @@ typedef struct TREE_STRUC { } str; struct subtree_struc { - struct TREE_STRUC* val; + struct TREE_STRUC** val; size_t size; } subtree; diff --git a/src/main.c b/src/main.c index 6a45767..2d741e4 100644 --- a/src/main.c +++ b/src/main.c @@ -1,5 +1,9 @@ #include + + #include "include/lexer.h" +#include "include/tree.h" + int main(int argc, char* argv[]) { lexer_t* lexer = lexer_init( diff --git a/src/parser.c b/src/parser.c index c7f2851..4468997 100644 --- a/src/parser.c +++ b/src/parser.c @@ -5,7 +5,7 @@ #include #include -/* + // initialize a parser parser_t* parser_init(lexer_t* lexer) { parser_t* parser = calloc(1, sizeof(struct PARSER_STRUC)); @@ -21,7 +21,7 @@ void parser_check_expect(parser_t* parser, int token_type) { if (parser->token->type == token_type) { parser->token = lexer_get_next_token(parser->lexer); } else { - printf("[ERRR] PARSE ERROR at %d\n\tUnexpected token '%s' with type '%d'.", + printf("[ERRR] [%d]\n\tUnexpected token '%s' with type '%d'.", parser->lexer->i, parser->token->value, parser->token->type); exit(1); @@ -56,25 +56,25 @@ tree_t* parser_parse_chunks(parser_t* parser) { tree_t* subtree = tree_init(TREE_SUBTREE); // initialize the subtree_val with unit size - subtree->subtree_val = calloc(1, sizeof(struct TREE_STRUC)); + subtree->data.subtree.size = calloc(1, sizeof(struct TREE_STRUC)); tree_t* tree_chunk = parser_parse_chunk(parser); - subtree->subtree_val[0] = tree_chunk; + subtree->data.subtree.val[0] = tree_chunk; while (parser->token->type == TOKEN_SEMI) { // expect semicolon parser_check_expect(parser, TOKEN_SEMI); // make room for new subtree - subtree->subtree_size ++; - subtree->subtree_val = realloc( - subtree->subtree_val, - subtree->subtree_size * sizeof(struct TREE_STRUC) + subtree->data.subtree.size ++; + subtree->data.subtree.val = realloc( + subtree->data.subtree.val, + subtree->data.subtree.size * sizeof(struct TREE_STRUC) ); // add to end of list - subtree->subtree_val[subtree->subtree_size - 1] = tree_chunk; + subtree->data.subtree.val[subtree->data.subtree.size - 1] = tree_chunk; } return subtree; @@ -91,4 +91,4 @@ tree_t* parser_parse_fn_call(parser_t* parser); tree_t* parser_parse_var(parser_t* parser); tree_t* parser_parse_str(parser_t* parser); -*/ + diff --git a/src/tree.c b/src/tree.c index 338ab24..b7677d3 100644 --- a/src/tree.c +++ b/src/tree.c @@ -7,27 +7,28 @@ tree_t* tree_init(int type) { switch (type) { case TREE_VAR_DEF: - tree->data.var_def.name = NULL; - tree->data.var_def.val = NULL; + tree->data.var_def.name = NULL; + tree->data.var_def.val = NULL; + tree->data.var_def.is_const = 0; break; case TREE_VAR: - tree->data.var.name = NULL; + tree->data.var.name = NULL; break; case TREE_FN_DEF: - tree->data.fn_def.name = NULL; - tree->data.fn_def.val = NULL; - tree->data.fn_def.argv = NULL; - tree->data.fn_def.argsize = 0; + tree->data.fn_def.name = NULL; + tree->data.fn_def.val = NULL; + tree->data.fn_def.argv = NULL; + tree->data.fn_def.argsize = 0; break; case TREE_FN_CALL: - tree->data.fn_call.name = NULL; - tree->data.fn_call.argv = NULL; - tree->data.fn_call.argsize = 0; + tree->data.fn_call.name = NULL; + tree->data.fn_call.argv = NULL; + tree->data.fn_call.argsize = 0; break; case TREE_STR: - tree->data.str.val = NULL; - tree->data.subtree.val = NULL; - tree->data.subtree.size = 0; + tree->data.str.val = NULL; + tree->data.subtree.val = NULL; + tree->data.subtree.size = 0; break; } -- cgit v1.2.3