From 9f3b46522acd7800865e179e084111aa9251fd76 Mon Sep 17 00:00:00 2001
From: Audric Bonneau <audric.bonneau@etu.unistra.fr>
Date: Tue, 24 Dec 2024 12:32:31 +0100
Subject: [PATCH 1/5] =?UTF-8?q?Debut=20d'impl=C3=A9mentation=20ND=20arrays?=
 =?UTF-8?q?=20->=20allocate=20an=20array=20to=20stock=20the=20size?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Codes_en_COREC/tests/test10.corec         |  2 +-
 Codes_en_COREC/tests/test11.corec         |  2 +-
 Codes_en_COREC/tests/test12.corec         |  2 +-
 Codes_en_COREC/tests/test3.corec          |  5 +-
 Codes_en_COREC/tests/test4.corec          |  2 +-
 Codes_en_COREC/tests/test5.corec          | 61 ++++++++++++++++-------
 Codes_en_COREC/tests/test6.corec          | 24 +++++++--
 Codes_en_COREC/tests/test7.corec          | 12 ++++-
 Codes_en_COREC/tests/test8.corec          |  2 +-
 Codes_en_COREC/tests/test9.corec          |  2 +-
 Codes_en_COREC/testsErrors/test1Err.corec |  2 +-
 Codes_en_COREC/testsErrors/test2Err.corec |  2 +-
 Codes_en_COREC/testsErrors/test3Err.corec |  2 +-
 Codes_en_COREC/testsErrors/test4Err.corec |  2 +-
 Codes_en_COREC/testsErrors/test5Err.corec |  2 +-
 Codes_en_COREC/testsErrors/test6Err.corec |  2 +-
 Codes_en_COREC/testsErrors/test7Err.corec |  2 +-
 Codes_en_COREC/testsErrors/test8Err.corec |  2 +-
 Codes_en_COREC/testsErrors/test9Err.corec |  2 +-
 Makefile                                  |  2 +-
 README.md                                 | 18 +++++--
 corec.l                                   | 10 ++--
 corec.y                                   | 18 +++++--
 docs/tests.md                             |  4 +-
 lib.c                                     | 53 ++++++++++++++++----
 lib.h                                     |  4 +-
 26 files changed, 174 insertions(+), 67 deletions(-)

diff --git a/Codes_en_COREC/tests/test10.corec b/Codes_en_COREC/tests/test10.corec
index 5dbec42..559c314 100644
--- a/Codes_en_COREC/tests/test10.corec
+++ b/Codes_en_COREC/tests/test10.corec
@@ -1 +1 @@
-// Call multiple function
+// Call function arguments in out inout
diff --git a/Codes_en_COREC/tests/test11.corec b/Codes_en_COREC/tests/test11.corec
index 64dab45..5dbec42 100644
--- a/Codes_en_COREC/tests/test11.corec
+++ b/Codes_en_COREC/tests/test11.corec
@@ -1 +1 @@
-// Call function with the 2nd syntax
+// Call multiple function
diff --git a/Codes_en_COREC/tests/test12.corec b/Codes_en_COREC/tests/test12.corec
index 131ce31..64dab45 100644
--- a/Codes_en_COREC/tests/test12.corec
+++ b/Codes_en_COREC/tests/test12.corec
@@ -1 +1 @@
-// Call function recursive
+// Call function with the 2nd syntax
diff --git a/Codes_en_COREC/tests/test3.corec b/Codes_en_COREC/tests/test3.corec
index ff8cabe..26783eb 100644
--- a/Codes_en_COREC/tests/test3.corec
+++ b/Codes_en_COREC/tests/test3.corec
@@ -1,10 +1,11 @@
-// Aff arrays
+// Aff 1D arrays
 
 prog Test3 {
     def Main{
         Loc : (array1,5), (array2,2+4/2)
         Rec : {
-            array1 = 1; // Implicitement array1[0]
+
+            array1 = 1.0; // Implicitement array1[0]
             array1[4] = 2;
 
             array2[0] = 1.15;
diff --git a/Codes_en_COREC/tests/test4.corec b/Codes_en_COREC/tests/test4.corec
index cf9ee6e..48f52ec 100644
--- a/Codes_en_COREC/tests/test4.corec
+++ b/Codes_en_COREC/tests/test4.corec
@@ -1,4 +1,4 @@
-// Opp on arrays
+// Opp on 1D arrays
 
 prog Test4 {
     def Main{
diff --git a/Codes_en_COREC/tests/test5.corec b/Codes_en_COREC/tests/test5.corec
index c984638..cf9ee6e 100644
--- a/Codes_en_COREC/tests/test5.corec
+++ b/Codes_en_COREC/tests/test5.corec
@@ -1,25 +1,52 @@
-// Conditions (if else ternaire..)
+// Opp on arrays
 
-prog test5{
-    def Main {
+prog Test4 {
+    def Main{
+        Loc : (array,3)
         Rec : {
-            a = 10;
-            b = 2;
+            array[0] = 2;
 
-            printstr("a = 10 | b = 2");
-            printstr("a<b ?");
+            array[0] += 2;
+            printstr("Attendu 4 :");
+            print((array,3));
+            array[0] -= 2;
+            printstr("Attendu 2 :");
+            print((array,3));
+            array[0] /= 2;
+            printstr("Attendu 1 :");
+            print((array,3));
+            array[0] *= 2;
+            printstr("Attendu 2 :");
+            print((array,3));
+            
+            array[1] = array[0] + 3;
+            printstr("Attendu 5 :");
+            print((array,3));
 
-            a>b?
-            {
-                printstr("oui")
-            }
-            :printstr("non");
+            array[1] = array[0] - 3;
+            printstr("Attendu 2 :");
+            print((array,3));
 
-            printstr("b egal a 2 ?");
-            b==2?
-            {
-                printstr("oui")
-            }:
+            array[1] = array[0] / 3;
+            printstr("Attendu 0.66 :");
+            print((array,3));
+            array[1] = array[0] * 3;
+            printstr("Attendu 2.00 :");
+            print((array,3));
+            
+            
+            array[2] = array[0] + array[1];
+            printstr("Attendu 4 :");
+            print((array,3));
+            array[2] = array[0] - array[1];
+            printstr("Attendu 0 :");
+            print((array,3));
+            array[2] = array[0] / array[1];
+            printstr("Attendu 1 :");
+            print((array,3));
+            array[2] = array[0] * array[1];
+            printstr("Attendu 4 :");
+            print((array,3))
         }
     }
 }
diff --git a/Codes_en_COREC/tests/test6.corec b/Codes_en_COREC/tests/test6.corec
index a183de2..c984638 100644
--- a/Codes_en_COREC/tests/test6.corec
+++ b/Codes_en_COREC/tests/test6.corec
@@ -1,11 +1,25 @@
 // Conditions (if else ternaire..)
 
-prog test4 {
-        def Main {
+prog test5{
+    def Main {
         Rec : {
-            printstr("Saisie clavie :");
-            read(saisie);
-            print(saisie)
+            a = 10;
+            b = 2;
+
+            printstr("a = 10 | b = 2");
+            printstr("a<b ?");
+
+            a>b?
+            {
+                printstr("oui")
+            }
+            :printstr("non");
+
+            printstr("b egal a 2 ?");
+            b==2?
+            {
+                printstr("oui")
+            }:
         }
     }
 }
diff --git a/Codes_en_COREC/tests/test7.corec b/Codes_en_COREC/tests/test7.corec
index 0c8d007..a183de2 100644
--- a/Codes_en_COREC/tests/test7.corec
+++ b/Codes_en_COREC/tests/test7.corec
@@ -1 +1,11 @@
-// For with Dom
+// Conditions (if else ternaire..)
+
+prog test4 {
+        def Main {
+        Rec : {
+            printstr("Saisie clavie :");
+            read(saisie);
+            print(saisie)
+        }
+    }
+}
diff --git a/Codes_en_COREC/tests/test8.corec b/Codes_en_COREC/tests/test8.corec
index 2cef160..0c8d007 100644
--- a/Codes_en_COREC/tests/test8.corec
+++ b/Codes_en_COREC/tests/test8.corec
@@ -1 +1 @@
-// Call function
+// For with Dom
diff --git a/Codes_en_COREC/tests/test9.corec b/Codes_en_COREC/tests/test9.corec
index 559c314..2cef160 100644
--- a/Codes_en_COREC/tests/test9.corec
+++ b/Codes_en_COREC/tests/test9.corec
@@ -1 +1 @@
-// Call function arguments in out inout
+// Call function
diff --git a/Codes_en_COREC/testsErrors/test1Err.corec b/Codes_en_COREC/testsErrors/test1Err.corec
index f22af3e..cb2ba05 100644
--- a/Codes_en_COREC/testsErrors/test1Err.corec
+++ b/Codes_en_COREC/testsErrors/test1Err.corec
@@ -1,5 +1,5 @@
 
-prog Test4 {
+prog Test1Err {
     def Main{
     }
 }
diff --git a/Codes_en_COREC/testsErrors/test2Err.corec b/Codes_en_COREC/testsErrors/test2Err.corec
index acf9691..cc01f56 100644
--- a/Codes_en_COREC/testsErrors/test2Err.corec
+++ b/Codes_en_COREC/testsErrors/test2Err.corec
@@ -1,4 +1,4 @@
-prog Test2 {
+prog Test2Err {
     def Main{
         Rec : {
         }
diff --git a/Codes_en_COREC/testsErrors/test3Err.corec b/Codes_en_COREC/testsErrors/test3Err.corec
index b4f816b..4588040 100644
--- a/Codes_en_COREC/testsErrors/test3Err.corec
+++ b/Codes_en_COREC/testsErrors/test3Err.corec
@@ -1,4 +1,4 @@
-prog Test3 {
+prog Test3Err {
     def Main{
         Loc : a, a=2, b // a deja declaré
         Rec : {
diff --git a/Codes_en_COREC/testsErrors/test4Err.corec b/Codes_en_COREC/testsErrors/test4Err.corec
index 6f8d058..4debeec 100644
--- a/Codes_en_COREC/testsErrors/test4Err.corec
+++ b/Codes_en_COREC/testsErrors/test4Err.corec
@@ -1,4 +1,4 @@
-prog Test4 {
+prog Test4Err {
     def T{ []
         Loc : a, c=2, b 
         Rec : {
diff --git a/Codes_en_COREC/testsErrors/test5Err.corec b/Codes_en_COREC/testsErrors/test5Err.corec
index d5bf1c6..4ba3547 100644
--- a/Codes_en_COREC/testsErrors/test5Err.corec
+++ b/Codes_en_COREC/testsErrors/test5Err.corec
@@ -1,4 +1,4 @@
-prog Test5 {
+prog Test5Err {
     def T{ []
         Loc : a, c=2, b 
         Rec : {
diff --git a/Codes_en_COREC/testsErrors/test6Err.corec b/Codes_en_COREC/testsErrors/test6Err.corec
index 9ed736d..2d6d501 100644
--- a/Codes_en_COREC/testsErrors/test6Err.corec
+++ b/Codes_en_COREC/testsErrors/test6Err.corec
@@ -1,4 +1,4 @@
-prog Test6 {
+prog Test6Err {
     def Main{ 
         Loc : a
         Rec : {
diff --git a/Codes_en_COREC/testsErrors/test7Err.corec b/Codes_en_COREC/testsErrors/test7Err.corec
index 185e886..d55f3a1 100644
--- a/Codes_en_COREC/testsErrors/test7Err.corec
+++ b/Codes_en_COREC/testsErrors/test7Err.corec
@@ -1,4 +1,4 @@
-prog Test7 {
+prog Test7Err {
     def Main{ 
         Loc : 
         Rec : {
diff --git a/Codes_en_COREC/testsErrors/test8Err.corec b/Codes_en_COREC/testsErrors/test8Err.corec
index 0467165..1dcbc63 100644
--- a/Codes_en_COREC/testsErrors/test8Err.corec
+++ b/Codes_en_COREC/testsErrors/test8Err.corec
@@ -1,4 +1,4 @@
-prog Test8 {
+prog Test8Err {
     def T{ []
         Loc : (array,1)
         Rec : {
diff --git a/Codes_en_COREC/testsErrors/test9Err.corec b/Codes_en_COREC/testsErrors/test9Err.corec
index 34a1d28..041b672 100644
--- a/Codes_en_COREC/testsErrors/test9Err.corec
+++ b/Codes_en_COREC/testsErrors/test9Err.corec
@@ -1,4 +1,4 @@
-prog Test9 {
+prog Test9Err {
     def Main{ 
         Loc : (array,5)
         Rec : {
diff --git a/Makefile b/Makefile
index a148896..c2aff38 100644
--- a/Makefile
+++ b/Makefile
@@ -47,7 +47,7 @@ test_corec: allDev
 	./$(Compilateur_COREC) -tos < $(DIR_IN)/ProdMat.corec 		> $(DIR_OUT)/output6.asm
 	./$(Compilateur_COREC) -tos < $(DIR_IN)/SystTriang.corec 	> $(DIR_OUT)/output7.asm
 
-test: allDev
+test: all
 	./$(Compilateur_COREC) -tos -o $(DIR_OUT)/output$(num).asm < $(DIR_IN)/tests/test$(num).corec	
 
 testErr: all
diff --git a/README.md b/README.md
index 11d6a7e..7f8a3fb 100644
--- a/README.md
+++ b/README.md
@@ -37,18 +37,30 @@ sudo apt install bison
         Download [MARS : MIPS java simulator on moodle unistra](https://moodle.unistra.fr/pluginfile.php/916605/mod_folder/content/0/Mars4_5.jar?forcedownload=1).
 
 ## Implemented Features
-### Branche gencode_1
+### Branch gencode_1
 - Definition of local variable in the loc section of functions. **(TO DO :TRANSLATE IN MIPS)**
 - Affectation of float and integer value. **(TO DO :TRANSLATE IN MIPS)**
 - Print and printstr functions. **(TO DO :TRANSLATE IN MIPS)**
-### Branche gencode_2
+### Branch gencode_2
 - Operation on variable (except arrays) -> (+,-,*,/). **(TO DO :TRANSLATE IN MIPS)**
 - Assignement operation on variable (except arrays) -> (+=,-=,*=,/=). **(TO DO :TRANSLATE IN MIPS)**
-### Branche gencode_3
+### Branch gencode_3-4
 - Affectation and definition of local 1D array. **(TO DO :TRANSLATE IN MIPS)**
 - Operation with and on local 1D array. **(TO DO :TRANSLATE IN MIPS)**
 - print function works on array **(NEED TO VERIFY IF THE SHAPE IS GOOD)**. **(TO DO :TRANSLATE IN MIPS)**
 
+- Multi dimensional array. **(TO BE SOON)** **(TO DO :TRANSLATE IN MIPS)**
+
+## To Do
+- To be soon : Arrays are implictly float number.
+- To be soon : Float are array of dim 1 and length 1.
+1. Translate intermediate code of the gencode_1 branch in mips.
+2. Translate intermediate code of the gencode_2 branch in mips.
+3. Translate intermediate code of the gencode_3 branch in mips.
+4. Add to the symtable in the beginning of the programm COREC key words (def, prog, Loc, Rec, ...) to recognize without the lex.
+
+
+
 ## Makefile commands
 - `make`           -> compile the source files
 - `compil`         -> run project executable on the [input.txt file](./../input.txt), create and write the result on `output/output.asm` file.
diff --git a/corec.l b/corec.l
index d97b2c9..0935e26 100644
--- a/corec.l
+++ b/corec.l
@@ -64,21 +64,21 @@ in            {return in_dom;}
 "%"           {return mod;}
 
 ([0-9]*[[:alpha:]]+|[[:alpha:]])[[:alnum:]]*        {
-                                                        if ( yyleng > 31 )
+                                                        if ( yyleng > 63 )
                                                             fprintf(stderr,"Error at line %u: Identifier '%s' too long (> 31), truncated.\n",lineNumber,yytext);
-                                                        strncpy(yylval.strval,yytext,31);
-                                                        yylval.strval[31] = '\0';
+                                                        strncpy(yylval.strval,yytext,63);
+                                                        yylval.strval[64] = '\0';
                                                         return ID;
                                                     }
 ["]([^"]|[\\]["])*["]                   {
                                             if ( yyleng > 1023 )
                                                 fprintf(stderr,"Error at line %u: Identifier '%s' too long (> 1023), truncated\n",lineNumber,yytext);
                                             strncpy(yylval.strval,yytext,1023);
-                                            yylval.strval[1023] = '\0';
+                                            yylval.strval[1024] = '\0';
                                             return chaine;
                                         }
                                         
-(([1-9][0-9]*)|0)[.][0-9]*[1-9]         {yylval.floatval = atof(yytext); return flottant;}
+(([1-9][0-9]*)|0)[.](([0-9]*[1-9])|[0]+)         {yylval.floatval = atof(yytext); return flottant;}
 [1-9][0-9]*|0                           {yylval.intval = atoi(yytext); return entier;}
 
 [[:space:]] ;
diff --git a/corec.y b/corec.y
index 67c4689..c2fd007 100644
--- a/corec.y
+++ b/corec.y
@@ -183,11 +183,19 @@ ARRAY :
 DLIST : 
     DLIST comma E
         {
+            if($3.ptr->kind == CONSTANT_DOUBLE){
+                fprintf(stderr, "Error at line %u in function '%s': Try to allocate an array with a float length value.\n",lineNumber,symb_scope_function->u.name);
+                exit(1);
+            }
             $$.ptr = newtemp(SYMTAB);
             gencode(CODE,BOP_PLUS,$$.ptr,$1.ptr,$3.ptr);
         }
     | E
         {
+            if($1.ptr->kind == CONSTANT_DOUBLE){
+                fprintf(stderr, "Error at line %u in function '%s': Try to allocate an array with a float length value.\n",lineNumber,symb_scope_function->u.name);
+                exit(1);
+            }
             $$.ptr = $1.ptr;
         }
     ;
@@ -447,13 +455,15 @@ ARRAYREF : ID left_bracket ELIST right_bracket
             
             // ELIST >= 0 && CONSTANT_INT
             if($3.ptr->kind == CONSTANT_DOUBLE){
-                fprintf(stderr, "Error at line %u in function '%s': Array '%s' can not be reached with a float number\n",lineNumber,symb_scope_function->u.name,$1);
+                fprintf(stderr, "Error at line %u in function '%s': Array '%s' can not be accessed with a float number\n",lineNumber,symb_scope_function->u.name,$1);
                 exit(1);
             }
             else if($3.ptr->kind == CONSTANT_INT){
-                if($3.ptr->u.value_int >= $$.ptr1->u.arr.size->u.value_int){
-                    fprintf(stderr, "Error at line %u in function '%s': Array '%s' can not be reached with a number superior than the size of the array\n",lineNumber,symb_scope_function->u.name,$1);
-                    exit(1);
+                if($$.ptr1->u.arr.size[0]->kind == CONSTANT_INT){
+                    if($3.ptr->u.value_int >= $$.ptr1->u.arr.size[0]->u.value_int){
+                        fprintf(stderr, "Error at line %u in function '%s': Array '%s' can not be accessed with a number superior than the size of the array\n",lineNumber,symb_scope_function->u.name,$1);
+                        exit(1);
+                    }
                 }
             }
 
diff --git a/docs/tests.md b/docs/tests.md
index c218837..6094bc1 100644
--- a/docs/tests.md
+++ b/docs/tests.md
@@ -21,7 +21,9 @@
 7. Array isn't declared.
 8. Scope of local array.
 9. Out of range in a local array.
-10. 
+10. Reached array memory with a float value.
+11. Allocate a array with a float value.
+12. 
 
 ## Navigation
 Return to the main documentation -> [click here](./../README.md).
\ No newline at end of file
diff --git a/lib.c b/lib.c
index ffe039f..8828fe3 100644
--- a/lib.c
+++ b/lib.c
@@ -4,8 +4,16 @@
 struct symtable * symtable_new()
 {
     struct symtable * t = malloc(sizeof(struct symtable));
+    if(t == NULL){
+        fprintf(stderr,"Bug memory allocation failed\n");
+        exit(1);
+    }
     t->capacity = 1024;
     t->symbols = malloc(t->capacity*sizeof(struct symbol));
+    if(t->symbols  == NULL){
+        fprintf(stderr,"Bug memory allocation failed\n");
+        exit(1);
+    }
     t->temporary = 0;
     t->size = 0;
     return t;
@@ -25,7 +33,13 @@ static void symtable_grow(struct symtable * t)
 struct symbol* symtable_const_int(struct symtable * t, long int v) 
 {
     unsigned int i;
-    for ( i=0 ; i<t->size && t->symbols[i].u.value_int != v; i++ );
+    for ( i=0 ; i<t->size; i++ ){
+        if(t->symbols[i].kind == CONSTANT_INT){
+            if(t->symbols[i].u.value_int == v){
+                break;
+            }
+        }
+    }
     if(i==t->size)
     {
         if(t->size==t->capacity)
@@ -45,7 +59,13 @@ struct symbol* symtable_const_int(struct symtable * t, long int v)
 struct symbol* symtable_const_double(struct symtable * t, double v) 
 {
     unsigned int i;
-    for ( i=0 ; i<t->size && t->symbols[i].u.value_double != v; i++ );
+    for ( i=0 ; i<t->size; i++ ){
+        if(t->symbols[i].kind == CONSTANT_DOUBLE){
+            if(t->symbols[i].u.value_int == v){
+                break;
+            }
+        }
+    }
     if(i==t->size)
     {
         if(t->size==t->capacity)
@@ -118,7 +138,12 @@ struct symbol* symtable_put_array(struct symtable * t, const char * var_id, stru
       symtable_grow(t);
     struct symbol *s = &(t->symbols[t->size]);
     s->kind = ARRAY;
-    s->u.arr.size = size;
+    s->u.arr.size = (struct symbol**) calloc(5,sizeof(struct symbol*));
+    if(s->u.arr.size == NULL){
+        fprintf(stderr,"Bug memory allocation failed\n");
+        exit(1);
+    }
+    s->u.arr.size[0] = size;
     strcpy(s->u.arr.name,var_id);
     strcpy(s->scope_function,func_id->u.name);
     ++ (t->size);
@@ -142,15 +167,15 @@ void symtable_dump(struct symtable * t, FILE* fout)
         fprintf(fout,"#       %p = %s\n",&(t->symbols[i]),t->symbols[i].u.chaine);
       else if(t->symbols[i].kind==ARRAY){
         fprintf(fout,"#       %p = (%s,",&(t->symbols[i]),t->symbols[i].u.arr.name);
-        if(t->symbols[i].u.arr.size->kind == NAME_LOC || t->symbols[i].u.arr.size->kind == NAME)
-            fprintf(fout,"%s",t->symbols[i].u.arr.size->u.name);
-        else if(t->symbols[i].u.arr.size->kind == CONSTANT_INT)
-            fprintf(fout,"%ld",t->symbols[i].u.arr.size->u.value_int);
-        else if(t->symbols[i].u.arr.size->kind == CONSTANT_DOUBLE)
-            fprintf(fout,"%0.2lf",t->symbols[i].u.arr.size->u.value_double);
+        if(t->symbols[i].u.arr.size[0]->kind == NAME_LOC || t->symbols[i].u.arr.size[0]->kind == NAME)
+          fprintf(fout,"%s",t->symbols[i].u.arr.size[0]->u.name);
+        else if(t->symbols[i].u.arr.size[0]->kind == CONSTANT_INT)
+          fprintf(fout,"%ld",t->symbols[i].u.arr.size[0]->u.value_int);
+        else if(t->symbols[i].u.arr.size[0]->kind == CONSTANT_DOUBLE)
+          fprintf(fout,"%0.2lf",t->symbols[i].u.arr.size[0]->u.value_double);
         else{
-            printf("BUG array size kind:%d\n",t->symbols[i].u.arr.size->kind); 
-            exit(1);
+          printf("BUG array size kind:%d\n",t->symbols[i].u.arr.size[0]->kind); 
+          exit(1);
         }
         fprintf(fout,") (in the scope of the '%s' function)\n",t->symbols[i].scope_function);
       }
@@ -160,6 +185,12 @@ void symtable_dump(struct symtable * t, FILE* fout)
 
 void symtable_free(struct symtable * t)
 {
+    for (unsigned int i=0 ; i<t->size; i++ ){
+        if(t->symbols[i].kind == ARRAY){
+            if(t->symbols[i].u.arr.size != NULL)
+                free(t->symbols[i].u.arr.size);
+        }
+    }
     free(t->symbols);
     free(t);
 }
diff --git a/lib.h b/lib.h
index c5f2003..0201f5c 100644
--- a/lib.h
+++ b/lib.h
@@ -8,12 +8,12 @@ extern struct symbol* symb_scope_function;
 
 /* TABLE DES SYMBOLES */
 
-typedef char name_t[32];
+typedef char name_t[64];
 typedef char name_64_t[1024];
 
 struct array {
   name_t name;
-  struct symbol* size;
+  struct symbol** size;
 };
 
 // Struct symbol -> store a symbol
-- 
GitLab


From a47a62a365c81bcfb8566951dd784ebd05c018f9 Mon Sep 17 00:00:00 2001
From: Audric Bonneau <audric.bonneau@etu.unistra.fr>
Date: Tue, 24 Dec 2024 12:33:18 +0100
Subject: [PATCH 2/5] Nv tests err sur les arrays

---
 Codes_en_COREC/tests/test13.corec          | 1 +
 Codes_en_COREC/testsErrors/test10Err.corec | 8 ++++++++
 Codes_en_COREC/testsErrors/test11Err.corec | 8 ++++++++
 3 files changed, 17 insertions(+)
 create mode 100644 Codes_en_COREC/tests/test13.corec
 create mode 100644 Codes_en_COREC/testsErrors/test10Err.corec
 create mode 100644 Codes_en_COREC/testsErrors/test11Err.corec

diff --git a/Codes_en_COREC/tests/test13.corec b/Codes_en_COREC/tests/test13.corec
new file mode 100644
index 0000000..131ce31
--- /dev/null
+++ b/Codes_en_COREC/tests/test13.corec
@@ -0,0 +1 @@
+// Call function recursive
diff --git a/Codes_en_COREC/testsErrors/test10Err.corec b/Codes_en_COREC/testsErrors/test10Err.corec
new file mode 100644
index 0000000..fcbe86b
--- /dev/null
+++ b/Codes_en_COREC/testsErrors/test10Err.corec
@@ -0,0 +1,8 @@
+prog Test10Err {
+    def Main{ 
+        Loc : (array,5)
+        Rec : {
+            array[2.0] = 2
+        }
+    }
+}
diff --git a/Codes_en_COREC/testsErrors/test11Err.corec b/Codes_en_COREC/testsErrors/test11Err.corec
new file mode 100644
index 0000000..55d50b4
--- /dev/null
+++ b/Codes_en_COREC/testsErrors/test11Err.corec
@@ -0,0 +1,8 @@
+prog Test11Err {
+    def Main{ 
+        Loc : (array,2.3)
+        Rec : {
+            array[2] = 2
+        }
+    }
+}
-- 
GitLab


From 58c1b8ca0381e8e47cbaa04b08d67703a6eca47d Mon Sep 17 00:00:00 2001
From: Audric Bonneau <audric.bonneau@etu.unistra.fr>
Date: Tue, 24 Dec 2024 14:42:03 +0100
Subject: [PATCH 3/5] =?UTF-8?q?Update=20la=20fa=C3=A7on=20de=20print=20les?=
 =?UTF-8?q?=20arrays?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Codes_en_COREC/2mm.corec         |   6 +++---
 Codes_en_COREC/Fact.corec        |   2 +-
 Codes_en_COREC/Fibonacci.corec   |   4 ++--
 Codes_en_COREC/tests/test4.corec |  19 ++++++-------------
 corec.y                          |  18 +++++++++---------
 docs/projet_sujet.pdf            | Bin 369477 -> 369458 bytes
 6 files changed, 21 insertions(+), 28 deletions(-)

diff --git a/Codes_en_COREC/2mm.corec b/Codes_en_COREC/2mm.corec
index 7a33612..c00888f 100644
--- a/Codes_en_COREC/2mm.corec
+++ b/Codes_en_COREC/2mm.corec
@@ -21,7 +21,7 @@ prog 2mm {
     Rec: d[i,j]=(i*(j+2) % NK) / NK
   }     
 
-  def Eq1 { [in: (a,NI,NK), (b,NK,NJ), NI,NJ,NK, alpha; out: (tmp,NI,NJ)]
+  def Eq1 { [in: (a,NI,NK), (b,NK,NJ), NI,NJ,NK, (alpha,1); out: (tmp,NI,NJ)]
     Dom: i in [0..NI-1], j in [0..NJ-1], k in [0..NK-1]
     Rec: { 
       k==0?tmp[i,j]=0: ;
@@ -29,7 +29,7 @@ prog 2mm {
     }
   }
   
-  def Eq2 { [in: (c,NJ,NL), (tmp,NI,NJ), NI,NJ,NL, beta; inout: (d,NI,NL)]
+  def Eq2 { [in: (c,NJ,NL), (tmp,NI,NJ), NI,NJ,NL, (beta,1); inout: (d,NI,NL)]
     Dom: i in [0..NI-1], j in [0..NL-1], k in [0..NJ-1]
     Rec: { 
       k==0?d[i,j]*=beta: ;
@@ -38,7 +38,7 @@ prog 2mm {
   }  
   
   def Main {
-      Loc: alpha=1.5, beta=1.2,
+      Loc: (alpha,1)=1.5, (beta,1)=1.2,
            NI,NJ,NK,NL
       Rec: {
         printstr("Entrez une valeur entière NI : ");
diff --git a/Codes_en_COREC/Fact.corec b/Codes_en_COREC/Fact.corec
index 0167b56..34b25ae 100644
--- a/Codes_en_COREC/Fact.corec
+++ b/Codes_en_COREC/Fact.corec
@@ -2,7 +2,7 @@ prog factorielle {
   def Fact { [in: N; out: (f,N)]
     Rec: N==0?f[N]=1:{
                        N=N-1;
-                       f[N+1]=(N+1)*Fact
+                       f[N+1]=(N+1)*OutFact(Fact)
                      }
   }
 
diff --git a/Codes_en_COREC/Fibonacci.corec b/Codes_en_COREC/Fibonacci.corec
index 347f696..de0f045 100644
--- a/Codes_en_COREC/Fibonacci.corec
+++ b/Codes_en_COREC/Fibonacci.corec
@@ -3,9 +3,9 @@ prog fibonacci {
     Loc: N1,N2
     Rec: N==0?f[N]=0:N==1?f[N]=1:{
       N=N-1;
-      N1=Fib;
+      N1=OutFact(Fib);
       N=N-1;
-      N2=Fib;
+      N2=OutFact(Fib);
       f[N+2]=N1+N2
       }
   }
diff --git a/Codes_en_COREC/tests/test4.corec b/Codes_en_COREC/tests/test4.corec
index 48f52ec..8e30620 100644
--- a/Codes_en_COREC/tests/test4.corec
+++ b/Codes_en_COREC/tests/test4.corec
@@ -8,45 +8,38 @@ prog Test4 {
 
             array[0] += 2;
             printstr("Attendu 4 :");
-            print((array,3));
             array[0] -= 2;
             printstr("Attendu 2 :");
-            print((array,3));
             array[0] /= 2;
             printstr("Attendu 1 :");
-            print((array,3));
             array[0] *= 2;
             printstr("Attendu 2 :");
-            print((array,3));
+
+            print(array);
             
             array[1] = array[0] + 3;
             printstr("Attendu 5 :");
-            print((array,3));
-
             array[1] = array[0] - 3;
             printstr("Attendu 2 :");
-            print((array,3));
 
             array[1] = array[0] / 3;
             printstr("Attendu 0.66 :");
-            print((array,3));
             array[1] = array[0] * 3;
             printstr("Attendu 2.00 :");
-            print((array,3));
+
+            print(array);
             
             
             array[2] = array[0] + array[1];
             printstr("Attendu 4 :");
-            print((array,3));
             array[2] = array[0] - array[1];
             printstr("Attendu 0 :");
-            print((array,3));
             array[2] = array[0] / array[1];
             printstr("Attendu 1 :");
-            print((array,3));
             array[2] = array[0] * array[1];
             printstr("Attendu 4 :");
-            print((array,3))
+            
+            print(array)
         }
     }
 }
diff --git a/corec.y b/corec.y
index c2fd007..e854ae8 100644
--- a/corec.y
+++ b/corec.y
@@ -7,6 +7,8 @@ extern int yylex();
 
 struct symbol* symb_scope_function;
 
+uint8_t isPrintCall = 0;
+
 %}
 
 %define parse.error verbose
@@ -261,14 +263,10 @@ I :
     | AFFECTATION
     | CALL // appel de fonction
     | read_f left_parenthesis ID right_parenthesis
-    | print left_parenthesis CALL right_parenthesis 
-        {   
-            gencode(CODE,CALL_PRINT,$3.ptr,NULL,NULL);
-        }
-    | print left_parenthesis ARRAY right_parenthesis
-        {
-            gencode(CODE,CALL_PRINT,$3.ptr1,NULL,NULL);
-        }
+    | print left_parenthesis {isPrintCall = 1;} CALL right_parenthesis 
+            {   
+                gencode(CODE,CALL_PRINT,$4.ptr,NULL,NULL);
+            }
     | print left_parenthesis PRECINST right_parenthesis
     | printstr left_parenthesis chaine right_parenthesis
         {
@@ -424,13 +422,15 @@ CALL :
                 exit(1);
             }
 
-            if(id->kind == ARRAY){
+            if(id->kind == ARRAY && !isPrintCall){
                 $$.ptr = newtemp(SYMTAB);
                 struct symbol* const_0 = symtable_const_int(SYMTAB,0);
                 gencode(CODE,COPY_ARRAY,$$.ptr,id,const_0);
             }
             else
                 $$.ptr = id;
+            
+            isPrintCall = 0;
         }
     ;
 LCALL : 
diff --git a/docs/projet_sujet.pdf b/docs/projet_sujet.pdf
index 9de81b705c8eb1cb867bb0141975443b75bc67f0..71d84338e4ba5bdec7b89196bd3505b8b2e05420 100644
GIT binary patch
delta 13769
zcmai(Lv$t#7o=k+9i!u<W81cEr(@g68{4*R+v?c1-q?2LJO7!*>}FA$duw~|dFs^2
zC}!g*W<9eZI5P`Jnxi`;C7?v>!g-S&_2;@T(15$J4s#g#bz-^0*``BHp#e>2HA6nT
zqkwATI5`=eKXGblwXdhEKM;bd^2AzT7y`2^%J;KglQQ+rLUZ&*0@K&_)f%T2rE|(v
zWT-_1Gqg1UT_O*`@O=k4TLRO$XpW^9J8%l`S47kH;gCSmnpwXxF<_mUlXhLn0-g1V
z4wH*_PrMd}-WhBa4k1e{^};#dV+!fB-`12z+8ED~!!QBMD?uDeFFQyqm9V3e*FF8O
zPN3RV;bJmXc?;=cX@|Uxt+hK!Yg_3aLQ6cYypX=sKKjp@^9Y=>!svXE<6|xfPK?-s
z*%p$nPMn#{0_g?{K48>{Wyr|y)L8?9=$52*BpD_s9u=d<o%EP%>zUQaK_FcB-wpem
zRF6li314pHTITZgy!OsUA*Hr12CNGeVq|fz$a?_iuLF4W5bw>u`VfRsZ+_wRZB*XO
zLED^ECZkX%X1_y_L&wrPkzPkhRqxDPS-XyML23Ap08fU<Xn=ln#(kWsmb-!OcE2v&
zt=ibK+{28;)mNbJ!I23GG}iq?wHcv?z~He8G_o0VvE1rmMihL7eWI=8zawzOV^(un
z3XqF`QVNcg7`s!mAC(jwmQFTVb&~JX_wSzuQ8e|QqU}1Do?LG!!Skzcfsfzr3(n3=
zrHWXJP;>*o^#HTG6w(7fsvL7Je!gOk-k4h``4dc~>;#LF(*Ep}D5;)q&d$#d)1S(X
z27N_63Y+N*c7Ge;rBjm+!ioobm)_Q$sMgK)Ze@`Ux9O*W4mlGyLvBe+>u%2dU`A#c
zqt+o&Jc|4Yp_D`MW(wbu1GQ7^Ew!MsnWu9fQPSMzKY+wccmEwEKL%B`WwMc?C`8T2
zq4fi+-ZBem?0Kb<xw+hQdkQ!;C;lr^-+K;Uq|KT4i?iB^d-{TRb-nCo`ChXRCx+~=
zB%`?1WMJ<zkc-iMLjHN-iFYl*UG~d__l0b8uUVIL=b5c}`3Tq5r&c}cZ8|;QPn%}|
zv%=PL31D^O!Iu3?h8=GFodssR`{dY1bzKmp<AKgn6Or|?q3L&+DqwRNdky+IsSq<b
z4IEMVN7ev1v}`YK%J6Su9k^#>0W|l+F2n+#6C8sMzbJdv5`nngdA!oruTwYIC_+}z
z=-1b-1@)Qqqy8?a70m1-5!i{=5Am(JH-lIV1wbGCLh3RT#_hf7G%m}(^<w<Fc2U&V
z&qLyrSAbmGJQnvoscM}qKoY-j+Hsd#O71MTTov!Zs#z8PY(eVgDt$anx2i*$=joV3
zayk}XjhIGr<RUi5%alTagQgeTY@CYXS#7#d)%Q?YecAtA?SPzasZ}bcRq!{T$$ygf
z9-#Co6ufL+Fho^NiR1t09L#8QYC<(}&x<dYyP$*aqB*%(+yUCGWm?h>E6p{P)w5Ld
zTGvjhly^nd-E1(D6)iP6LzFB9_}ma3MIs)6X8dRT6-ggsoJsQu-Tqd^{r9pb_?*X*
z8K$M$NSrZ8T2=>M`!T(}MY7*EP%Cjc5&+4EG-a!1iXG`4Z<y#<VZxIX;G5&e|4gJ@
zLnR1qpQAmD+^(~GSEXtaf<U_<eS6O$T?Y9I<Gq?#w&BLD_n`KxAUrO7(^un$_TP=O
zZ@L%UAE!Q-rdW=MMq|=OQ1IqucA7J<S=Cra37TXcI8;k{X$a#?h-CG3@cEVDYJe9L
zjL|Ipg=y$d*UWu2DiO%YR_qiT>*IwiCsApG_87)lE=ZT9=Mqs;Y;lRKX0A+`f&&{X
z?5W)P`Nt9rq4!1#QZjA9qd&DmdEt{Bb)Vj~Lu(Wn>%T<uJ<#~$tmr^24v1mYv;*GW
zS&Zc1E>2Wvcn`Q>ZJ|lE4ffvKZ$M)Un!N~O1g%Hp;$KUh=wwLf+^XC<4=9`<VLYbY
z#vj=OZczu7(cY;!D(wyS^FQOBG1iU`uKx4bMC7RIra9HAE%dbb*GT;{KYi6Ft*nT>
z=yrv6ts{ndg9Q&rl7l=kVh>0a4I5za%HpPwrH*fF=q`^?S*nULP0c0vU;uURXG%~U
z|0#^8&`R0Jxf|5EfhZMMs0IDb{9rq=6iH)l0aY~X6!Q>cpdb<cT;(98hc^}YYiFp7
zxNd+-yW7y*fB}vs`a%zo5!YVm(zlYDE>=&e1`-|2u2-+SYb1eUJLqQm;MwPWG2jFF
zdTp$vm5|nnWLLHoOxHS-A7FgRPU8P6fm-mM)_~V4Mo8hIwa<Z>Dugh`Tr4%|;Bu&$
zD)t>3I$H>G?a3QaJNenqv{!dk0T0-{1_3+<q`T;zRw`C^Y%ER{_}-D~HSiQ-|3(zJ
zq~a%bm+b5IYg^YKKbeH(jI<Cm7ujBKuB1}NZZ4j(db4pMiCeGN0rX+QfpEvu1h7Ld
zw5Li*J`VXK{Bk%hFlOdLqXM_%GZid7b%%n~&uS3tDox1s!+>IEBg2wxj1!viK{b~?
z>r7~-MvJh$Zzl(KZ)3k>S+eU!wsS6|!JuDiSWy@f*DIp*`nGxSg#OBdG|D$mh#Lgg
z9@WRZt4RP_;I#5-0YYBV(YOoCL^kL#Bfi8`8~&-HuAcc~+M7-LlA_J+J&4kSZi!!K
z_WzB=pu*Z2t%SxG#1kHH#p(tZjDGf~bjM7MGU?a-L%NiRGT}tp{risy%mJ)Wzx+Px
zPlY?I;Np+v>n_-wSD0c%zQE7zJo8FD#M|%>Dq}CqC|GxBEPz|E&iU~9l<y1bw-9O}
zh@IRgVlqqA2b5@7S3srVg8A&i>mDM?U{u)Pi|T6E`La#x5J4&##z&$Wtjy~4Wg9QO
z*oE3OGI^6#8pe;7{fJb>2yn#h0vfKzZY<fYKhMsmvgCS_&U5O#>^PTf)40`3T0=pr
zqjx8~%23^{Lzch20PJ#-J@{*mL6V`=O{WoV#y64QCgdWHYP0wWUhh%A`!ATcD)JRc
zl>-kag+Dd9ZgBfgq8-2eLwES3meBWg&n+wM7m@%ve`8X>H5w>$+JGM<8Uzb77uWwK
z9PJDHt#*|E2*>y)$+Vv)%8P~)uGz9qGC^c<*j+FI4^F$#wp81)D2ySkulIq3tcD}Z
z`eB3yDJ+io<SwhAXnTl$<LinfaaUkhf6FHiy^Ff~o^yA5=Vs!MY@(9}x+QkX@^$Na
z&##?xqwe>&=NpdQG9dl0Dllw+HgzKa&PdmvDYemPE@xYE*&)_Cw+{>rO5J7o5~IXp
zrpBv7-e`EpXfe$ZDra&H?~+2w*F}%+4GJa0bIahkZkX7h+{?0cMV4Pv!$;#w8WC^=
zJlEd6S>c$})Crd@0gh6rOJDmII(!*8>IhKe?8laKpKrwD2bPSz1?K|?iBi7->9G|I
zdgj0HG`uTp|E5<I#DF#AQEX1USU+TV3y5kx5=%2b;Pj%qCyL&F)KxLVy68<__IsND
z>lG2_mPnQy$nj79GcTjbB==w#So6>H)+NO>pjSCSY(V>R5{yNDYB+184m4z;27kIA
z0zFEL`N^`?;hQmQ|IR~u>006vkcxr(_Qh(=P0itziCe|9HHDt((4G30XFuRFO+-Vx
zq&|7+!1Za`1!b3p<p!NUNR4*IZPm@6es~t?HiozuGs^GM_)Fnvw=)l#q{Qb^@V9ve
zFf5lWq)%*ajyN;k6L5*}z}lW6vKxbDWy;Vr7*m>KhaabP6X^<j>{06h5Db=?oARx@
za#5c!BM`+@FHq;n!RLnGjL2?WKs>8`jvPDM<S5r5=I|T5@gu-$;V^jJ+=iVF=E)vm
zZ~eE>x$a7lG?f#*AmR&28<z@!^&jeu^ANj$t5vpw`Gp_&Og{PL1<(ja$&q%mY=BVd
zK}bMpXv%1i_Ei;)9y|I2hz$`5rJhLC4_DYSckn4%B`-+a`6xLzkay`Agla(rBr*tU
ztsJr%IGJL()1Rt~Gsi#{4|D8}X0+@y@A7%v<s9Jl!2jObKz|W(3EF`2>FMP=|J4IH
zxKmm=!tz6IFY}&tskfgJ-Cml}$d{gNV{vnDy|Vguk9JUOL3E4*f^t7c7p|Tzf6{b5
z6T0CokZ2V72p#5u^>cfUyUi&hzAawU^MxuST2{VGEjbSUifdRHxEO-s_O?Oo1@EZY
z`vlw5y$!i?ege~Jt-x6&9j)bU7UYk&H@3(<z1@Vg@E~`-^Pf5wPlNQwHFtb5^aYg1
za7oj?QC=wr^K~A;2rYSHtc!Zjm4ooJ5oe@4gel<^=eZn(>_3q=JTu~;2HwKI2_?bs
z8pgugzrcgFIZK+5FtY=j?2!CyD3YQ|w0$6Q@!h!1B5)q|3eQis#lRhvny<=3*g<3Z
zJYH5pOmR}6YT|Yd;0NthrLr$cI}ci_vIRxNV_W<NIbmr4B_6`hxdiytE|(DE#RGgW
zyIfq_aj>zcn#D{r#plRv4}#6xcV7bfXhfU8zsJ(UJ6;sbu;<Higlx6S8;6-{<Kr#P
z_Ur_o-58;_F18Ji>@q!pHftBTJMsh}N-2IxASwW)qY+DN@cp-Aw&A1h(HQ<rj5+54
zXCNsq#lKeo4g6>){C%!;f@%Tvgnc5I0_9AgfXln#w}*HxEnE^aKWQA%{D990!JqJ?
zzuBAPT=wQIUU<Nb4KbZOEvy4<eimyeDRB0(oRNZw?Q6wQXARVV0guuL9Kl4P>jXO%
ze^qAxHgT{bw^p$7T@nPy_T67->2N->eF1MW9hstl4pNy(YzMgS%9>?k=)WeXMzOCD
z{2&FPzKq<d?XJ@<a5#+dLDb41I!m%mVA<n(L6iuQFl6Wfw5QI9ZDXuc>hCrhi?-LZ
zTxQVhAkOqG<RyDs%qb@MEz@B51!*_x&ghgZqn8`tet(#LhsJ4{akrw&_>=e~rK}T)
z3Y<a%aLn0p`$dE0k?}svpdFfjVRz@^|A(gOSvOCrd)}NHs?dV#GLH(>(UZ42iGTUl
z64c0#_`$B$#`CuaRERTY(Q@s57^mdi5g#jdbEy}sgrbAi8Nw@bdFMv%Jbc}<i^a62
zaky5@@SG=t`kE=>M<MPjZo67<5Iyldjc4`&w`l{MK3gxTb5K46<~$P)XTkk4$h%_}
zbc+i@+f2`URcii%eTOrv%pMni)tgq#-ld_MvIV*hizO)^h~)z9J0mQPpt5iAy-pw%
zNmF`Ho-=i3>+w*f{zknXIlzhXsgt9~*U5!SFd_#aaqkX-Cz3e!--wcIKL-Vi<l<!m
z%KI$@J&_3LjD<u7C%{XZ%pcx3C`o{bj&3_ZkRDQtFaw41`~@)0P@0$ekl0p3o6W=r
zQTf2JhCg-HO|}4Z=hP>1Y-wS%!;;i1Bt(@lw$b%t8!rCxln=RkX4;+$1Nja<tTQ68
z*M8qQH(nM(S{xCd-CSSz(3w;x^5<lLQMQ?#Iz8R+p3eNt0je{;Txird{z8_FjC@<F
zVi2qR*<6I-g$U|6Ui^X_%&9}}aUufZc#@^g+fk8ewpj2oZ1ZuZB{qvgB=Eg{#1%vv
z>Whw85yh;^!_9;OMPtU`o<j<zFR^JD!`ppyk*<LAQd}Uww@UZGh>F2*_Gk%^J`%`u
z`uA>C3Ql%*>+UI&Ey+~bEfO)T|A{2HBYywrwP11*VC<AV2w*S52J`$*PZI`@*F6&@
zQMTRTVD1pgg#e9P$%AfcO-a`C6C%$pQ-u~jHwcF3p!(o^B??T^vd`kjc^d6#z+=co
z2d7l0>aTzrZdP?vOkkj`8AJgnj_VOW3?J7e{~4QG4cZsxze7pn_Ezu?)*qyr8`lm^
zj<ptpmSi%8nyQ9HBmGO-<tf-2%Q6!n6{8a&+`*4GrBNG&I_ao)Ae+;4Wc3dfMHHuD
zjtC{pSExC}?T8lGtzRIii9~*TjADFwx5Ae=pHjf30upG7+PoS7t+)@MnC+pD;?erZ
z)5P$1=fe|7d<rU+JJD6Z!;C+GxnN5RVAb1eRR=m9k}apesSkL!agM@d<ZmeN|MvB@
z_I->mQZJUu!o^MtjMrNIr8m(RSyzQ??4x2hV)2Kg-t4~R3Ii%0{os&S`MGjWw2vq3
zt%z=87UHU}pu&oWUXu_YTgMKL>5vqzo;o>L34j)arH?w;V!x1{G10p)*`sOkcgGxw
zS;35&c7?mu#fqY)g(K{S5%U*vut|nmJ7ohD%m&Cp_=I9Yns9?*bwCx{wUcI`)80ld
zKrjo}K7uLDvIXF4CpY&dNC7;aj`1%<b3;v?3Q>=~@2NdL&bI-RUka~!+^+4%1niNh
zv+Imx#$fysKEz*_Z$Pk*;XJ`M{=il3lyij`(%Hd3G}{q9f^76)m96?t>4U!|dAh0*
zxVvO3I|rBCNg?W8JzM_#8p~urvmZX{`omJCm%>l8?JcK1AWbJ^KqM`{$D2^}+sp(2
z8LTE0C1|bQd8-X**FKJBGBs6Y#ACtFbNeOh+(kLxsv|$*KXvg^wBI|L@a8sCXeG6~
zd|W`RbnzRf#h~TWyRKuRv>3s|?vDlIh+kzu77$0!b_-S|I`3-Xoosael})>EM!Qo~
zszaEr)192?y<NJ5d0;L0W0g#t1t3F=97DKlS&?CUk<SC5pDFy^xH`J9wJ*7k-V*1t
z!WTBeAp2ks#;6}?b+khZH_sdoIAY(|J0N-m>#MnYi1w;E*TpAavFsuXIDL3rUSKs1
z@oYXQK8|9cr;{7(F6Sk9$rmqic!(xMg>8i!NbN4yb^d_WOW(s!$xYTw_IB;3M_R!C
zx(zENRLleHM=$LoOh9))HKy^|iMlvC<R!y;3%rwXXqWCR65BrTJJos>S5ikG7^`$@
zTdG&18qxvstc>m|p0tv^O&&m#sizAUYs2+%HFCOFug7tA6K>hgkL2wCwow_m`9RPY
zr%xTXLp*I{Bsc;^YgOixW+%Shms}Fa-+d4K6zl=3sYHUAVu2F-e~aGc%<9Bw)8h3K
zM@=qe;yrG**n1TKM!!>vE$EHN>!Kl6B(j$c2avZhq6CLm%|+m&(^fJ3as<IZ{_uRR
z@Zk4(h(^Lg5ZxS4=fvWMJK5ffg<?@@@QV2QzmDH53x=|W<{>tOxq_8v{Z73&q`z4J
z_CWzihVLK9w?MEw$HQk~H}QJ>^E>2#{ApYQ@Dwh=$^nC5?}Y@5!mgPepR0rTxt*>*
zzXQH@pIHy#H$lMSP`ix?p`m4TuA=tr;PYu#(jFwJUaI>0h7rmPvF0NC<-uq-5r3YZ
z4;CTSFN<=Ven^vmMwx0|?+$n0Cl;%MSlIxBbXDLrmND<8DyU)-o<*0p`<=qKdsg!X
z=n)-B$WDp$5aqPHC8z*cpmRm6`Fx~;m{A3<s#kXD;p@Ti@qm2XgC0z$hx3Pp9pTm7
zXA!BAJrrLwN04O<6it`qyFq8`>hyFHob$QL&&*Jq*BXrHJG}4@mVu9*9h|A1iF1;b
zn=lv$>;JM)5<ndiAdcy`T9@8Nu9=+uQ34a_nn;ewE{?#{WwFW*CvIlb(pX+n&ic{V
z=iA33GG9!#?o<sHB}U*PIfIwW^^h}}jU&x6!>f`FNe*T%%uI!d7HRnzY^v=|j>j^?
zGM<6a4s%RPpV_e|VTh#6bf(2<5sW^7p@OOrLSsUS^oFSc2&wuj?EQ~boEf<aGT3>D
z^)<(dv?}9vl+l{;_fiAqkWi~@yEgCQt;OnZtHeYP_21f1y1s@`=hg_ZtIaH=0~xG}
zTK?Ob1Ck<>Y%GRt8%&bPsi7#c+^1G|oz9BTH{RVRjNq~B1yZn767qX+W)w^!<yUvr
z=&$p21w};}0H;UjDfGoBkKLg4A_16N9^HcA7eW6hrMY%vdIFY%Qv?f*V9Nd40DOrs
z$5Rkh%oQS=mLY4fA`4Wi{Lp=qKXKOa=}ji$$a^O2WZ|pK;AUI?|G?zeU@%8SAuers
zi{a%h;yXM*5E3sb($#X0K(PP5O2W8s!K#25N{}}&0$|o4JfSk=`Z=n9Ie;0%vV!NE
zgO`%$_Z&v1Bi<&lvhzyffOc5S_lpX$>rN){a6{`uBAu`bLNuF5NO9CBhVO)V!mfcd
zfei<4!DH2k3oEfilkUOoYzWRkI~WmwCJaDJ`mYNo3o1I+p2a%M1#<Hhh=W%MuJt1Y
z`e62V0Op&_X$6elvd%?D?lmsQ3-LITtWqP&F5e#JlURVXe%H~?-;t71CPF5%#pKMy
z%oGbQaTp0W2`sf-dJN&TA9N}tV*fnW`SjgLYcvf|Jr$19$Ko2U&N`nb<F+B#<@SqJ
z8n2si+-)aoi*!{!yJC$PD?DGMm#OsKAKI_S0D^`c<j2;f6su(~b`}LGj|w6|(QR5*
z4IE_9UUtmGS+;^0Ir=&Xcjn%TRc%`bKjtv^NPYM6oX}QjS)jFHEIoJqBRMO(;b%e|
z!-Z(rOkZn4uGaA>)M27Ks9fiTCd(Q%0e)MKc`p5a3P*&S`>O60JiGotW9MWHk@}xy
z09700Zt1Smq?txe3H!tbKTZ#S#$my!RglUow*jRaT)))Id-q{w7l*wldsn&5iW+~X
zW6(<3zwP>{k7QhXNh%H`zRmo7ud!Nfvz%%(8g6SA9<h{>b*4!Jg-qwn%_j4r&!N5(
zvdOr}NvGt#YBM=5YfMU}aK~iAv?wbrK-?sxnrH*CzB?VAp_1V;xo7|)Ny<E9mE>XH
z2ZD<YBHvDO3%W@Q(y>gnZhq{f$Ze^pvr{v6GLz5K`7ySqqY`u4SXbc~5k3P(p+H&>
z(<DSgOr?>c&MzL%mE;^;HA(2A&*2V#1?v`H9qXmRC!JM=k(NBIsZeVL_%gW;IC9ov
zAfLvunz*T>Xc~8Aq63IM6js2KH#zlcRwxRM1Vx?y9p8~JlR1}ITu(Y|Dx-{LL23;$
zbr#dTi8SS-TA!>k)@PG@OD^@w%u9YKjAa=&kd3;#d8@jAFwyPh{RG;VN5LdN<l^{!
zE_8EQGUh4iPiv_#OwRYq_I$qpB*J8?y?#xWwo_(;VW>m+-72#VQVMAK*&IA{jbFYf
zeHT_TOmJ%_<edlr?H|(0NciK|{~_{VAc>c3Y)vANl{*k%p_dDpmX{2;_1lHbl#P>t
z*rC~0iO$~meFO6l1}#YUO2)w8CfA*~`F2MuNva;W4=FF*4O>>sFh_O)^wkR{!Z*WK
z#j|@lUG>ye#A-Lg)S%XkJPl5wkd<5bnq(x*?K#EL6e!(1j?_^X4(bT&#@fpi55~I8
zDf(R0d#_K?EvVe~rX=jq_p6eO^OpKW)$HBV;t&lMH%cbBEmr@&#p*U1JXxx|L-eN3
zb6ZRA2&{kteLt_bZ}f<OyXW6Lf0kW|52F>N+u4?Uo-%=i6AaUG{2S?zIlVcMIiHcV
z9^f@99COAr9duCdHp&^%?9FRog00(Su=SR%_|a?G9c*iTs2mLThsSS+>TxEXfATzF
zhgyytwdA$p!c!PqrvpoTdG5h%B@qMp$8r|84x8t;O!)~UvHxfRF26%&PPc~PnrXU}
zqVo9F)PnY(E5n5w)wo3=@$k1G5~yre*cM8V_KCH2qjH+Q{afTZ6@yz(c<Qa-x2v~8
z)Hu^{fHx)>y5>7pW>iU)J>)%p!WU$nS${&k^P3NZ)F0hMz={uJ=5`hbHmMUxvcl9z
zO3-@LI-tEnmo>)#oddk&og(e{+XH;mok82?yzoVeLQv#v2iPERlPm$<bcj<GgsQC&
z0Q=6JA`yh>4HlE#{>|*;dGV0h-B#)xQvT6u7vYXs-kSLMdSr`fmbmWVeSCZ(+z5yY
z0%LV<k!?06M9)o^pg{xA4h4bshF!P3(@noUw6CLix-$d71@vIuTR?r>V^A>)M*SVN
zhj)r?mvvo%E!LIV)iS`MOFWOYzFw<b6xb#nLh+{+;kg$>{n|0am5)rfe}c?SRrpE)
zHXxGUFb9?wQ$V;%*7`l&pD&_A;a86YqlKY|XB9Mc94*1jO>x+I<-gJZt^@fkkbVqI
z&#-PJ5ko^jPyi^1a5nD!u^YJ~$=g7axssnBvO?&6(&x=T`?Hs$O3ULY!h4@sMs1Tr
zvFCp#OfwTvrr&v%N(@+U<MW$CK1_MKKVC{PX{+J!9@z2I4E%h)&G+hNkJG}xZQ>7C
zE2kj79DocI)64gN*=uVberW*1s-%4H{M3(Kl^6&Bb)@%AA^&8O7f~mfuHu%5RD(ky
z_Kcl+vKP)|QkfUaDtl?0wAOj`B{&O?EVJYc7C_2cjt8V;3s%7N9r(23Lz5uMK2G8L
z(wb(MUA**`-ky+EwT*)}Ej2jzE|8$m4@@}pjdU@Kd$ZitK1L68u17B{!p_|ew-r_F
zfo$vmmNq25=k`N<Ji$w+xw)#z7i|U7mpZx*WdW0M4CXC;=McM9#irGb%(6wgFxeq+
zy1#hqX!(O9#qA7wn|#F=?8<B_(EFDfV&{A~40V&1T12rAQRi{%&D8YwvznyFd9TZ6
zeHc$QuPJ6PPEP%s1op;f>kh4L5zF~z`&okkC-AyQV)$nQjPGtm++bA(mv<wMa@`N3
zRRQozjeY|RH`+V{zxRuFWSqFl7<lov*}Q){!>FFePe2K`4Y@|X3IV?d5<eO)HffVU
z-=d$@M;{kyiqntyw4*=gO1qPwY<N;7J??uAW8h;rnt6D4L=8~yX|kbYERtJ)<FYCM
zsc2cVQ$*eM*TP`qZJ4I4@JMRTlZ(=^s2ko4%<m^?)K_lFZd;NK9|zl$5!&d7Rj`j`
z$s0*?pqfg}p{PUNWC<nEyk|A7+s24m14oELXrAw%5fXou76W6+muqrab6j@s$?3eb
z%RY*`9ELJl9jb+P2eAqikY6kf0#`o)m~+1EAI$<Qf?)*5zLBO7ZkBR86745e6=X^j
zmwO#?0jcyN^Wnu^wHh>3#@&NlkGBN*J8jbT)uJ^pIbum!I`1y+My(gDhFSR<r;j#s
zWw24M8``xe-<#!oGYjxvr<=k_6(P5H{Pi+x6x*vxXN!JT7Jorgrs(qeoRirB5nH#U
zj+V5?mL_2of5ANwlz3ath7!I^izmGEQ_A;!*04Gj`JS%cllX8V$SaCf7G#wJ^)C8w
z1f-ScV>S2Ba1knH-q8bac&yac#7UUPuyWew7Qn$nI^%t2K*Z899D_Wbj&cT2QVEtx
zQ@&A2HQ!gzj8_;Fe)-WIu0jn1S}2f2Fwo((|Amty$|j5TxcTc81}^r2N6d}qN99GK
zU@^~St0hx<njM(KHGd!%g<26d7AzDuVHN_5#tN|W1!%Nqq(aNya0!YObsjBgF)Z40
zZA^=PaYp(Np9K?VaVOBmUEzEMq~PU#cb%z}mdp;%k%*UtchFb}Q?$1Outgms#&ORb
zc3Rwbf-M3CYa&Po59ttt@g<0?N5Vw$%T6`cq%w#O*jf}@H9Xjvni9;*d{S28mUG|&
z%obb7zn|$+3da*mTCSJC3~)gsx1}PYkSNzgDuiPf>7E>q_}P@j1fuDf06bWHGZO9f
zdd_Qu3Fb1wRN5?emINmN)4yH|&9^!mIt_cI#t9VTa;O_0f=#W$)#8#q3C3}la`V=W
zDE`Gh0PYID2pb(`hjt4vfBOa#aPGr{K>4Sz<wBq`FM0cz(cip?t4E{dW?oxwAA#-7
zM@((q-vO^<wDBT<lW+09dHYA)FT%2uq8~7}o+irwg%KAg)1-)N_#la(Fo_`0{{;4*
z!2c6On?w-gC>#SbGb<Al3o9cR4I>i;BO?VB9D|&_iKvl_DG{Y8H#6gZ>;Ko1#v2Pc
z2Fm`waFa$C2gwUna`JeVk(*{02Ppu6^HqaTF%rTWP>G=v9^~J_Qi6sK(G<lkfJz?C
z$3S;Uphjc_+q;Kih5iMC#y%pf#+eWaQsAWKkD4DS?ZJKvS|rF)zKD^YlrKkvoslnv
ziw3t;XsZfYIIq9S$Epc^>Tl%=cBY7>jVstQkAfmR5Lg1sja#R@Ur#Oy-7E+o4sbDy
zR)Z_;4~#WqAPQO$KJm|{*6{elAvzo%ubM81)-!G>WdvKwB1v+<kv~x}fhleTihl0D
zwAmg8!4>0C-!#&&wjOwco?1}Z-;4BFPV<-zjq4gRRH&fXcuJ&LMB@^4zvp|OGH<Cs
z+O!j(t|#`Gx~wSN2dN47d;J+OP}Y+NI?0dy3V7?I6uACE_%PYUTnSd^j$>n5^VJ+%
zvI2|UV{ZFK$#AU%(kgQoJ*%nwUF;3;NO~szBM1P`(igF2bR=ZwpuNLZk`TV6E>vp(
z!x0jug|{Odih0o#%PDO6042q#EOcV!L>Po|K~xIbIHh|UuE4OV!h{CMgvS$+Vd)-w
zjb}CykQ**z+E|o2PV}>m{<bhh)XnqUe>dp|s|}b7e7M(~&->7nSka+Q`YFfYy$Gj)
zZujpgf5s11gJ<D^VL)Cgz?4x6k*5ODqi@@!CUHw#6KTc40y$BhZO!A&{Bx1y#3fT7
z>Jx1P0qn2co3kREd)Wb4;t?XOs3@S}$CkCkAc-G?*B1Y2PB2@EH=jRMF{7Rx<dZ5z
zcf?dWTz9Wo);-W3M`|rFS5BQgnX=KLdE3*znoGRIdNw+yw_d7zieXx^b1<_Dk^F_J
zWk2VPLZ|(19}$BxgtE}Y>CAYP#YNhip+Uv-+wf)`sVng>6^}DO3Ng@<s%Rv4eU=WF
z&(6z6X1u$Rl^Xc9IU-7$VKC5`Jk@^0*Tm3%eTlo!WkRrOrfqbiI4WtK{hFX3pSX@K
z{hXuwbYT*?q;lQCmgrkUtqF0_#xaB+AGbed1TTXW25S<`yCV8W8XAf6XeS(P0%d-$
zn%0x`<)pFt#0dt_?%OE8Fq`<{qFvB;X7NFq_*8$SRopDpwiYOMK|CuS$fWUvea>r}
zhqu$uM*k9&oq`mbF7bd8pIkPbl={^D<pFi*z=8~51%Dx}puR1=Q1x`kD-M{{q&Yii
zy%djX5KmqAZB+PI<0XaEB}E^0X?Ok?^_o9Pl7dUVwU7y*Ydr4!D-F^(Y{^}UU8X0{
zp)>}@+^Xa<THYg3I*@Eyx%FXeo^ElP!fQ%%tS9i_%;3TA#N2y$t;L4Uh35P(IM%JY
zeYJX;k~K<v#6(kK&#dDPOH1z{ikrEEf?!+{W|&XOUy>2oW4}IR=$~Ct?UKy2T2P>P
zGzTD?5s|V0WF!R4#3cxz%)>5jGsj$<nzSDxuO?<%<X8dLsj<$^GQJhG7adccgn6DT
z#^~nbz9v<~amR}Z+CSk_+*0@dT}0L9`o3@!suKai-l^}D=D?;Wh0#s|5!UecDZ7u<
zp2c*j^!~bNm$KTesdL)cB-z375wkvlY?ElmFIx{lu5Ly6y1uwD^W5(g8;6VwGW(f%
zwm?-CzY((bOWZPtvN?;|>1xHEux_H`-_L3URPWA&@c-zKJ^qY)H>PkMGRttsLz>aE
zIEj52XlHT}GAkrzn8%h(i6+TLQt6}8ouwvL+;9rE2cSqt+=Mz<`%mI(tB~_fW_ydC
zN<f1H0L6D0rP3biNc#?bvUPvfpI~q1=*QCD;(lRtrniyO-5REj+NM@ERz3wD8Aulk
z`K{?Vjn^ePWXMg@QAQAQgYKdmUpna(u1bo_qO%@d2;N}EGhR6g<KoSKdW?H%Lg^@3
z7)Zk>ca@53aZ|mu#=e1V=iBD<v==5*&Dn+lZZ`X^WL@Hjc~Hf~IA=+o40Cw7FY0ca
z9WtMJXZ^qSl7y!o4*!YycoSWnFt0YzuTT80VJ|FJ5i7fB<a-c&s;_7IXDpvsfJf6B
z?U?a_t(oo+3$>bBfr0kWt?8bWJ>L+WT?l`M-orFr;Vt$e97&DdR77TX77CdVtlwb>
zu#ddN$RXsP^AgYHlZ?J<Jws*dU4xC)M_0o6g)~%AS=PqA0<=sCyreyXPUXLiiDp(d
zf?s7ZTaUD&1Bz-osg2;MZ>DDSbI<6UW~ey-o_{`av*t4c54Ah(9B=4|dE0loo?cJy
z&v-)7#$alSUug&>o~6yOG*g|BrJWQ6a6>l8cxC-sq#d(^HP=-p?~H0R$Pm(nb)svC
zp$+=?fTvX&SC6}E*>8D?*5jyUJkFi2HeQpQJ<w_cZy(;#lvYCm=<JSsuw>xWr%);E
z;_w!%rzd-0OunS)=wFqRR6he7$*LmmyMTCigq>>J);AmWEMa;eeEEKE>$yKjD@=vt
z1GJk9IeIeoRo`HOpn4I+T<5JGX3gGWPwPi48g8P6#4unMjlbUSU7IP3AgX3FoNu}d
z9_hdF$2E!vB+eGCd-hQF(ntVJJ-K>%@KZEQ_4LyY?`yMDUx2=RxC(U>T3ifRK#@0{
zH=wt;Cok0YL}?-Q&gIwFjgFSDhmYGm;6A$=sVYW&-3((X&%{~P+Lj>g=N$WRiGH-(
z+wK1IfDZe?EC<?l*`r<>Fq~Q0FjCgisw+>i*wy&`WW-8U=I-h#kh$!h^zJoKf)gub
zet-_F`}O3*6#5+nQ0PKP*Td%gcDTP}W2zs`ik~%cKd}8)AR?-!0Er<;KXlUu<UmW<
zE9`tfeZC?;o3xCU!Pzpu4rvqKQ6NZfsJhw={;NqXuL@RMk*>;36-c!=v|a()t~b$L
z8gGuD#og@W7TVsdZkFzQ-45?5w1R(kuND8>P`5Q&7xL63NSU2Tx`$lz(C(!+2r4-N
z^1z7YQDW~0>W3D4xxCf;*G=95F7NlBy_5k|7g_7490=;GhxetQpC4Z*??@c3T%fIt
zKJ((5T^NkDUvS<=o#h>|L0bn8)ukoF`?a46Z+TuThkj+{?vC%5pFl|Gx>aX;=9hZ5
z$l~obAVG$~G*1{n$UJUpYSW+Xs7fSpmnyRt@Uu7`MoK=u;rgdyE&d2VWU08DU0f!r
zBC<faxJWw!ydSDN8$z(eWqiJH&~x?NpgJbV?cw$DL*m89uh|}(Cbmi%$_t>Ea#A}L
z-){a>u@OqFA{81N5QSThb(Q^8vqANk+vDy2_>QRgblePQ-6k2LBYMbSc&hoQD&%E8
zkuB8r;;YtHCa=)-;VunO^3&;djUJlU!_Ck4L$Qg|XIECV+ZD09Addi1*Q&c|Z463p
zPg0J?O{gitq4&rGInxvr)MQ>4UV{kjB>N`VI^&-9kvF>{<k@fLXyGwxf`6juCGL1Y
zh%V1C(T1!n08&Rva98okimSKcf}|8tM1cvYz_Mja?f{kVpL_>c@n%H3al*m6Xzl99
z9Oq5G$M#WDRQKu1i?^LBesYYGK6ou~J|BY~SJ;;!6!{tx<)ujsXimM>-KPPake?Rc
zY5vih=3m6_zCjSz=}P@_*Lbq=<H}ifq5bJSH$>ve;UbielSkUQf7kXt-m~8s$Vj?P
z+o2BUe%`zuU9ATgpI=8XPg!3FRQVj$?irRn937qADVX2*2Sp)DF=Uf^Mp5x95#W2Q
z0=s=tbCDX8P=NiO`zOKnTl+!RWqKrT+=01z-Mn01uo3NR$e9?SW@)Ebgi)s^&vmL{
zus${!bJ{n(*qOuNL9oFIZ$OW3Y=v5@1OgS-{Ardc;Zy+bqa6aSliFM@ASfiHz#G__
z^l`OIv$8HvvHLc#9~QMLYp<<fzdVP_`<=VqR-DE_)V>tEk9v=H`fVhJUIxSe51H);
z^6#rft2dqjTCek1>8;Op=z$hr;QCRm1c&_jn@^QYOmyu_QW#grn$KpLruUO2Gfd~x
zRk~2?1rcD^Pd#KUC-yc?L7<zDkD|@K-CZ5qnD6`AvA=ESPNy>m|2q(`$HjSdoafak
z=B4+zPr}2#r_90ooBvT&*Abh)t1DYS=Elx{<nGB8(b-_dxt*zanoBTATG3ePR8R}T
z9C`I{FrB=|LS55H_^-TCqOLs+oqY#IR>rohAvqvuS_~}<i;qhk<qrLwGFD0SFkDiJ
zA!&I*+|RI#t=9^Mz8iNmn4~?$2sE*ar1TzKR~YCNFx1dw9C;*)N2h#h(8%NHMQs=L
z>qt%BS+w7BP+>^NnH-(^EIaGKe(_|gd2ZwQvuRG8j%9-U839%56w@?Q!@}Cs3wjn*
znHTUX&BgG+i2zv-PsmSqib7*FNf3L?){0=@<4ywol>k}0e(%AX#o(}rNq?Op5PKiA
zz<8W@ST%CO_00zM(v#lX1O7q+>nL~K1gmsY;zAgI4X&J$6i&^6oIy;|#Z$PG1>`5$
zlrRYdIg05&4E5N$_UOFv{BZCgjFkh6O#&b_iEw_SAmMhGU5P~cO7=E|-y&NwIbtqC
ziNEV)f=<-)Ozh*X5=aYZo@*B_jnXS=_aRQS|2OO!=bspO=cpJmMW&o)r(C?I3}b-)
zpu8FtE00-2XSWMrR*Tb23(|1*P0nhQ4wFf06{>KP;PP2sk-*`ww`ic9R#*M6{uM&n
zO?nax9XM{#=f)#$qkLkgBy@B_*j0E^Li!cgj8x*fneQ`f$?P*ZFTu6NYj=gYORifg
zk<B#pg6y08O|!3T=h%ffA%Vv?lm_9O?0DFzs%-{ug_|75=@sgJMKHm+#^<qCz2CS2
z1tg8l-CwScQ?{3NNyhxwz8yJ<0g#xzn3v-V``CX3wa@at<sFiN|F)$@{4w%@d?A%l
zg!5}rza6PGEFuO!(*6Y3eEn`0>eDVWuzYE0C^)-#aN(}OzCSl&3h<ugZBjqFiY&&M
zP8fXG<#9mJNGo)F5Slj;rCX4_y3qR4G3wOG3T5}?L}1GbJq~Mnmx(H=0!VOpxoqT1
z;8vJJ65#9b)mHthKDF7Lu^K8CnyDD>92St#SKi`f98plUuTA~C4AiWt7jCJpq^}a{
zSH`ELhNYyo4J_2IU8Dw@oKUOMwYafqvDV)yikJMMUKJ|Ay?SkhS$TF>C`(hA!75rm
z_y`2Fl)qlTJ-KwYXVIVg0-k&ap!2Jjb`NXn4Xo?cpRDOt&i!hJw1=`PJ{^5{^dIA0
z-u*5`^x3^shlTdLu%g~EL3!Q~H1$wt{TDP2aBkla-o1Pt7)g`f%zvY5n~$2#f;M`G
z6P6E{Av_{rzm9nLK_U29&&-Y~sYSpQmnD+U$)>#LXO3s`SIt8d11ReoJ$)l?^uC2z
z&-C&8AHTSR&%InhIG&$CjeFq{ZwDS5H$nc|iHP<Vq2Ha-69oUQw8O|}YSn=>lsyJ~
z-&W*+lqsqa7N_^^dWWmE9@5tbX|Yl-_-XCp2qQ!BJ}uYctp@Is!v3T|W{aE@A^(Iy
ze!IPGp4`-1X4z)L@-l;C``1N6o4?LmFlEZxKfm_t=GIIbQ4XRxhW+G-#OiZAQ58c0
zH$8iJxeT^f-JydE>aQR#`l{FY+R~u%AsrRDI9Nr6#aY-yMY+V8*@Q*KS%f*nMOj2R
znVFebggC|diFp6N7CkrySyMZ67YiabwlsTpNNNDtqKu8KBl^EP=j+F3rYo0?4F0G6
zW#}SG{N>+Q9w}ZLGD^N^vdRtd<(lE~$nfSy6znU;3=J3!%@^v%WC?5G!?8avE)V1O
zGhe$uUjj4X;h#~W2a^tvwSnbZd05I4{ZLYHC@#vI64HV=HpQtFBZ^3nR^Y{O<-ur6
z&xwFaBG|*F=lIG3DDsM@BxOZ-l_j^N1x0AAiYt<35vWG$3c}uZ^)=9K>cr;_D2u}u
zxw+|Cw?z9Yc&~o<=A5$VD2^e_H8_5H2`hhbi$F6ArL$KYq=u%Wye%kxwK(bT(p9ev
zf9PYDmjU@(@W~2<|Gwa}*|(mX-Im1V$siyA2bXm>+CHEsqb`n=y%*&}>?*8#;<Z}g
z9E%$P+DOvWYl#rgUx^b;j1w+w4;wF(iSrkl1E#nt=B97zp#!S?fF&pRqJw-%@`EGR
z9x4qmwmKw_#R1XG2<g}e6w?Scb)UN~V)QxTEgF+ed&xq!h$+Uc*(s$AoWEEYs0Y|l
zDVa!PS5TwwBk-24B){>fRHtk8s#Nmzom7!_wVhL`5zlyfTloFt?pe85{<yBvBW`Wa
zYs#whdPr3jky2d-CFhg=xKwT$vZj)h>g#)5p>-H>V<e$c;Cpbk8<4Tnzhz@ch2MTh
z<>1X$zkt>LLFaIzX6Q<LduzWp|3TlM6w==$yEpP)dCFKc6m3>doDUhz!|_wMfWQvc
l?2p0b_eLap+p7Bw9%N_3l!jLXNd(Kv4o5~NrXUXYe*mBD#n1o%

delta 13782
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

-- 
GitLab


From edf4f958c7c145b5d75ad8b273e207a05a8b1f60 Mon Sep 17 00:00:00 2001
From: Audric Bonneau <audric.bonneau@etu.unistra.fr>
Date: Tue, 24 Dec 2024 14:50:37 +0100
Subject: [PATCH 4/5] Update test pour init les flottants comme des tableaux

---
 Codes_en_COREC/tests/test1.corec |  2 +-
 Codes_en_COREC/tests/test3.corec | 12 ++++++----
 Codes_en_COREC/tests/test4.corec | 41 ++++++++++++++++----------------
 corec.l                          | 18 +++++++-------
 corecDev.l                       | 36 ++++++++++++++--------------
 5 files changed, 55 insertions(+), 54 deletions(-)

diff --git a/Codes_en_COREC/tests/test1.corec b/Codes_en_COREC/tests/test1.corec
index b0af3f5..d8c7220 100644
--- a/Codes_en_COREC/tests/test1.corec
+++ b/Codes_en_COREC/tests/test1.corec
@@ -5,7 +5,7 @@ prog Test1 {
         Loc : a, c=2, b
         Rec : {
             a = 10;
-            b = 2.2;
+            b = 2;
 
             printstr("Affichage de variables, a: ");
             print(a);
diff --git a/Codes_en_COREC/tests/test3.corec b/Codes_en_COREC/tests/test3.corec
index 26783eb..44a6266 100644
--- a/Codes_en_COREC/tests/test3.corec
+++ b/Codes_en_COREC/tests/test3.corec
@@ -2,20 +2,22 @@
 
 prog Test3 {
     def Main{
-        Loc : (array1,5), (array2,2+4/2)
+        Loc : (array1,5), (array2,2+4/2), (f,1)
         Rec : {
 
-            array1 = 1.0; // Implicitement array1[0]
+            array1 = 1; // Implicitement array1[0]
             array1[4] = 2;
 
-            array2[0] = 1.15;
+            f = 1.15;   // Implicit array of dim 1 length 1 -> f[0]
+            array2[0] = f;
             array2[1] = 5;
 
             array1[3] = array2[1];
 
-            array1[2] = 1;
+            f[0] = 1.0; // Implicit array of dim 1 length 1 -> f[0]
+            array1[2] = f;
             
-            print((array1,5))
+            print(array1)
         }
     }
 }
diff --git a/Codes_en_COREC/tests/test4.corec b/Codes_en_COREC/tests/test4.corec
index 8e30620..8c91d74 100644
--- a/Codes_en_COREC/tests/test4.corec
+++ b/Codes_en_COREC/tests/test4.corec
@@ -2,42 +2,41 @@
 
 prog Test4 {
     def Main{
-        Loc : (array,3)
+        Loc : (array,6)
         Rec : {
             array[0] = 2;
 
             array[0] += 2;
-            printstr("Attendu 4 :");
-            array[0] -= 2;
-            printstr("Attendu 2 :");
-            array[0] /= 2;
-            printstr("Attendu 1 :");
-            array[0] *= 2;
-            printstr("Attendu 2 :");
+            printstr("Attendu 4.00");
+            array[1] -= 2;
+            printstr("Attendu 2.00");
+            array[2] /= 2;
+            printstr("Attendu 1.00");
+            array[3] *= 2;
+            printstr("Attendu 2.00");
 
             print(array);
             
             array[1] = array[0] + 3;
-            printstr("Attendu 5 :");
-            array[1] = array[0] - 3;
-            printstr("Attendu 2 :");
+            printstr("Attendu 5.00 :");
+            array[2] = array[0] - 3;
+            printstr("Attendu 2.00 :");
 
-            array[1] = array[0] / 3;
+            array[3] = array[0] / 3;
             printstr("Attendu 0.66 :");
-            array[1] = array[0] * 3;
+            array[4] = array[0] * 3;
             printstr("Attendu 2.00 :");
 
             print(array);
             
-            
             array[2] = array[0] + array[1];
-            printstr("Attendu 4 :");
-            array[2] = array[0] - array[1];
-            printstr("Attendu 0 :");
-            array[2] = array[0] / array[1];
-            printstr("Attendu 1 :");
-            array[2] = array[0] * array[1];
-            printstr("Attendu 4 :");
+            printstr("Attendu 4.00 :");
+            array[3] = array[0] - array[1];
+            printstr("Attendu 0.00 :");
+            array[4] = array[0] / array[1];
+            printstr("Attendu 1.00 :");
+            array[5] = array[0] * array[1];
+            printstr("Attendu 4.00 :");
             
             print(array)
         }
diff --git a/corec.l b/corec.l
index 0935e26..572b155 100644
--- a/corec.l
+++ b/corec.l
@@ -70,16 +70,16 @@ in            {return in_dom;}
                                                         yylval.strval[64] = '\0';
                                                         return ID;
                                                     }
-["]([^"]|[\\]["])*["]                   {
-                                            if ( yyleng > 1023 )
-                                                fprintf(stderr,"Error at line %u: Identifier '%s' too long (> 1023), truncated\n",lineNumber,yytext);
-                                            strncpy(yylval.strval,yytext,1023);
-                                            yylval.strval[1024] = '\0';
-                                            return chaine;
-                                        }
+["]([^"]|[\\]["])*["]   {
+                            if ( yyleng > 1023 )
+                                fprintf(stderr,"Error at line %u: Identifier '%s' too long (> 1023), truncated\n",lineNumber,yytext);
+                            strncpy(yylval.strval,yytext,1023);
+                            yylval.strval[1024] = '\0';
+                            return chaine;
+                        }
                                         
-(([1-9][0-9]*)|0)[.](([0-9]*[1-9])|[0]+)         {yylval.floatval = atof(yytext); return flottant;}
-[1-9][0-9]*|0                           {yylval.intval = atoi(yytext); return entier;}
+(([1-9][0-9]*)|0)[.](([0-9]*[1-9])|[0]+)    {yylval.floatval = atof(yytext); return flottant;}
+[1-9][0-9]*|0                               {yylval.intval = atoi(yytext); return entier;}
 
 [[:space:]] ;
 
diff --git a/corecDev.l b/corecDev.l
index 47e8981..3e0143e 100644
--- a/corecDev.l
+++ b/corecDev.l
@@ -63,24 +63,24 @@ in            {printf("in_dom"); return in_dom;}
 "/"           {printf("divide"); return divide;}
 "%"           {printf("mod"); return mod;}
 
-([0-9]*[[:alpha:]]+|[[:alpha:]])[[:alnum:]]*        {
-                                                        printf("ID");
-                                                        if ( yyleng > 31 )
-                                                            fprintf(stderr,"Error at line %u: Identifier '%s' too long (> 31), truncated.\n",lineNumber,yytext);
-                                                        strncpy(yylval.strval,yytext,31);
-                                                        yylval.strval[31] = '\0';
-                                                        return ID;
-                                                    }
-["]([^"]|[\\]["])*["]                   {
-                                            printf("chaine");
-                                            if ( yyleng > 1023 )
-                                                fprintf(stderr,"Error at line %u: Identifier '%s' too long (> 1023), truncated\n",lineNumber,yytext);
-                                            strncpy(yylval.strval,yytext,1023);
-                                            yylval.strval[1023] = '\0';
-                                            return chaine;
-                                        }
-(([1-9][0-9]*)|0)[.][0-9]*[1-9]         {printf("flottant"); yylval.floatval = atof(yytext); return flottant;}
-[1-9][0-9]*|0                           {printf("entier"); yylval.intval = atoi(yytext); return entier;}
+([0-9]*[[:alpha:]]+|[[:alpha:]])[[:alnum:]]*    {
+                                                    printf("ID");
+                                                    if ( yyleng > 63 )
+                                                        fprintf(stderr,"Error at line %u: Identifier '%s' too long (> 31), truncated.\n",lineNumber,yytext);
+                                                    strncpy(yylval.strval,yytext,63);
+                                                    yylval.strval[64] = '\0';
+                                                    return ID;
+                                                }
+["]([^"]|[\\]["])*["]   {
+                            printf("chaine");
+                            if ( yyleng > 1023 )
+                                fprintf(stderr,"Error at line %u: Identifier '%s' too long (> 1023), truncated\n",lineNumber,yytext);
+                            strncpy(yylval.strval,yytext,1023);
+                            yylval.strval[1023] = '\0';
+                            return chaine;
+                        }
+(([1-9][0-9]*)|0)[.](([0-9]*[1-9])|[0]+)        {printf("flottant"); yylval.floatval = atof(yytext); return flottant;}
+[1-9][0-9]*|0                                   {printf("entier"); yylval.intval = atoi(yytext); return entier;}
 
 [[:space:]] {printf(" ");}
 
-- 
GitLab


From ac4b1b0b205cb9747a0e44fcf05bf17aa0428479 Mon Sep 17 00:00:00 2001
From: Audric Bonneau <audric.bonneau@etu.unistra.fr>
Date: Tue, 24 Dec 2024 19:32:22 +0100
Subject: [PATCH 5/5] Float var as singleton array

---
 Codes_en_COREC/tests/test4.corec           | 14 ++--
 Codes_en_COREC/tests/test5.corec           | 47 +-----------
 Codes_en_COREC/testsErrors/test12Err.corec |  8 ++
 Codes_en_COREC/testsErrors/test13Err.corec |  9 +++
 Codes_en_COREC/testsErrors/test14Err.corec |  9 +++
 Codes_en_COREC/testsErrors/test15Err.corec |  8 ++
 Codes_en_COREC/testsErrors/test16Err.corec |  8 ++
 Codes_en_COREC/testsErrors/test3Err.corec  |  2 +-
 Codes_en_COREC/testsErrors/test4Err.corec  |  2 +-
 Codes_en_COREC/testsErrors/test5Err.corec  |  4 +-
 README.md                                  |  7 +-
 corec.y                                    | 89 +++++++++++++++++++---
 docs/tests.md                              |  6 +-
 lib.c                                      | 24 +++---
 lib.h                                      |  8 +-
 15 files changed, 158 insertions(+), 87 deletions(-)
 create mode 100644 Codes_en_COREC/testsErrors/test12Err.corec
 create mode 100644 Codes_en_COREC/testsErrors/test13Err.corec
 create mode 100644 Codes_en_COREC/testsErrors/test14Err.corec
 create mode 100644 Codes_en_COREC/testsErrors/test15Err.corec
 create mode 100644 Codes_en_COREC/testsErrors/test16Err.corec

diff --git a/Codes_en_COREC/tests/test4.corec b/Codes_en_COREC/tests/test4.corec
index 8c91d74..61dfdca 100644
--- a/Codes_en_COREC/tests/test4.corec
+++ b/Codes_en_COREC/tests/test4.corec
@@ -2,11 +2,11 @@
 
 prog Test4 {
     def Main{
-        Loc : (array,6)
+        Loc : (array,6), (float,1), float=3.0
         Rec : {
-            array[0] = 2;
+            array = 2;
 
-            array[0] += 2;
+            array += float;
             printstr("Attendu 4.00");
             array[1] -= 2;
             printstr("Attendu 2.00");
@@ -17,14 +17,14 @@ prog Test4 {
 
             print(array);
             
-            array[1] = array[0] + 3;
+            array[1] = array[0] + float;
             printstr("Attendu 5.00 :");
-            array[2] = array[0] - 3;
+            array[2] = array[0] - float;
             printstr("Attendu 2.00 :");
 
-            array[3] = array[0] / 3;
+            array[3] = array[0] / float;
             printstr("Attendu 0.66 :");
-            array[4] = array[0] * 3;
+            array[4] = array[0] * float;
             printstr("Attendu 2.00 :");
 
             print(array);
diff --git a/Codes_en_COREC/tests/test5.corec b/Codes_en_COREC/tests/test5.corec
index cf9ee6e..5adf5de 100644
--- a/Codes_en_COREC/tests/test5.corec
+++ b/Codes_en_COREC/tests/test5.corec
@@ -1,52 +1,9 @@
 // Opp on arrays
 
-prog Test4 {
+prog Test5 {
     def Main{
-        Loc : (array,3)
         Rec : {
-            array[0] = 2;
-
-            array[0] += 2;
-            printstr("Attendu 4 :");
-            print((array,3));
-            array[0] -= 2;
-            printstr("Attendu 2 :");
-            print((array,3));
-            array[0] /= 2;
-            printstr("Attendu 1 :");
-            print((array,3));
-            array[0] *= 2;
-            printstr("Attendu 2 :");
-            print((array,3));
-            
-            array[1] = array[0] + 3;
-            printstr("Attendu 5 :");
-            print((array,3));
-
-            array[1] = array[0] - 3;
-            printstr("Attendu 2 :");
-            print((array,3));
-
-            array[1] = array[0] / 3;
-            printstr("Attendu 0.66 :");
-            print((array,3));
-            array[1] = array[0] * 3;
-            printstr("Attendu 2.00 :");
-            print((array,3));
-            
-            
-            array[2] = array[0] + array[1];
-            printstr("Attendu 4 :");
-            print((array,3));
-            array[2] = array[0] - array[1];
-            printstr("Attendu 0 :");
-            print((array,3));
-            array[2] = array[0] / array[1];
-            printstr("Attendu 1 :");
-            print((array,3));
-            array[2] = array[0] * array[1];
-            printstr("Attendu 4 :");
-            print((array,3))
+            printstr("A faire")
         }
     }
 }
diff --git a/Codes_en_COREC/testsErrors/test12Err.corec b/Codes_en_COREC/testsErrors/test12Err.corec
new file mode 100644
index 0000000..6019f03
--- /dev/null
+++ b/Codes_en_COREC/testsErrors/test12Err.corec
@@ -0,0 +1,8 @@
+prog Test12Err {
+    def Main{ 
+        Loc : a = 1.2
+        Rec : {
+            print(a)
+        }
+    }
+}
diff --git a/Codes_en_COREC/testsErrors/test13Err.corec b/Codes_en_COREC/testsErrors/test13Err.corec
new file mode 100644
index 0000000..62483c8
--- /dev/null
+++ b/Codes_en_COREC/testsErrors/test13Err.corec
@@ -0,0 +1,9 @@
+prog Test13Err {
+    def Main{ 
+        Loc : a = 1
+        Rec : {
+            a = 2.1 * 1;
+            print(a)
+        }
+    }
+}
diff --git a/Codes_en_COREC/testsErrors/test14Err.corec b/Codes_en_COREC/testsErrors/test14Err.corec
new file mode 100644
index 0000000..993583b
--- /dev/null
+++ b/Codes_en_COREC/testsErrors/test14Err.corec
@@ -0,0 +1,9 @@
+prog Test14Err {
+    def Main{ 
+        Loc : a = 1
+        Rec : {
+            a += 2.1;
+            print(a)
+        }
+    }
+}
diff --git a/Codes_en_COREC/testsErrors/test15Err.corec b/Codes_en_COREC/testsErrors/test15Err.corec
new file mode 100644
index 0000000..82dd8a0
--- /dev/null
+++ b/Codes_en_COREC/testsErrors/test15Err.corec
@@ -0,0 +1,8 @@
+prog Test15Err {
+    def Main{ 
+        Loc : a, a = 1.2
+        Rec : {
+            print(a)
+        }
+    }
+}
diff --git a/Codes_en_COREC/testsErrors/test16Err.corec b/Codes_en_COREC/testsErrors/test16Err.corec
new file mode 100644
index 0000000..483ecbf
--- /dev/null
+++ b/Codes_en_COREC/testsErrors/test16Err.corec
@@ -0,0 +1,8 @@
+prog Test16Err {
+    def Main{ 
+        Loc : (a,1), a=2.0, b = a
+        Rec : {
+            print(b)
+        }
+    }
+}
diff --git a/Codes_en_COREC/testsErrors/test3Err.corec b/Codes_en_COREC/testsErrors/test3Err.corec
index 4588040..eebb8b3 100644
--- a/Codes_en_COREC/testsErrors/test3Err.corec
+++ b/Codes_en_COREC/testsErrors/test3Err.corec
@@ -3,7 +3,7 @@ prog Test3Err {
         Loc : a, a=2, b // a deja declaré
         Rec : {
             a = 10;
-            b = 2.2;
+            b = 2;
 
             printstr("Affichage de variables, a: ");
             print(a);
diff --git a/Codes_en_COREC/testsErrors/test4Err.corec b/Codes_en_COREC/testsErrors/test4Err.corec
index 4debeec..fdee3ae 100644
--- a/Codes_en_COREC/testsErrors/test4Err.corec
+++ b/Codes_en_COREC/testsErrors/test4Err.corec
@@ -3,7 +3,7 @@ prog Test4Err {
         Loc : a, c=2, b 
         Rec : {
             a = 10;
-            b = 2.2;
+            b = 2;
 
             printstr("Affichage de variables, a: ");
             print(a);
diff --git a/Codes_en_COREC/testsErrors/test5Err.corec b/Codes_en_COREC/testsErrors/test5Err.corec
index 4ba3547..435750f 100644
--- a/Codes_en_COREC/testsErrors/test5Err.corec
+++ b/Codes_en_COREC/testsErrors/test5Err.corec
@@ -3,7 +3,7 @@ prog Test5Err {
         Loc : a, c=2, b 
         Rec : {
             a = 10;
-            b = 2.2;
+            b = 2;
 
             printstr("Affichage de variables, a: ");
             print(a);
@@ -19,7 +19,7 @@ prog Test5Err {
         Loc : a, c=2, b 
         Rec : {
             a = 10;
-            b = 2.2;
+            b = 2;
 
             printstr("Affichage de variables, a: ");
             print(a);
diff --git a/README.md b/README.md
index 7f8a3fb..c1407c9 100644
--- a/README.md
+++ b/README.md
@@ -38,8 +38,8 @@ sudo apt install bison
 
 ## Implemented Features
 ### Branch gencode_1
-- Definition of local variable in the loc section of functions. **(TO DO :TRANSLATE IN MIPS)**
-- Affectation of float and integer value. **(TO DO :TRANSLATE IN MIPS)**
+- Definition of local variable in the loc section of functions. **(TO DO :TRANSLATE IN MIPS but do not do here the float value)**
+- Affectation of integer value. **(TO DO :TRANSLATE IN MIPS but do not do here the float value)**
 - Print and printstr functions. **(TO DO :TRANSLATE IN MIPS)**
 ### Branch gencode_2
 - Operation on variable (except arrays) -> (+,-,*,/). **(TO DO :TRANSLATE IN MIPS)**
@@ -47,8 +47,9 @@ sudo apt install bison
 ### Branch gencode_3-4
 - Affectation and definition of local 1D array. **(TO DO :TRANSLATE IN MIPS)**
 - Operation with and on local 1D array. **(TO DO :TRANSLATE IN MIPS)**
-- print function works on array **(NEED TO VERIFY IF THE SHAPE IS GOOD)**. **(TO DO :TRANSLATE IN MIPS)**
+- print function works on array. **(TO DO :TRANSLATE IN MIPS)**
 
+- float value as singleton array. **(TO DO :TRANSLATE IN MIPS)**
 - Multi dimensional array. **(TO BE SOON)** **(TO DO :TRANSLATE IN MIPS)**
 
 ## To Do
diff --git a/corec.y b/corec.y
index e854ae8..cffcb34 100644
--- a/corec.y
+++ b/corec.y
@@ -24,6 +24,11 @@ uint8_t isPrintCall = 0;
         struct symbol* ptr;
     } ptrVal;
 
+    struct {
+        struct symbol* ptr;
+        uint8_t isEArray;
+    } ptrValE;
+
     struct {
         struct symbol* ptr1;
         struct symbol* ptr2;
@@ -92,7 +97,8 @@ uint8_t isPrintCall = 0;
 %left mult divide mod
 %right usub formatmod
 
-%type <ptrVal> F T E CALL DLIST ELIST
+%type <ptrVal> DLIST ELIST
+%type <ptrValE> E T F CALL
 %type <ptrArray> ARRAYREF ARRAY
 %type <opaff> OPAFF
 
@@ -155,14 +161,44 @@ DECL :
             id = symtable_put_loc(SYMTAB,$1,symb_scope_function);
         }
     | ID aff E 
-        {    
+        {   
             struct symbol* id = symtable_get(SYMTAB,$1,symb_scope_function);
-            if ( id != NULL ){
-                fprintf(stderr, "Error at line %u in function '%s': Variable '%s' is already declared.\n",lineNumber,symb_scope_function->u.name,$1);
-                exit(1);
+            if($3.ptr->kind == CONSTANT_FLOAT){ // Test if affectation a float to an array
+                fprintf(fname,"FLOAT LOC\n");
+                if(id == NULL){
+                    fprintf(stderr, "Error at line %u in function '%s': Try to declare variable '%s' as an float (array of dimension and lenght 1) but the size isn't declare. You may prefer to do this : '(%s,1), '%s'=%0.2f'.\n",lineNumber,symb_scope_function->u.name,$1,$1,$1,$3.ptr->u.value_float);
+                    exit(1);
+                }
+                else if(id->kind != ARRAY){
+                    fprintf(stderr, "Error at line %u in function '%s': Try assigning at variable '%s' a float value (an array of dimension and lenght 1) but '%s' isn't a float variable.\n",lineNumber,symb_scope_function->u.name,$1,$1);
+                    exit(1);
+                }
+            }
+            else if($3.ptr->kind == ARRAY || $3.isEArray){
+                if(id == NULL){
+                    fprintf(stderr, "Error at line %u in function '%s': Try to declare variable '%s' as an integer but the affectation value is an array.\n",lineNumber,symb_scope_function->u.name,$1);
+                    exit(1);
+                }
+                else if(id->kind != ARRAY){
+                    fprintf(stderr, "Error at line %u in function '%s': Try assigning an array variable '%s' to a non array type variable '%s'.\n",lineNumber,symb_scope_function->u.name,$3.ptr->u.arr.name,$1);
+                    exit(1);
+                }
             }
-            id = symtable_put_loc(SYMTAB,$1,symb_scope_function); 
-            gencode(CODE,COPY,id,$3.ptr,NULL);
+            else{ // Test if affectation value isn't a float and array
+                if (id != NULL){
+                    fprintf(stderr, "Error at line %u in function '%s': Variable '%s' is already declared.\n",lineNumber,symb_scope_function->u.name,$1);
+                    exit(1);
+                }
+
+                id = symtable_put_loc(SYMTAB,$1,symb_scope_function); 
+            }
+
+            if(id->kind == ARRAY){ // Handle if ID is an implicit array(array -> array[0])
+                struct symbol* const_0 = symtable_const_int(SYMTAB,0);
+                gencode(CODE,AFF_ARRAY,id,const_0,$3.ptr);
+            }
+            else
+                gencode(CODE,COPY,id,$3.ptr,NULL);
         }
     | ARRAY
         {
@@ -185,7 +221,7 @@ ARRAY :
 DLIST : 
     DLIST comma E
         {
-            if($3.ptr->kind == CONSTANT_DOUBLE){
+            if($3.ptr->kind == CONSTANT_FLOAT){
                 fprintf(stderr, "Error at line %u in function '%s': Try to allocate an array with a float length value.\n",lineNumber,symb_scope_function->u.name);
                 exit(1);
             }
@@ -194,7 +230,7 @@ DLIST :
         }
     | E
         {
-            if($1.ptr->kind == CONSTANT_DOUBLE){
+            if($1.ptr->kind == CONSTANT_FLOAT){
                 fprintf(stderr, "Error at line %u in function '%s': Try to allocate an array with a float length value.\n",lineNumber,symb_scope_function->u.name);
                 exit(1);
             }
@@ -331,7 +367,7 @@ AFFECTATION :
                     break;
 
                 case 5:
-                    fprintf(stderr, "Error at line %u: Unrecognized operation assignment (only +=, -=, *= and /= are possible).\n",lineNumber-1);
+                    fprintf(stderr, "Error at line %u in function '%s': Unrecognized operation assignment (only +=, -=, *= and /= are possible).\n",lineNumber-1,symb_scope_function->u.name);
                     exit(1);
                     break;
 
@@ -345,6 +381,11 @@ AFFECTATION :
         }
     | ID OPAFF E  
         {
+            if($3.ptr->kind == CONSTANT_FLOAT){
+                fprintf(stderr, "Error at line %u in function '%s': Cannot affect an float to an non array variable '%s'.\n",lineNumber-1,symb_scope_function->u.name,$1);
+                exit(1);
+            }
+            
             // Get the variable ID
             struct symbol* id = symtable_get(SYMTAB,$1,symb_scope_function);
             if ( id == NULL ){
@@ -416,6 +457,7 @@ CALL :
     | ID
         {
             // Appel de variable
+            
             struct symbol* id = symtable_get(SYMTAB,$1,symb_scope_function);
             if ( id == NULL ){
                 fprintf(stderr, "Error at line %u in function '%s': Variable '%s' is not declared, neither as an argument, nor as a local variable.\n",lineNumber,symb_scope_function->u.name,$1);
@@ -423,6 +465,7 @@ CALL :
             }
 
             if(id->kind == ARRAY && !isPrintCall){
+                $$.isEArray = 1;
                 $$.ptr = newtemp(SYMTAB);
                 struct symbol* const_0 = symtable_const_int(SYMTAB,0);
                 gencode(CODE,COPY_ARRAY,$$.ptr,id,const_0);
@@ -454,7 +497,7 @@ ARRAYREF : ID left_bracket ELIST right_bracket
             }
             
             // ELIST >= 0 && CONSTANT_INT
-            if($3.ptr->kind == CONSTANT_DOUBLE){
+            if($3.ptr->kind == CONSTANT_FLOAT){
                 fprintf(stderr, "Error at line %u in function '%s': Array '%s' can not be accessed with a float number\n",lineNumber,symb_scope_function->u.name,$1);
                 exit(1);
             }
@@ -487,11 +530,19 @@ ELIST :
 E : 
     E plus T
         {
+            if($1.ptr->kind != $3.ptr->kind && ($3.ptr->kind == CONSTANT_INT || $3.ptr->kind==CONSTANT_FLOAT) && ($1.ptr->kind == CONSTANT_INT || $1.ptr->kind==CONSTANT_FLOAT) ){
+                fprintf(stderr, "Error at line %u in function '%s': Try to perfom an operation with two operands of differents types.\n",lineNumber,symb_scope_function->u.name);
+                exit(1);
+            }
             $$.ptr = newtemp(SYMTAB);
             gencode(CODE,BOP_PLUS,$$.ptr,$1.ptr,$3.ptr);
         }
     | E sub T
         {
+            if($1.ptr->kind != $3.ptr->kind && ($3.ptr->kind == CONSTANT_INT || $3.ptr->kind==CONSTANT_FLOAT) && ($1.ptr->kind == CONSTANT_INT || $1.ptr->kind==CONSTANT_FLOAT) ){
+                fprintf(stderr, "Error at line %u in function '%s': Try to perfom an operation with two operands of differents types.\n",lineNumber,symb_scope_function->u.name);
+                exit(1);
+            }
             $$.ptr = newtemp(SYMTAB);
             gencode(CODE,BOP_MINUS,$$.ptr,$1.ptr,$3.ptr);
         }
@@ -503,28 +554,42 @@ E :
     | T
         {
             $$.ptr = $1.ptr;
+            $$.isEArray = $1.isEArray;
         }
     ;
 
 T : 
     T mult F 
         {
+            if($1.ptr->kind != $3.ptr->kind && ($3.ptr->kind == CONSTANT_INT || $3.ptr->kind==CONSTANT_FLOAT) && ($1.ptr->kind == CONSTANT_INT || $1.ptr->kind==CONSTANT_FLOAT) ){
+                fprintf(stderr, "Error at line %u in function '%s': Try to perfom an operation with two operands of differents types.\n",lineNumber,symb_scope_function->u.name);
+                exit(1);
+            }
             $$.ptr = newtemp(SYMTAB);
             gencode(CODE,BOP_MULT,$$.ptr,$1.ptr,$3.ptr); 
         }
     | T divide F
         {
+            if($1.ptr->kind != $3.ptr->kind && ($3.ptr->kind == CONSTANT_INT || $3.ptr->kind==CONSTANT_FLOAT) && ($1.ptr->kind == CONSTANT_INT || $1.ptr->kind==CONSTANT_FLOAT) ){
+                fprintf(stderr, "Error at line %u in function '%s': Try to perfom an operation with two operands of differents types.\n",lineNumber,symb_scope_function->u.name);
+                exit(1);
+            }
             $$.ptr = newtemp(SYMTAB);
             gencode(CODE,BOP_DIV,$$.ptr,$1.ptr,$3.ptr); 
         }
     | T mod F 
         {
+            if($1.ptr->kind != $3.ptr->kind && ($3.ptr->kind == CONSTANT_INT || $3.ptr->kind==CONSTANT_FLOAT) && ($1.ptr->kind == CONSTANT_INT || $1.ptr->kind==CONSTANT_FLOAT) ){
+                fprintf(stderr, "Error at line %u in function '%s': Try to perfom an operation with two operands of differents types.\n",lineNumber,symb_scope_function->u.name);
+                exit(1);
+            }
             $$.ptr = newtemp(SYMTAB);
             gencode(CODE,BOP_MOD,$$.ptr,$1.ptr,$3.ptr); 
         }
     | F
         {
             $$.ptr = $1.ptr; 
+            $$.isEArray = $1.isEArray;
         }
     ;
 
@@ -535,10 +600,12 @@ F :
         }
     | CALL 
         {
+            $$.isEArray = $1.isEArray;
             $$.ptr = $1.ptr;
         }
     | ARRAYREF 
         {
+                       
             $$.ptr = newtemp(SYMTAB);
             gencode(CODE,COPY_ARRAY,$$.ptr,$1.ptr1,$1.ptr2);
         }
diff --git a/docs/tests.md b/docs/tests.md
index 6094bc1..5777fa3 100644
--- a/docs/tests.md
+++ b/docs/tests.md
@@ -23,7 +23,11 @@
 9. Out of range in a local array.
 10. Reached array memory with a float value.
 11. Allocate a array with a float value.
-12. 
+12. Float is array of dim 1, length 1. Defined in Loc a=FLOAT_VALUE should be OK only if before, the user has declared (a,1).
+13. Same but an affectation assign a float value to an integer variable. 
+14. Try assigning a float value to a non-array variable.
+15. Try assigning a float value to a non-array variable in Loc section.
+16. Try assigning to a non array value an array.
 
 ## Navigation
 Return to the main documentation -> [click here](./../README.md).
\ No newline at end of file
diff --git a/lib.c b/lib.c
index 8828fe3..a789a63 100644
--- a/lib.c
+++ b/lib.c
@@ -56,11 +56,11 @@ struct symbol* symtable_const_int(struct symtable * t, long int v)
     }
 }
 
-struct symbol* symtable_const_double(struct symtable * t, double v) 
+struct symbol* symtable_const_double(struct symtable * t, float v) 
 {
     unsigned int i;
     for ( i=0 ; i<t->size; i++ ){
-        if(t->symbols[i].kind == CONSTANT_DOUBLE){
+        if(t->symbols[i].kind == CONSTANT_FLOAT){
             if(t->symbols[i].u.value_int == v){
                 break;
             }
@@ -71,8 +71,8 @@ struct symbol* symtable_const_double(struct symtable * t, double v)
         if(t->size==t->capacity)
           symtable_grow(t);
         struct symbol *s = &(t->symbols[t->size]);
-        s->kind = CONSTANT_DOUBLE;
-        s->u.value_double = v;
+        s->kind = CONSTANT_FLOAT;
+        s->u.value_float = v;
         ++ (t->size);
         return s;
     }
@@ -157,8 +157,8 @@ void symtable_dump(struct symtable * t, FILE* fout)
     {
       if(t->symbols[i].kind==CONSTANT_INT)
         fprintf(fout,"#       %p = %ld\n",&(t->symbols[i]),t->symbols[i].u.value_int);
-      else if(t->symbols[i].kind==CONSTANT_DOUBLE)
-        fprintf(fout,"#       %p = %0.2lf\n",&(t->symbols[i]),t->symbols[i].u.value_double);
+      else if(t->symbols[i].kind==CONSTANT_FLOAT)
+        fprintf(fout,"#       %p = %0.2f\n",&(t->symbols[i]),t->symbols[i].u.value_float);
       else if(t->symbols[i].kind==NAME)
         fprintf(fout,"#       %p = %s\n",&(t->symbols[i]),t->symbols[i].u.name);
       else if(t->symbols[i].kind==NAME_LOC)
@@ -171,8 +171,8 @@ void symtable_dump(struct symtable * t, FILE* fout)
           fprintf(fout,"%s",t->symbols[i].u.arr.size[0]->u.name);
         else if(t->symbols[i].u.arr.size[0]->kind == CONSTANT_INT)
           fprintf(fout,"%ld",t->symbols[i].u.arr.size[0]->u.value_int);
-        else if(t->symbols[i].u.arr.size[0]->kind == CONSTANT_DOUBLE)
-          fprintf(fout,"%0.2lf",t->symbols[i].u.arr.size[0]->u.value_double);
+        else if(t->symbols[i].u.arr.size[0]->kind == CONSTANT_FLOAT)
+          fprintf(fout,"%0.2f",t->symbols[i].u.arr.size[0]->u.value_float);
         else{
           printf("BUG array size kind:%d\n",t->symbols[i].u.arr.size[0]->kind); 
           exit(1);
@@ -251,8 +251,8 @@ static void symbol_dump(struct symbol* s, FILE* fout)
         case CONSTANT_INT:
             fprintf(fout,"%ld",s->u.value_int);
             break;
-        case CONSTANT_DOUBLE:
-            fprintf(fout,"%0.2lf",s->u.value_double);
+        case CONSTANT_FLOAT:
+            fprintf(fout,"%0.2f",s->u.value_float);
             break;
         case NAME_LOC:
             fprintf(fout,"%s",s->u.name);
@@ -390,8 +390,8 @@ void code_mips_dump(struct symtable * t, struct code * c){
         if(t->symbols[i].kind == CONSTANT_INT){ //INTEGER CONSTANT 
             fprintf(stdout,"\ttemp%d: .word %ld\n",i,t->symbols[i].u.value_int);
         }
-        else if(t->symbols[i].kind == CONSTANT_DOUBLE){ //FLOAT CONSTANT
-            fprintf(stdout,"\ttemp%d: .word %0.2lf\n",i,t->symbols[i].u.value_double);
+        else if(t->symbols[i].kind == CONSTANT_FLOAT){ //FLOAT CONSTANT
+            fprintf(stdout,"\ttemp%d: .word %0.2f\n",i,t->symbols[i].u.value_float);
         }
         else{ //NAME
             fprintf(stdout,"\ttemp%d: .word 0\n",i);
diff --git a/lib.h b/lib.h
index 0201f5c..f1d26c2 100644
--- a/lib.h
+++ b/lib.h
@@ -20,7 +20,7 @@ struct array {
 struct symbol {
   enum { NAME,        // -> use the name attribut in the union u
     CONSTANT_INT,     // -> use the value_int attribut in the union u
-    CONSTANT_DOUBLE,  // -> use the value_double attribut in the union u
+    CONSTANT_FLOAT,  // -> use the value_float attribut in the union u
     CHAIN,            // -> use the chaine attribut in the union u
     NAME_LOC,         // -> use the name attribut, the symbol is just defined
     ARRAY             // -> use the name attribut in the union u
@@ -29,7 +29,7 @@ struct symbol {
         name_t name;
         name_64_t chaine;
         long int value_int;
-        double value_double;
+        float value_float;
         struct array arr;
     } u;
 
@@ -50,8 +50,8 @@ struct symtable * symtable_new();
 
 // Add a symbol in the table of a integer (CONSTANT_INT)
 struct symbol* symtable_const_int(struct symtable * t, long int v);
-// Add a symbol in the table of a double (CONSTANT_DOUBLE)
-struct symbol* symtable_const_double(struct symtable * t, double v);
+// Add a symbol in the table of a float (CONSTANT_FLOAT)
+struct symbol* symtable_const_double(struct symtable * t, float v);
 // Add a symbol in the table of a function (NAME)
 struct symbol* symtable_put_name(struct symtable * t, const char * s);
 // Add a symbol in the table of a chaine of caracters (CHAIN)
-- 
GitLab