From f5d8b7598780d79d49a33e7015696cd34c06f5bd Mon Sep 17 00:00:00 2001 From: attilavs2 Date: Fri, 14 Mar 2025 14:38:41 +0100 Subject: [PATCH] It werks --- TODO.md | 1 - src/exec_common.c | 1 - src/parse_utils.c | 11 ++++++++++- src/parser.h | 2 +- src/parser.l | 5 +++++ src/parser.y | 2 +- 6 files changed, 17 insertions(+), 5 deletions(-) diff --git a/TODO.md b/TODO.md index fb1d8e8..0df24a6 100644 --- a/TODO.md +++ b/TODO.md @@ -1,6 +1,5 @@ tmp: - Finish varuse : ~ - - Fix crash on (newline) - Load files - Benchmarks diff --git a/src/exec_common.c b/src/exec_common.c index 1773c16..985d44c 100644 --- a/src/exec_common.c +++ b/src/exec_common.c @@ -166,7 +166,6 @@ void print_ast(Statement *base){ #if LOG printf("AST :\n"); print_ast1(base, 0); - printf("\n"); #endif } diff --git a/src/parse_utils.c b/src/parse_utils.c index 0e1a1c8..bf614e8 100644 --- a/src/parse_utils.c +++ b/src/parse_utils.c @@ -5,6 +5,7 @@ #include #include "types.h" +#include "config.h" #include "byte_defs.h" #include "code_defs.h" #include "exec_common.h" @@ -56,6 +57,14 @@ Statement *make_iconst(i32 val){ return stat; } +Statement *make_fconst(float val){ + Statement *stat = &stack->statements[stack->curr_statement++]; + stat->type = ST_Const; + stat->cons = (Value){{.v4B = {.vfl=val}},{.is_array=0,.type=T_float}}; + stat->child_n = 0; + return stat; +} + Statement *make_strconst(char *str){ } @@ -144,7 +153,7 @@ Statement *make_operation(i32 type, Tag vtype, char *name, i32 nparam, ...){ #if LOG printf("id : %d\n", ret->id); #endif - if(ret->is_const && ret->type == T_fn){ + if(ret->is_const && ((Tag*)&ret->type)->type == T_fn){ type = ST_Call; stat->func = ret->fnsig; } diff --git a/src/parser.h b/src/parser.h index 4e252f2..2529b6c 100644 --- a/src/parser.h +++ b/src/parser.h @@ -12,8 +12,8 @@ Tag get_type(char *str); Statement *make_iconst(i32 val); -//TODO Statement *make_fconst(float val); +//TODO Statement *make_strconst(char *str); Statement *declare(i32 type, Tag vtype, char *name, Statement *assign); diff --git a/src/parser.l b/src/parser.l index f3ca39f..4910f40 100644 --- a/src/parser.l +++ b/src/parser.l @@ -38,6 +38,11 @@ return G_IDENT; } +[0-9]+"."[0-9]+ { + yylval.st = make_fconst(atof(yytext)); + return CST; + } + [0-9]+ { yylval.st = make_iconst(atoi(yytext)); return CST; diff --git a/src/parser.y b/src/parser.y index 82f2f4c..cc916be 100644 --- a/src/parser.y +++ b/src/parser.y @@ -38,7 +38,7 @@ program: expr_list ';' {print_ast($1);execute($1);} - | expr_list YYEOF {execute($1);} + | expr_list YYEOF {print_ast($1);execute($1);} ; type: