--- rpl/src/analyse_notation_algebrique.c 2013/03/21 16:31:58 1.44 +++ rpl/src/analyse_notation_algebrique.c 2015/01/05 15:32:11 1.56 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.1.13 - Copyright (C) 1989-2013 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.20 + Copyright (C) 1989-2015 Dr. BERTRAND Joël This file is part of RPL/2. @@ -116,7 +116,10 @@ analyse_algebrique(struct_processus *s_e if (chaine_algebrique[i] == '"') { - presence_chaine = (presence_chaine == d_faux) ? d_vrai : d_faux; + if (chaine_algebrique[i - 1] != '\\') + { + presence_chaine = (presence_chaine == d_faux) ? d_vrai : d_faux; + } } else if (presence_chaine == d_faux) { @@ -177,13 +180,30 @@ analyse_algebrique(struct_processus *s_e { if ((*ptr1) == '"') { - if (presence_chaine == d_faux) - { - presence_chaine = d_vrai; + if (ptr1 != chaine_travail) + { // Il existe un caractère précédent. + if ((*(ptr1 - 1)) != '\\') + { + if (presence_chaine == d_faux) + { + presence_chaine = d_vrai; + } + else + { + presence_chaine = d_faux; + } + } } else - { - presence_chaine = d_faux; + { // Il n'existe pas de caractère précédent. + if (presence_chaine == d_faux) + { + presence_chaine = d_vrai; + } + else + { + presence_chaine = d_faux; + } } } @@ -221,8 +241,12 @@ analyse_algebrique(struct_processus *s_e for(i = 0; i < 4; (*(ptr2++)) = (*(ptr1++)), i++); (*(ptr2++)) = (*ptr1); } - else if ((strncmp(instruction_majuscule, " OR ", 4) == 0) && - (strlen(instruction_majuscule) == 4)) + else if (strcmp(instruction_majuscule, " EQV ") == 0) + { + for(i = 0; i < 4; (*(ptr2++)) = (*(ptr1++)), i++); + (*(ptr2++)) = (*ptr1); + } + else if ((strcmp(instruction_majuscule, " OR ") == 0)) { for(i = 0; i < 3; (*(ptr2++)) = (*(ptr1++)), i++); (*(ptr2++)) = (*ptr1); @@ -268,8 +292,19 @@ analyse_algebrique(struct_processus *s_e } else if (chaine_travail[i] == '"') { - presence_chaine = (presence_chaine == d_vrai) - ? d_faux : d_vrai; + if (i > 0) + { + if (chaine_travail[i - 1] != '\\') + { + presence_chaine = (presence_chaine == d_vrai) + ? d_faux : d_vrai; + } + } + else + { + presence_chaine = (presence_chaine == d_vrai) + ? d_faux : d_vrai; + } } i++; @@ -306,8 +341,19 @@ analyse_algebrique(struct_processus *s_e if (chaine_travail[j] == '"') { - presence_chaine = (presence_chaine == d_vrai) - ? d_faux : d_vrai; + if (j > 0) + { + if (chaine_travail[j - 1] != '\\') + { + presence_chaine = (presence_chaine == d_vrai) + ? d_faux : d_vrai; + } + } + else + { + presence_chaine = (presence_chaine == d_vrai) + ? d_faux : d_vrai; + } } j++; @@ -358,8 +404,19 @@ analyse_algebrique(struct_processus *s_e { if (chaine_centrale[i] == '"') { - presence_chaine = (presence_chaine == d_faux) - ? d_vrai : d_faux; + if (i > 0) + { + if (chaine_centrale[i - 1] != '\\') + { + presence_chaine = (presence_chaine == d_faux) + ? d_vrai : d_faux; + } + } + else + { + presence_chaine = (presence_chaine == d_faux) + ? d_vrai : d_faux; + } if (i == 1) { @@ -976,8 +1033,10 @@ analyse_algebrique(struct_processus *s_e drapeau_modification = d_vrai; } else if (((priorite == 1) && (t4 == ' ') && - (t3 == 'X') && (t2 == 'O') && (t1 == 'R') - && (t0 == ' ')) || ((priorite == 2) && + (((t3 == 'X') && (t2 == 'O') && (t1 == 'R')) + || ((t3 == 'E') && (t2 == 'Q') && + (t1 == 'V'))) && (t0 == ' ')) + || ((priorite == 2) && (t4 == ' ') && (t3 == 'A') && (t2 == 'N') && (t1 == 'D') && (t0 == ' '))) { @@ -1166,7 +1225,7 @@ test_expression_rpn(unsigned char *chain if (chaine[i - 1] == '"') { i++; - while(chaine[i - 1] != '"') + while(!((chaine[i - 1] == '"') && (chaine[i - 2] != '\\'))) { i++; } @@ -1220,6 +1279,9 @@ test_expression_rpn(unsigned char *chain || ((t0 == ' ') && ((t1 == 'A') || (t1 == 'a')) && ((t2 == 'N') || (t2 == 'n')) && ((t3 == 'D') || (t3 == 'd')) && (t4 == ' ')) || + ((t0 == ' ') && ((t1 == 'E') || (t1 == 'e')) && + ((t2 == 'Q') || (t2 == 'q')) && ((t3 == 'V') || (t3 == 'v')) + && (t4 == ' ')) || ((t0 == ' ') && ((t1 == 'O') || (t1 == 'o')) && ((t2 == 'R') || (t2 == 'r')) && (t3 == ' ')) || ((t0 == ' ') && ((t1 == 'X') || (t1 == 'x')) && @@ -1315,19 +1377,7 @@ extraction_chaine(unsigned char *chaine, unsigned char *sous_chaine; if ((position_1 < 1) || (position_2 < position_1) || - (position_1 > ((integer8) strlen(chaine)))) - { - if ((sous_chaine = (unsigned char *) malloc(sizeof(unsigned char))) - == NULL) - { - return(NULL); - } - - (*sous_chaine) = d_code_fin_chaine; - return(sous_chaine); - } - - if (position_2 > ((integer8) strlen(chaine))) + (position_2 > ((integer8) strlen(chaine)))) { if ((sous_chaine = (unsigned char *) malloc(sizeof(unsigned char))) == NULL)