From 9266d5fc27999609e1c93dd7f896b03878b1364a Mon Sep 17 00:00:00 2001 From: attilavs2 Date: Sat, 8 Mar 2025 21:59:43 +0100 Subject: [PATCH] =?UTF-8?q?Progr=C3=A8s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/parse_utils.c | 10 +++++++--- src/parser.h | 2 ++ src/parser.y | 9 +++++---- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/parse_utils.c b/src/parse_utils.c index a298c3e..0b509b4 100644 --- a/src/parse_utils.c +++ b/src/parse_utils.c @@ -14,6 +14,8 @@ ASTStack *stack; void yyerror(char *s); +Tag ntag = {0,T_null}; + int make_stack(){ stack = malloc(sizeof(ASTStack)+sizeof(Statement)*2048); if(!stack) @@ -53,13 +55,15 @@ Statement *make_iconst(i32 val){ } Statement *declare(i32 type, Tag vtype, char *name){ - puts("declare"); + i32 len = strcspn(name, " \t\n)"); + char *name2 = strndup(name, len); + printf("declare : %s\n", name2); Statement *stat = &stack->statements[stack->curr_statement++]; stat->type = type; - if(hashmap_get(&stack->symbol_map, name)){ + if(hashmap_get(&stack->symbol_map, name2)){ yyerror("Redeclaring existing identifier"); } - MapItem *ret = hashmap_insert(&stack->symbol_map, name); + MapItem *ret = hashmap_insert(&stack->symbol_map, name2); ret->type = *((i32*)&vtype); stat->var_id = ret->id; stat->var_type = vtype; diff --git a/src/parser.h b/src/parser.h index 18fe507..e6ce232 100644 --- a/src/parser.h +++ b/src/parser.h @@ -28,3 +28,5 @@ Statement *make_operation(i32 type, i32 extainf, char *str, i32 nparam, Statement *param, ...); void set_entry_point(Statement *statement); + +extern Tag ntag; diff --git a/src/parser.y b/src/parser.y index 1bb0510..b45c546 100644 --- a/src/parser.y +++ b/src/parser.y @@ -14,7 +14,8 @@ Tag tag; } -%token G_IDENT TYPE_U +%nonassoc G_IDENT +%token TYPE_U %token VEC %token VAR %token LET @@ -59,13 +60,13 @@ expr: '(' G_IDENT ')' {$$ = make_operation(ST_Call, 0, $2, 0, NULL);} | '(' VAR G_IDENT ')' - {Tag ntag = {0,T_null}; $$ = declare(BI_var,ntag,$3);} + { $$ = declare(BI_var,ntag,$3);} | '(' VAR type G_IDENT ')' {$$ = declare(BI_var, $3, $4);} | '(' VAR G_IDENT expr')' - {} + {$$ = declare(BI_var,ntag,$4);} | '(' VAR type G_IDENT expr ')' - {} + {$$ = declare(BI_var,$3,$4);} | '(' LET G_IDENT ')' {} | '(' LET type G_IDENT ')'