From b8f7e7b6843c2bff778ce3c74e355a03e7565499 Mon Sep 17 00:00:00 2001 From: Adam NAILI Date: Sun, 3 Jun 2018 15:30:53 +0200 Subject: Functions tables + void functions working (need to work on returns and parameters cause all functions are void here) --- src/tpc.y | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) (limited to 'src/tpc.y') diff --git a/src/tpc.y b/src/tpc.y index 2938094..293f28e 100644 --- a/src/tpc.y +++ b/src/tpc.y @@ -5,9 +5,8 @@ * * TODO : * ------ - * - Gérer les globales avec .bss (Il faut donc décaler le début du programme après l'analyse des globales pour savoir combien de place réserver.) * - Gestion des tableaux - * - Tableau des fonctions + * - Fonctions avec paramètres et retour de fonctions (void fonctions déjà fonctionnelles) * */ @@ -44,7 +43,7 @@ static int num_if = 0; %token OR AND CONST IF ELSE WHILE RETURN VOID PRINT READC READE %token TYPE -%type Exp EB TB FB M E T F +%type Exp EB TB FB M E T F Parametres %type LValue %left ',' @@ -89,22 +88,22 @@ DeclFoncts: ; DeclFonct: EnTeteFonct { scope = LOCAL; } - Corps { scope = GLOBAL; } + Corps { gen_function_end_declaration(); scope = GLOBAL; } ; EnTeteFonct: - TYPE IDENT PrologueCont '(' Parametres ')' -| VOID IDENT PrologueCont '(' Parametres ')' + TYPE IDENT PrologueCont '(' Parametres ')' {gen_function_declaration($2, $1, $5);} +| VOID IDENT PrologueCont '(' Parametres ')' {gen_function_declaration($2, 2, $5);} ; PrologueCont: {gen_prologue_continue(&bss_done);}; Parametres: - VOID -| ListTypVar + VOID {$$ = 0;} +| ListTypVar { $$ = $1;} ; ListTypVar: - ListTypVar ',' TYPE IDENT { gen_declaration($4, $3, scope); } -| TYPE IDENT { gen_declaration($2, $1, scope); } + ListTypVar ',' TYPE IDENT { gen_declaration($4, $3, scope); $$ = $1+1; } +| TYPE IDENT { gen_declaration($2, $1, scope); $$ = 1; } ; Corps: '{' DeclConsts DeclVars SuiteInstr '}' @@ -164,7 +163,7 @@ F: | LValue { $$ = gen_value($1, scope); } | NUM { $$ = gen_num($1, scope); } | CARACTERE { $$ = gen_char($1, scope); } -| IDENT '(' Arguments ')' { $$ = INT; } // tableau d'entiers uniquement +| IDENT '(' Arguments ')' { $$ = gen_function_call($1,$3);} ; LValue: IDENT { gen_read($1, scope); } @@ -172,11 +171,11 @@ LValue: ; Arguments: ListExp -| +| {$$ = 0;} ; ListExp: - ListExp ',' Exp -| Exp + ListExp ',' Exp {$$ = $1 + 1;} +| Exp {$$ = 1;} ; %% -- cgit v1.2.3