From 336d8d58bd20258a4b94f15814502cff908b6ba8 Mon Sep 17 00:00:00 2001 From: Xawirses Date: Tue, 23 Feb 2016 18:02:37 +0100 Subject: [PATCH] easy partiel --- eval-partiel/Makefile | 17 + eval-partiel/README.html | 97 + eval-partiel/analyseur_xml.c | 323 ++++ eval-partiel/analyseur_xml.h | 25 + eval-partiel/compare_arbres_xml | Bin 0 -> 19568 bytes eval-partiel/compare_arbres_xml.c | 63 + eval-partiel/fiche_eval_partiel_2016.pdf | Bin 0 -> 59430 bytes eval-partiel/input/affect-err.l | 7 + eval-partiel/input/affect.l | 6 + eval-partiel/input/boucle.l | 11 + eval-partiel/input/eval1.l | 25 + eval-partiel/input/eval1err.l | 1 + eval-partiel/input/eval2.l | 14 + eval-partiel/input/eval2err.l | 7 + eval-partiel/input/eval3.l | 12 + eval-partiel/input/eval3err.l | 12 + eval-partiel/input/eval4.l | 7 + eval-partiel/input/eval4err.l | 1 + eval-partiel/input/eval5.l | 9 + eval-partiel/input/eval5err.l | 1 + eval-partiel/input/eval6.l | 11 + eval-partiel/input/eval7.l | 0 eval-partiel/input/eval8.l | 9 + eval-partiel/input/expression.l | 5 + eval-partiel/input/max.l | 23 + eval-partiel/input/test1.l | 8 + eval-partiel/input/test1err.l | 6 + eval-partiel/input/test2.l | 8 + eval-partiel/input/test3.l | 8 + eval-partiel/input/tri.l | 57 + eval-partiel/main.css | 196 ++ eval-partiel/output/affect-err.synt.xml | 110 ++ eval-partiel/output/affect.lex | 18 + eval-partiel/output/affect.synt | 113 ++ eval-partiel/output/boucle.lex | 40 + eval-partiel/output/boucle.synt | 283 +++ eval-partiel/output/eval1.lex | 100 + eval-partiel/output/eval1.synt | 681 +++++++ eval-partiel/output/eval1err.synt.xml | 1 + eval-partiel/output/eval2.lex | 51 + eval-partiel/output/eval2.synt | 360 ++++ eval-partiel/output/eval2err.synt.xml | 110 ++ eval-partiel/output/eval3.lex | 91 + eval-partiel/output/eval3.synt | 652 +++++++ eval-partiel/output/eval3err.synt.xml | 28 + eval-partiel/output/eval4.lex | 19 + eval-partiel/output/eval4.synt | 112 ++ eval-partiel/output/eval4err.synt.xml | 5 + eval-partiel/output/eval5.lex | 27 + eval-partiel/output/eval5.synt | 154 ++ eval-partiel/output/eval5err.synt.xml | 5 + eval-partiel/output/eval6.lex | 62 + eval-partiel/output/eval6.synt | 443 +++++ eval-partiel/output/eval7.lex | 1 + eval-partiel/output/eval7.synt | 6 + eval-partiel/output/eval8.lex | 31 + eval-partiel/output/eval8.synt | 222 +++ eval-partiel/output/expression.lex | 16 + eval-partiel/output/expression.synt | 77 + eval-partiel/output/max.lex | 72 + eval-partiel/output/max.synt | 513 ++++++ eval-partiel/output/tri.lex | 271 +++ eval-partiel/output/tri.synt | 2146 ++++++++++++++++++++++ eval-partiel/ref-lex/affect.lex | 18 + eval-partiel/ref-lex/boucle.lex | 40 + eval-partiel/ref-lex/eval1.lex | 100 + eval-partiel/ref-lex/eval2.lex | 51 + eval-partiel/ref-lex/eval3.lex | 91 + eval-partiel/ref-lex/eval4.lex | 19 + eval-partiel/ref-lex/eval5.lex | 27 + eval-partiel/ref-lex/eval6.lex | 62 + eval-partiel/ref-lex/eval7.lex | 1 + eval-partiel/ref-lex/eval8.lex | 31 + eval-partiel/ref-lex/expression.lex | 16 + eval-partiel/ref-lex/max.lex | 72 + eval-partiel/ref-lex/test1.lex | 32 + eval-partiel/ref-lex/test2.lex | 32 + eval-partiel/ref-lex/test3.lex | 32 + eval-partiel/ref-lex/tri.lex | 271 +++ eval-partiel/ref-synt/affect.synt | 113 ++ eval-partiel/ref-synt/boucle.synt | 283 +++ eval-partiel/ref-synt/eval1.synt | 681 +++++++ eval-partiel/ref-synt/eval2.synt | 360 ++++ eval-partiel/ref-synt/eval3.synt | 652 +++++++ eval-partiel/ref-synt/eval4.synt | 112 ++ eval-partiel/ref-synt/eval5.synt | 154 ++ eval-partiel/ref-synt/eval6.synt | 443 +++++ eval-partiel/ref-synt/eval7.synt | 6 + eval-partiel/ref-synt/eval8.synt | 222 +++ eval-partiel/ref-synt/expression.synt | 77 + eval-partiel/ref-synt/max.synt | 513 ++++++ eval-partiel/ref-synt/test1.synt | 215 +++ eval-partiel/ref-synt/test2.synt | 215 +++ eval-partiel/ref-synt/test3.synt | 215 +++ eval-partiel/ref-synt/tri.synt | 2146 ++++++++++++++++++++++ eval-partiel/runEval.sh | 157 ++ header/analyseur_syntaxyque.h | 1 + header/symboles.h | 8 +- src/analyseur_lexical.c | 6 +- src/analyseur_syntaxyque.c | 44 +- src/premiers.c | 4 + src/suivants.c | 21 + 102 files changed, 15322 insertions(+), 10 deletions(-) create mode 100644 eval-partiel/Makefile create mode 100644 eval-partiel/README.html create mode 100644 eval-partiel/analyseur_xml.c create mode 100644 eval-partiel/analyseur_xml.h create mode 100755 eval-partiel/compare_arbres_xml create mode 100644 eval-partiel/compare_arbres_xml.c create mode 100644 eval-partiel/fiche_eval_partiel_2016.pdf create mode 100644 eval-partiel/input/affect-err.l create mode 100644 eval-partiel/input/affect.l create mode 100644 eval-partiel/input/boucle.l create mode 100644 eval-partiel/input/eval1.l create mode 100644 eval-partiel/input/eval1err.l create mode 100644 eval-partiel/input/eval2.l create mode 100644 eval-partiel/input/eval2err.l create mode 100644 eval-partiel/input/eval3.l create mode 100644 eval-partiel/input/eval3err.l create mode 100644 eval-partiel/input/eval4.l create mode 100644 eval-partiel/input/eval4err.l create mode 100644 eval-partiel/input/eval5.l create mode 100644 eval-partiel/input/eval5err.l create mode 100644 eval-partiel/input/eval6.l create mode 100644 eval-partiel/input/eval7.l create mode 100644 eval-partiel/input/eval8.l create mode 100644 eval-partiel/input/expression.l create mode 100644 eval-partiel/input/max.l create mode 100644 eval-partiel/input/test1.l create mode 100644 eval-partiel/input/test1err.l create mode 100644 eval-partiel/input/test2.l create mode 100644 eval-partiel/input/test3.l create mode 100644 eval-partiel/input/tri.l create mode 100755 eval-partiel/main.css create mode 100644 eval-partiel/output/affect-err.synt.xml create mode 100644 eval-partiel/output/affect.lex create mode 100644 eval-partiel/output/affect.synt create mode 100644 eval-partiel/output/boucle.lex create mode 100644 eval-partiel/output/boucle.synt create mode 100644 eval-partiel/output/eval1.lex create mode 100644 eval-partiel/output/eval1.synt create mode 100644 eval-partiel/output/eval1err.synt.xml create mode 100644 eval-partiel/output/eval2.lex create mode 100644 eval-partiel/output/eval2.synt create mode 100644 eval-partiel/output/eval2err.synt.xml create mode 100644 eval-partiel/output/eval3.lex create mode 100644 eval-partiel/output/eval3.synt create mode 100644 eval-partiel/output/eval3err.synt.xml create mode 100644 eval-partiel/output/eval4.lex create mode 100644 eval-partiel/output/eval4.synt create mode 100644 eval-partiel/output/eval4err.synt.xml create mode 100644 eval-partiel/output/eval5.lex create mode 100644 eval-partiel/output/eval5.synt create mode 100644 eval-partiel/output/eval5err.synt.xml create mode 100644 eval-partiel/output/eval6.lex create mode 100644 eval-partiel/output/eval6.synt create mode 100644 eval-partiel/output/eval7.lex create mode 100644 eval-partiel/output/eval7.synt create mode 100644 eval-partiel/output/eval8.lex create mode 100644 eval-partiel/output/eval8.synt create mode 100644 eval-partiel/output/expression.lex create mode 100644 eval-partiel/output/expression.synt create mode 100644 eval-partiel/output/max.lex create mode 100644 eval-partiel/output/max.synt create mode 100644 eval-partiel/output/tri.lex create mode 100644 eval-partiel/output/tri.synt create mode 100644 eval-partiel/ref-lex/affect.lex create mode 100644 eval-partiel/ref-lex/boucle.lex create mode 100644 eval-partiel/ref-lex/eval1.lex create mode 100644 eval-partiel/ref-lex/eval2.lex create mode 100644 eval-partiel/ref-lex/eval3.lex create mode 100644 eval-partiel/ref-lex/eval4.lex create mode 100644 eval-partiel/ref-lex/eval5.lex create mode 100644 eval-partiel/ref-lex/eval6.lex create mode 100644 eval-partiel/ref-lex/eval7.lex create mode 100644 eval-partiel/ref-lex/eval8.lex create mode 100644 eval-partiel/ref-lex/expression.lex create mode 100644 eval-partiel/ref-lex/max.lex create mode 100644 eval-partiel/ref-lex/test1.lex create mode 100644 eval-partiel/ref-lex/test2.lex create mode 100644 eval-partiel/ref-lex/test3.lex create mode 100644 eval-partiel/ref-lex/tri.lex create mode 100644 eval-partiel/ref-synt/affect.synt create mode 100644 eval-partiel/ref-synt/boucle.synt create mode 100644 eval-partiel/ref-synt/eval1.synt create mode 100644 eval-partiel/ref-synt/eval2.synt create mode 100644 eval-partiel/ref-synt/eval3.synt create mode 100644 eval-partiel/ref-synt/eval4.synt create mode 100644 eval-partiel/ref-synt/eval5.synt create mode 100644 eval-partiel/ref-synt/eval6.synt create mode 100644 eval-partiel/ref-synt/eval7.synt create mode 100644 eval-partiel/ref-synt/eval8.synt create mode 100644 eval-partiel/ref-synt/expression.synt create mode 100644 eval-partiel/ref-synt/max.synt create mode 100644 eval-partiel/ref-synt/test1.synt create mode 100644 eval-partiel/ref-synt/test2.synt create mode 100644 eval-partiel/ref-synt/test3.synt create mode 100644 eval-partiel/ref-synt/tri.synt create mode 100755 eval-partiel/runEval.sh diff --git a/eval-partiel/Makefile b/eval-partiel/Makefile new file mode 100644 index 0000000..9022348 --- /dev/null +++ b/eval-partiel/Makefile @@ -0,0 +1,17 @@ +CC = gcc + +LIBS = -lm +CCFLAGS = -Wall -ggdb + +all: compare_arbres_xml + +compare_arbres_xml: compare_arbres_xml.c analyseur_xml.o + $(CC) $(CCFLAGS) -o compare_arbres_xml compare_arbres_xml.c analyseur_xml.o + +analyseur_xml.o: analyseur_xml.c + $(CC) $(CCFLAGS) -c analyseur_xml.c + +.PHONY : clean + +clean: + - rm -f *.o compare_arbres_xml diff --git a/eval-partiel/README.html b/eval-partiel/README.html new file mode 100644 index 0000000..3cf923a --- /dev/null +++ b/eval-partiel/README.html @@ -0,0 +1,97 @@ + + + + + Carlos Ramisch - personal page + + + + +
+

Evaluation de l'analyseur syntaxique 2015/2016

+ +

1 - Compilation du compilateur

+ +Compilez votre analyseur à l'aide d'un Makefile. + +

2 - Exécution sur des exemples existants

+ + +

Vous pouvez modifier le script runEval.sh en modifiant le chemin vers l'exécutable de votre compilateur. Ensuite, exécutez-le pour effectuer les tests ci-dessous 100% automatiquement

+ +

Analysez les programmes suivants :

+ + + + + + + + +
affect.l
boucle.l
expression.l
max.l
tri.l
affect-err.l
+ +

3 - Exécution sur de nouveaux exemples

+ +

3.1 Exemples compilés OK

+ +

Compilez à l'aide de votre compilateur, les programmes suivants :

+ + + + + + + + + + +
eval1.l
eval2.l
eval3.l
eval4.l
eval5.l
eval6.l
eval7.l
eval8.l
+ +

3.1 Exemples pas compilés

+ +

Vérifiez que les programmes suivants ne compilent pas :

+ + + + + + + +
eval1err.l
eval2err.l
eval3err.l
eval4err.l
eval5err.l
+ + + + +

4 - Ajout de la boucle pour

+ +

On désire ajouter à notre langage une boucle de type pour, dont voici la syntaxe:

+ +

pour IAFFinit E; IAFFincr faire IB

+ +

Une telle instruction exécute d'abord la première affectation, contenue dans IAFFinit, pour l'initialisation. Ensuite, tant que la valeur de l'expression E est vraie, c'est-à-dire, ne vaut pas zéro, elle exécute le bloc d'instructions dans IB suivi de l'instruction d'incrément IAFFincr. Cette boucle est similaire à la boucle for en C. Cependant, il n'est pas possible de mettre autre chose qu'une affectation dans les parties d'initialisation et d'incrément (en C, elles peuvent être vides ou contenir n'importe quelle instruction-expression).

+ + + +

Modifiez l'analyseur lexical et l'analyseur syntaxique afin de prendre en compte cette nouvelle instruction.

+ +

5 - Tests

+

Vous testerez votre nouvel analyseur sur les programmes suivants:

+ + + + + + +
test1.l
test2.l
test3.l
test1err.l - ne doit pas compiler
+
+
+ + + diff --git a/eval-partiel/analyseur_xml.c b/eval-partiel/analyseur_xml.c new file mode 100644 index 0000000..164345b --- /dev/null +++ b/eval-partiel/analyseur_xml.c @@ -0,0 +1,323 @@ +#include +#include +#include +#include"analyseur_xml.h" + +/* symboles terminaux */ + +#define CHEVRON_FERMANT 1 +#define DEBUT_BF 2 +#define DEBUT_BO 3 +#define CHAINE 4 +#define FIN 5 + +#define ISSPACE(a) (a == ' ') || (a == '\n') || (a == '\t') + +#define YYTEXT_MAX 100 + +/* fonctions pour arbre abstrait */ + +noeud *cree_noeud(char *nom) +{ + noeud *n = malloc(sizeof(noeud)); + if(n == NULL){ + fprintf(stderr, "erreur d'allocation\n"); + exit(1); + } + n->nom = nom; + n->premier_fils = NULL; + n->dernier_fils = NULL; + n->suiv = NULL; + return n; +} + +noeud *ajoute_fils(noeud *pere, noeud *fils) +{ + if(pere->premier_fils == NULL){ + pere->premier_fils = pere->dernier_fils = fils; + return pere; + } + pere->dernier_fils->suiv = fils; + pere->dernier_fils = fils; + return pere; + +} + +void affiche_arbre(noeud *racine){ + noeud *n; + printf("<%s> ", racine->nom); + for(n=racine->premier_fils; n!=NULL; n = n->suiv){ + affiche_arbre(n); + } + printf(" ", racine->nom); +} + + +int compare_arbres_rec(noeud *racine1, noeud *racine2, int verbose, int profondeur) +{ + noeud *f1, *f2; + int resultat = 1; + int i; + if(verbose){ + for(i=0; i %s\n", racine1->nom, racine2->nom); + } + if(strcmp(racine1->nom, racine2->nom)) + return 0; + + for(f1 = racine1->premier_fils, f2 = racine2->premier_fils; + f1 && f2 && resultat; + f1 = f1->suiv, f2 = f2->suiv){ + resultat = compare_arbres_rec(f1, f2, verbose, profondeur+1); + } + return ((f1 == NULL) && (f2 == NULL) && resultat); +} + +int compare_arbres(noeud *racine1, noeud *racine2, int verbose) +{ + return compare_arbres_rec(racine1, racine2, verbose, 0); +} + +void libere_arbre(noeud *racine) +{ + noeud *n; + for(n=racine->premier_fils; n!=NULL; n = n->suiv){ + libere_arbre(n); + } + free(racine); +} + +/* analyseur lexical */ + +int DEBUG = 0; +char yytext[YYTEXT_MAX]; +int yyleng; +int yylval; +/* Compter les lignes pour afficher les messages d'erreur avec numero ligne */ +int nb_ligne; +int cc; + +/******************************************************************************* + * Fonction qui ignore les espaces et commentaires. + * Renvoie -1 si arrivé à la fin du fichier, 0 si tout va bien + ******************************************************************************/ +int mangeEspaces() +{ + char c = fgetc(yyin); + while( ISSPACE(c) ) { + if( c == '\n' ) { + nb_ligne++; + } + c = fgetc(yyin); + } + if ( feof(yyin) ) { + return -1; + } + ungetc(c, yyin); + return 0; +} + +/******************************************************************************* + * Lit un caractère et le stocke dans le buffer yytext + ******************************************************************************/ +char lireCar(void) +{ + yytext[yyleng++] = fgetc(yyin); + yytext[yyleng] = '\0'; + return yytext[yyleng - 1]; +} + +/******************************************************************************* + * Remet le dernier caractère lu au buffer clavier et enlève du buffer yytext + ******************************************************************************/ +void delireCar() +{ + char c; + c = yytext[yyleng - 1]; + yytext[--yyleng] = '\0'; + ungetc(c, yyin); +} +/******************************************************************************* + * Fonction principale de l'analyseur lexical, lit les caractères de yyin et + * renvoie les tokens sous forme d'entier. Le code de chaque unité est défini + * dans symboles.h sinon (mot clé, idententifiant, etc.). Pour les tokens de + * type ID_FCT, ID_VAR et NOMBRE la valeur du token est dans yytext, visible + * dans l'analyseur syntaxique. + ******************************************************************************/ +int inTag = 0; + +int yylex(void) +{ + char c; + yytext[yyleng = 0] = '\0'; + + /* Si j'ai trouvé la fin du fichier en lisant des espaces ... */ + if( !inTag && mangeEspaces() == -1 ) { + return FIN; /* Renvoie le marqueur de fin d'entrée */ + } + + c = lireCar(); + if(c == '>'){ + if(DEBUG) { printf("CHEVRON_FERMANT\n"); } + //inTag = 0; + return CHEVRON_FERMANT; + } + if(c == '<'){ + inTag = 1; + c = lireCar(); + if(c == '/'){ + if(DEBUG) { printf("DEBUT_BF\n"); } + return DEBUT_BF; + } + else{ + delireCar(); + if(DEBUG) { printf("DEBUT_BO\n"); } + return DEBUT_BO; + } + } + do{ + c = lireCar(); + inTag = 0; + }while((c!= '<') && (c!= '>') && !feof(yyin) && !(ISSPACE(c))); + delireCar(); + if(DEBUG) { printf("CHAINE\n"); } + + return CHAINE; + } + + + /******************************************************************************* + * Fonction auxiliaire appelée par l'analyseur syntaxique tout simplement pour + * afficher des messages d'erreur et l'arbre XML + ******************************************************************************/ +void nom_token( int token, char *nom, char *valeur ) { + //int i; + + strcpy( nom, "symbole" ); + if(token == CHEVRON_FERMANT) strcpy( valeur, "CHEVRON_FERMANT"); + else if(token == DEBUT_BF) strcpy( valeur, "DEBUT_BF"); + else if(token == DEBUT_BO) strcpy( valeur, "DEBUT_BO"); + else if(token == CHAINE) strcpy( valeur, "CHAINE"); +} + +/* analyse syntaxique */ + +noeud *B(void); +void LB(noeud *pere); +char *BO(void); +char *BF(void); +void LCHAINE(void); + +void erreur(char *msg){ + fprintf(stderr, "Ligne %d : erreur : %s\n", nb_ligne, msg); + exit(1); +} + + + +/* B -> BO LCHAINE LB LCHAINE BF */ +noeud *B(void){ + char *nom_bo; + char *nom_bf; + noeud *n; + if(DEBUG) { printf("\n"); } + if(cc == DEBUT_BO){ + nom_bo = BO(); + n = cree_noeud(nom_bo); + LCHAINE(); + LB(n); + LCHAINE(); + nom_bf = BF(); + if(strcmp(nom_bo, nom_bf)){ + fprintf(stderr, "Ligne %d : arbre mal forme: balise ouvrante : \"%s\" balise fermante : \"%s\"\n", nb_ligne, nom_bo, nom_bf); + exit(1); + } + free(nom_bf); + if(DEBUG) { printf("\n"); } + return n; + } + erreur("B"); + return NULL; +} + +/* LCHAINE -> CHAINE LCHAINE */ +/* | */ + +void LCHAINE(void){ + if(cc == CHAINE){ + cc = yylex(); + LCHAINE(); + return; + } + if((cc == DEBUT_BO) ||(cc == DEBUT_BF)){ + return; + } + erreur("LCHAINE"); +} + +/* LB -> B LB + | */ + +void LB(noeud *pere) +{ + noeud *fils = NULL; + if(cc == DEBUT_BO){ + fils = B(); + ajoute_fils(pere, fils); + LB(pere); + return; + } + if(cc == DEBUT_BF){ + return; + } + erreur("LB"); +} + +/* BO -> DEBUT_BO CHAINE CHEVRON_FERMANT */ +char *BO(void) +{ + char *nom = NULL; + if(DEBUG) { printf("\n"); } + if(cc == DEBUT_BO){ + cc = yylex(); + if(cc == CHAINE){ + nom = strdup(yytext); + cc = yylex(); + if(cc == CHEVRON_FERMANT){ + cc = yylex(); + if(DEBUG) { printf("\n"); } + return nom; + } + } + } + erreur("BO"); + return NULL; +} + +/* BF -> DEBUT_BF CHAINE CHEVRON_FERMANT */ +char *BF(void) +{ + char *nom = NULL; + if(cc == DEBUT_BF){ + cc = yylex(); + if(cc == CHAINE){ + nom = strdup(yytext); + cc = yylex(); + if(cc == CHEVRON_FERMANT){ + cc = yylex(); + return nom; + } + } + } + erreur("BF"); + return NULL; +} + +noeud *analyseur_xml(void) +{ + nb_ligne = 0; + cc = yylex(); + return B(); +} + + diff --git a/eval-partiel/analyseur_xml.h b/eval-partiel/analyseur_xml.h new file mode 100644 index 0000000..1ec5aa1 --- /dev/null +++ b/eval-partiel/analyseur_xml.h @@ -0,0 +1,25 @@ +#ifndef __ANALYSEUR_XML__ +#define __ANALYSEUR_XML__ + +/* structures de donnees et fonctions pour arbre abstrait */ + +typedef struct n noeud; + +struct n{ + char *nom; + struct n *premier_fils; + struct n *dernier_fils; + struct n *suiv; +}; + +FILE *yyin; + + +void affiche_arbre(noeud *racine); +int compare_arbres(noeud *racine1, noeud *racine2, int verbose); +void libere_arbre(noeud *r); + +/* analyseur */ + +noeud *analyseur_xml(void); +#endif diff --git a/eval-partiel/compare_arbres_xml b/eval-partiel/compare_arbres_xml new file mode 100755 index 0000000000000000000000000000000000000000..8849245f6148462fe98f385680309a8a04f4a745 GIT binary patch literal 19568 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 +#include +#include"analyseur_xml.h" + +int main(int argc, char *argv[]) + { + noeud *racine1; + noeud *racine2; + int resultat; + int verbose; + + if((argc != 3) && (argc != 4)){ + fprintf(stderr, "usage: %s fichier_xml fichier_xml [v]\n", argv[0]); + exit(1); + + } + verbose = (argc == 4); + + yyin = fopen(argv[1], "r"); + if(yyin == NULL){ + fprintf(stderr, "impossible d'ouvrir le fichier %s\n", argv[1]); + exit(1); + } + + fprintf(stderr, "analyse du fichier : %s\n", argv[1]); + racine1 = analyseur_xml(); + + + fclose(yyin); + + yyin = fopen(argv[2], "r"); + if(yyin == NULL){ + fprintf(stderr, "impossible d'ouvrir le fichier %s\n", argv[2]); + exit(1); + } + + fprintf(stderr, "analyse du fichier : %s\n", argv[2]); + racine2 = analyseur_xml(); + + fclose(yyin); + + + + /* affiche_arbre(racine1); + printf("\n"); + affiche_arbre(racine2);*/ + + fprintf(stderr, "comparaison des arbres\n"); + resultat = compare_arbres(racine1, racine2, verbose); + libere_arbre(racine1); + libere_arbre(racine2); + + + if(resultat){ + printf("arbres egaux\n"); + return 0; + } + else{ + printf("arbres différents\n"); + return 1; + } + + } diff --git a/eval-partiel/fiche_eval_partiel_2016.pdf b/eval-partiel/fiche_eval_partiel_2016.pdf new file mode 100644 index 0000000000000000000000000000000000000000..ee00776a0a6a23752524cdb2b963abf934432640 GIT binary patch literal 59430 zcma%?V~i$1l&-(FZQHhO+qUg#+qR}{YudKEr)}GI_np1jy~)k)kFBICRXHc8Qg2dk z&Yy=&QB<6ciJlFbY;JLQ6`F;RkGiZK(Xct#!Gb1}_&-I!tIhPG~#IT!pw60Wc$o>}z2dmL5)|zZ~ zCj~3`7+DWi5h-}G_KDuvBtoKzlwHPX6tgHF1KQt9z%t3^KW3~SZqEx_mrD#&rZGrm zsI%Aj%omUzyiLmm=S@=1;22olAZ*YTpb;#`LihlW)S5S-tl1wQ=9^8-?4c zRn|QLvuYmw0|eiQ->)0TMmlxTU*``%^oB9qxj$Wc0=3kfty@z9+ufO4o74QWn6QcF zv@sFb#F}6PGqBgZz z^|?0YgeC-vcJ_fiNh-%y5 z6qJ)(X6I-Q@=B%IyM_ZxjsqCgSfOL+X~EZLJ-7S zj8Lto4n1H&X;_;i#r8EqLfiwE;hFssmod|RLUhmmbVlYo$57*}KfGVulT-*X+ zVⓈB@t?fI3!pB6J)5isk2~r60w{!tNyXEbC*EsLTQTrY~pxPJ7WW6ti3WR=pin( z7$UMSA!MWw?ueW;VsFOp8k+75_OkQQFKlNQSZ_!&S$%qhGB@*;0SAnn+#f~!$tM%H zcbk?CjO_N^H$M+Iuq0^|@PpV8LP8Wa()}ge^dzJb(J0(>Wh9$U(j7a5r+Z;`7L$ku z;#h{JAWUC-*p}x32T7*^S!@+}8ocD$fttx9cUu?%hg+G$jp}CUa+jULZ&iZ~GbyS| zt0NCg16jlZQu=X2e8X&ZHa{YI(oDk;>20x}TSfYp;;7;^(-Wt^grvg2gsi|aAtM37 zQ8Haq$n^Ev-cGESY}*nUQ@_KNSeg|nH4sSI;hMkLa7jx^iDlrNE;vT z*1pkijWNiz<|B$yFgGYF`ACa|3=~YB#)2!oAsZ>*udHc6rk!@Nj~U9j<}Qmwgv9u- zm_&$p0Kf$+-4lz{mMqjzN)X$CSUch47aADXnmg>j8wLL*NrsF7fKhOvl##+VIH16; zvQ(s;g`~=v+}j+qQ{3?6BFC=}QUoPKQUopkW5Q}Wa#(eDZ!A-0F;y5mj!r+{ zF1m)BIdSsa5DqTPszA@#0)@$X$bq=-bsyEA>Hbj=InjL%uJ`&`+SsXMFWB6FPTuUh zq)aUYIvPQ?+iGRYm-6WZf1Ki64j^Z`!kJ@P@dU{lYIP8t^)av%EW`OHbE#uAwMHCe znyJ!}HX==@Sc?xeHF{OSLhLA4a028f5;hQ-ut|Ur<7VSTNr+smRFHB9ia7o-=bCHG zf2tw=@1cP)GF>r=Jgf1fXMF9qV8r>TN-4>)qm=)|Boijd7qx_Cw4`^W>>t3&1|@s= z7f<oeO%=STGk#u%5 z^GS?2e~~F=Ay$Ht37JniMm!$5h^a5YXMaZap+h#Q3^4VIjU<^xIX*sOk^~tkh+Kdq zNz4k4**5esEZJCh)i|3K|)!KlU zUiS}3GZ^$#A?D3Gy{d!?X8nPxd?{5zI6<6S1@gFZTzM+4&O4RgPl04^`K5PhBLa;Y z!Ov#xb`M8}64twJV!vpzS6yH7%pZ=mlNPYYtjL(N%1Ev;YK12YBJDKq9<|*N1eeTC zZuPrc4}E40JWqqz%=uq2<-vV9F3hLufy~@&UN#Wh)b~bSiIldcS>~*&ju+YdVakETj~Ovs7rUZTypiP9Q{V?||SpWHw-E{A%&UY~)ySlt^(3v>K`Aws9Om zh9V||!q9(nJQ#S^w{7SzxnGnP^wQs2{a@th?!Rt)PC?>{&3lx_T$)7JC zKrt_F8@vDG6Tx0^R}4X5NH}MSd21@YK5>a^*<1n1%3UEFV^-(D%MMCd?SWTrO}rsD z1irWpJQ*qge0&SqCNUmDQkkY3qS{$>alh-05RxTEmhrgJFL6 z;8)xM%SrJ3wA)8SCJW+XJdb=SiAzh=9t(;nV4V?R8 z*kPY94k&UB9B?eWu*kr55oC_G>F8QzCA+^s0{OG_g2_v6hR27-x)euXSy@@4IdR(q zyeDqDr`2}T4^porku#KKZaV<}BFvKhWk+|&>k|U=+?f1-a0{;g*5NS`GI4Tp{#U=p zOvuE<#?1a-$A9MXUt2;ZW)4R7|79l_`wXUaXGd`{C5+rz^HW?K*i+iH`} zGQm(NNJrQa@)~m@Lh+OD@1U44(=2L{S!@e01e(g zXxm8WfvGeN1+Dn(2ynauw7rJ5gNAT%0d3~w2>+0Aw?l)N3jId33BZOBT!Vsk7qLii za(;FS?P_ofKYF_%2^f#U>LVj1?R!3P4oD$cMKcBq0$von{$nViDNd6BA~-q@4eb8% zmWL=?_~-h1WY-yUWTyfaXbuYWl}KpMO}7`NX)btG^G zFxL{=_BC2?V0v&3<_rd62o4c}hItOIvk%k)-U)2D2E;9034pU;d=xNU`axU;__IOu z4fj8JwDqe0AVC6uxiF1QOpMQCfj$Ka?f`5F;SB@Ax~RiDTX}E*pe^6Qkj{=SK{XIw zL4@#xGMIa_HNk*;Wo-ar^+4~rOOtabXJ@BVn-K1IInt{Hre^k0{xY+CT%2KfC(b*; zM{;OeP>rGQ3(&V)+p{7CL-~$>A{?l--Gcz?KxqE#M z1b_R{df<=5je*gJZF~e@584|jIR6s~&k}6+9c*-R1APaM=`wIQ3by-s@bHpMC2O=S zuLzOnf9j9Vq&O`oq9c_2RG0MQE-l031@gK2<_Wmm^w9;-)8i8b00<}ucl{4Ow*r6E zf6CNQK;LXUa(+ZrgVs5LLcUc%tG$2dh8`Hq7{A!qrviSa^RGb{STOq@<3Hs%-#BXw z4Rn9!AX_ z4Jv_N1wiPo4h_HjeWkAnS3@L)b~rz`#3QnKhj46bpqyG8zv3gly`k%O;Snh{7slc4 zM?*mjPxcQ#1^8E|wAKdc(KuGMzRrLL#n1g!CWLBos(&*0?D_owV@qgdKI zeep2t#mj~_0xfU=XTjV}BN;&bJ}`h?zV_5Vhq4y{pnM2F6Oe=iqnGe z{us?Y5D4rL_)#FN_}7GAVc#=QLISuyVFsLezCqdz+Y5ez>Nn;6Mf5Q-+)I8Y;be|K zxD>L+fq>D1cPGkMgpX|HGcXewT;3Yq>| zlw9{&{GyyHb^I08J47QfWiU7|rNS{fX z!1KI)RWkFykbw610tF_|wCw8%pCqfh`)A67ZRsubBe1@}a`a z)0rC5J`pOK zv4Uz$kdIt!l>v!eXIt6Pg*I~3dv_h4sDebHkOxfI6?e`Cg zXC)?ax-gEqUC=8<&)Ig-51&RnG|b;o>E~TE>ki_4m=hfe9pSF{m$Wlw+^TI2y2WX! zO%47bwP!cAR&@WA@RMmhmW|O;0$7=#uqkV-z`mn<-?i1@Pp;0U^B#2uYGg-+>XR1q zY-kTKn1?HBS2Ua~k8&naL{@j{NJk2ICHc{kSxi9oW3VB|9vh79s=RR}E5Qg%pMM0D z&HbK*n%zV@eDC0;()R3$avZA!{MN*-A~g_{@@IcVva;uy-EHSm*+8x0mnp{>AEQj3 znBR#SqPo;`6TVf9NQyKG;no!;WaWD^{D6F*j*nRgxtteAV_86RGJSaS{>fA>!|FDdhlq(>TEjt z>lr?6X}Xqen<3;;AnD00cC|{mlV-sJ7F|s__o9k19wrO>9>k5W7RG{o9u>(W~I0QvF&w{j(ef^o~>!svrrh^^pU55nMcI@e#MMiH9% zT2xdvBeawTJ%YcUCEIKPYztJMJiTL_xqh@O+MdA1Vyx-*FO)8IBi&|96DQgg*#7jN zk*-zG54&61VxyY7>&a^P-(6W?+IQNhK(Vn2?QO?GYJkemlcXwWr{d6D)}WLy))YI{ z?P7LnA%j~OK2>$Iza+&v%-+1rvPw?u!+p|CjY6J$ca?&?pQ(c8qC`omp}OwE4~)w< zEH?=P&O6OyoaTb=_M=VhySh~>(tdi6kvOS%@wJjZ@i-`(bF4ugn=*o>E})av`m*Mz z68Ei&q~tr$zIUiisTa%~rspqG5sJN1B1Xu>4C`bK$Jr=!noNguV%A3_`H?@dR+Pz+ zpK8}7_iDOY5+t?b12Gjw{6tnV=aU^1Q{e>gv~ny(r~`FW7i+^*x#6I-%2}#9*B9XE zG0xzoz%~%L^bQP@MRz(i3+?>zP$0oK00+xeNQk+ObYSC$hL#a6|02k{(+?nSa)Z8)w))zelw4yus+AH@DLi7LqAO4R4In)VbBre8*m72-Q}wRD>lF$&UTh_hN!_+|Ji(|AUWCp-Mnq2|oS|{O zK6NV1k@lw*r38pENB5pzkOSVizAb^^tskqGmNosugf3*ox$mSB8^y}?(^w`t3mbYS z=~E-bs&SWGSn>$c-9a{$23K{`t^SQta)n+E3yt^7f9p`A6xjUbQHrWSWh(12yDXEV zE1e}+35+%D74ZA&i?M$muNT@A-9B%SH#{n!*qH9R_qWd_$iQf3vhVC64H~o2RCm7T zD4Wp)W^>)6x-Rn z{Q78jU`e27AH$6&8%Uup+XlVQ4m(x%f=yz(WKKFRhgGZqTWvlOd#^v;958{<6%#^z zeCrmBy(PVPjAKLkUD(zmu8nG5+0>bH4zW&;rNJto1scYy%C!of;F>DutKntaXn-`C0ICMw5!LDhomK_6H%p8H-$LB`*l-=JG87sW^ zTYprxS*E(NM8#5E3j@+lzD|*Zqss!t=Sd0>vg9E5^XS9{HaLZ689>mr`_Ro&-jv=9 z`P7xuDkU=<{}#TAsoNH4o897Bg~Ih}I8V9oCIQVw8iN-@Qt>AAw8p&M`x!NZ6`9tn zLWZuBs=eT7y0n7)Aycaqvb5;d=W>h00up&16cr23G2?7@JAxe``-F+YQp-33H$wyFbr*95rVO>COCLchW7v_A4ENra&b3=?LB7%P-j> zGPQD}lXM?P&&<@ssMvYd=|226_XQbT>70YfT9lSf(_kr)kYcow{e=CVrH>dYM!~UY zT)yp~=s2G#tBb4}?hM3ZL1qUr**!_N_&(Lt&ai{#=47y2#JHt%Uv*!rZOY55F25gz zk-#M9OiM9WDgAg==0xbV?d>g$p;iq!I14Jjo+!s@iB#MjG>ZT6MqSjigh^(F7aAzE z1gQElD z8sp~|>PxH~UO^SCmo`@WhV2YMku#ghpcKuL;PIhWC|Y{yU*~~$ws4W(%dlNr3B192 z_6_EE+$&C1b!0D!W-a|2Xl&{dsU!8r-#|F*>tuuqyJg$di62#}fx!8K9-*rdC?B=# zgBz#0Y?jm|jjkXiq^=O(nFdiVy`z7k6?ODaZECM^OAUZk`m36E9;^1Cga$}3{^TC6 z%%OGK8dA`?&)C;K!i$6!c$_l7JDG?s#*fbP?_nuDZKXu_oG4%%SjWB{zC%ZXX8PDJE zcn@J^L^HE<-e!QzPVodz*-*WhC^_ka@sc<;$4C$)VSVrw@k7{^sBA~onqB6AJ+j1D z^7FBrM3?fM8ieX4(D)LEgLNU@{C( zaaWoTnWw4D3>@onvHsi>-g#OU5AliFM+BWmR|(C})?_~gigE0mbJpN^Ih?HosI`j2DA7V77W~IkvF4{u@8IdKSh^Xu^;&DZqMbx@=ASKp?!V#RW_Z{R^sB@+@p0)K(M?!N-K~ z?VsW}$uZRsn3As6)ptb|YXV+AfXK3Leka@>TV8c+B^Onln3W!j;o_yehV!aUwr*S0 zWFN287>KL(vOOIezov+#kcawpzs`iSRM0^^HgPQ`aluhG;a>~m<@7@9uDaH2l~oAu z+WAi9%C_11IuyN)SKOW2m94W@VUg%yKQr}m-IfLBT@9?xjUzHzGanc(+PA7x7@nU= zzU4BE6zhmS+77BezUSaUY2QiPw2B2C6uqUrb>fawf8y@*;Mj>%L1_^_`qFph2wmOqKMJd~nsT^SfKM)2J`# zmr>i4e=Qnxe)IZpaiQ(2+bCGf^+HJVF4YmpiSVzDUBP$c|I| zqsGHlo)e2)N+RCy2Usl?-&kzR=90SqcMQ&xW759D>>733`~YfccV3B=^oQgk*)}zb zSl%V`jEs}+n#WtDHT<(r%4#WuHo7gdrqv3VM779AO940hnPMipHVz6R-0fo$@%NI%JOjzg)@U^AI7a0ulKw=X5pa^` zj%y|t#6cXJ>b~WC(8*~&wBXD}k#63d2$t8XpbVp@%ZMNvcCtRuSInS49|J;Ndq%Cs zTh%n6A79G_Xf6bMBkcvO=C5q*7?OKg5Yh621%huxxz@%-6OI-V%M z5*d!JQ##i5U_-2fwisj5k9j-UFp&FGaD>3PRhK2is#zOsJhR zDq?1&HZt(YfgQjw(Y612?5u;d zr($0gVbVl(A<~LTl&IX+eL{%pJCGWyx^ugZf6%2gBI%i3p+Xm+Fg8YpbK@%eF*`dY zep(CRib+$VJUnH|H#JM){SI%=MUYKTDf|U-VAi5F=Lb4hhMTE(3eg&leOPZ z--c9cxKXp>=3IYF9fd-*vG+1qSj>PaCmi6C7hqZIZ-f$}#s;7gf`0e8RNwOb-LCL)hT%&^z&ZNRMsi&vYLIzlC0WA2daf~0G z8fs{}6A{t>a^p&K2edEaxcx&3=hV|QzV<7!o3Y$!p+&9XeU8qJ$@;Fp+_JMP1!VrQ zVk4zkFr_qbEX@n`c3NOzL^H8`(TFPO#NxL8?wn`G?~5wP+ zLEf)ywYjJ=Gqkqb+_@cJh%;2nWRnWmHoJqEV7wJLY{V<0jp>&1WBC<4=Cfu(dH4l7 zeWDKq_FWLGk~6C#Hh{N!x;4U@x&>1?R(wFi%M@=*Gcr;hD5NO$Ui*z^fQkDiG8voA z&P_35)B~L_n}Fq!U&wk7Y*G?K;rvx@x;ELLCf3h}MgjV%56WVE4*g1>Z^JU559wHt z6BbvYSIAe*iQukCAA=4{K2=z+T%AZU290$aega~9TB4bGsX(B}gBVsppc6WEo!ysU zvta!d)Gp7sPZ0`L5BpAj7%V(8Qw$A|yrS>!1pT_fSJf{tEcrRzY3{AH3Hl`?s z?eLOW14aV#EaYv8cB7J!+Y+LI1I8+CZcvNzOe`Kmwr;!+#BaD}vCTlq*v|?MK-U_vPCJwk!Aj|K7jPqorbq zXMWpvdByy6_xaauM6e=EmHFw)2=rO^WG<;>(wwGkuXnb^KLf5*rHrI`S=)^9L~3*+ z}#=J*_Znss+V z+VmH9VsHVA4N=A}e%7E-0ug%Kek>!6dB@)Gzi;lSg-zr+rc=%%yt*5@u-CJ)Ucf+@ zKS(9jbMg1x4c%R0`T}V^TbjktPdrxA8=BV%6;<961J!WS2O>|TA1AV!pYpp`s{$pf zasqdQQfPSw!Zo$Sq*Te{j_D^Le=`QBTM3#KC3d}Fc0}=)_7cI**ZK(wZ_p+4B~Ox zBKxEpZyeMxJ;zFe($__{SRG}#pCk=N)^h=^_@vTNo_a@ZR^oYe(`gisxBxww%~%<% zj%Lcak@ysRC zDoa~9u6iuXg125l?piZAC$iJI$V+y%@YJyA|Z1;c(}OKj{z`+`=4#b0?+5ov9B2z16fkUAk1M(>Ewlo^rfX_EY7=)DTVnx znIx{}e83B+J*`akQm3d-9%nf}^tnx$;_WL_y@?jA9O71|qLyVZDf+k>d^`?2SksV6 zzAgv;hD2qyhJeyJ;6=*R*!%l?C&K&2orI%`LNC%&)(bVwpq(z?|4+M#Fi5kj8n06! zHns^|rM3QPVYKAok&3lp{o)y-eZ}0}&{|+`!BTM!VJU+h#2$Jgx$Rh^zm`%zrn7T3)GMRU z>cBZpK=RDyxau3`5S72*$2eZ}aJ?^k3JJzIKq^{LeLcn>mYgAD6?SlrdT_R}e@&w3 zN6!?!$S&>h8SdE)e7T5w;?pI1OPTn&k9^vIv;?rdAL#R)X^rqOL~q8^j4nh~X?OO* z)iml}?pkFG;C8GrWQy}3?4o53(YSY=g`uvgQDOHGr7@#=a6#l)svN*zEUr_Zjam^t zt3CxR3z#a+&mH}FsoAHp*F1lfzo%M}{+QfvD7$pIE06q40fqbPj;C7dah{DX#~n3| zIF(#&ztt+7^hL<@I4B#j)HK{>N^Ludjn5tVj-c7pD6&dL8%VzH6k>@mGN_`U?G&B6O0s2}rvt2|xkm{A zFVbp2EODAFpsE=2QdR#sk^gNb0O@3sY8Iq}!&?!$UUj+4<4p4YZXV8uQR}Rn*4xa5 zu?6oW^z=Ory})+P;|WufikA+0x)D%2gB*2cLlz&=@XDh4UZ(Rgv8c89hv#xd3&o>@ z9pua>$)x4?34CsOskA=&pwT%m&r;(n-Ib+dbA0#_VTkiEfvepjxYN7|@XmC@(?G^t z9$_r^%Gz&bW^73T_do{gLCYd=>OM?PNO6>-4H@Zfx@ammWOX36G>bfmWM0TfWfnTF zVXBWBPC+&-B@g&>XIwirPtKqNT!D~WfAp3(A30az;&v?miK_$7m-zTqZWz1fPo?3k z`a>EK9P+aL(%E`o$@hV?ZO2mTD~HF5$pPFuv~Gsa`RDF&_?(R%6DxZ=>$3(@wLl2` zI`2GrJuL)lEq~eI=XLWLuBUvsPlfJQ%p~+1Z}fB?Ak0x;q&okvMubBjs7%teqAX*v zl27StR>PxK$C3wiwyZB;Ss4!eJ%UH^tphEV-$(@Z;&dTC!7@w%-Yk?bJ{9G)0KVn zy%je6In)KH1yA3r+d0+O>)Gxl<HwcRt1XyFt&a1`IfBWbTLs+g^=q z2=kBqo~6EtcP(}TT#c50>Amvbg3ttnu!eOwc82a;}%>#N5Wb&s4 z62pn;LNlp}7vtW`i2hX5D7qDk!%OyG2Lay}poDA-*!JIESo<)G z_?zyXlFjqtkpmMxeU)_Q^BMhvr3LMRjmSrkpic5SE8k^j*#kHg~Ot_sI_%;p~_5cy~Ql8gu0l@6GBWHM=awO zjIm7IXW#=#yBTd(Dp3b*eAs#fG}e}hfFCv8m+E`2oS#0hC*K}gQhIzF8>ALOV%BDj zku5h#e7BK|PaeqnHDa%2slr%}f>D1r68iTtl#PLYK1+lqkCj>6(FtuS5F7L=p0!^@ z93s_VLDp`UOhko?A7T3pj?Ey^wu}M6mbT9`Wp^CB9U%9dHqvds(hhv>;q=SWT)dnf z49Es9VtQSCJ^Udzx{j2S0+U@~Fy*RnaBf~{9OPMoVikDAZDf}^INbH`c*t_zH&yD`MW2#$O`}C^VnW|igHtkAA+=dk>&nerw``l_q6 zbPw#yN6;dE^=7hgI+h-C&7!q&f5TBMJNT!5Qed(2s_*Gp#VR#4jchdm>!!h*cmZ<} zU)k3V!4;SElaFLM8%vo&Mu}QPmFG?gj`N*bxZzkMW204eG0IYqutEN(<5F_=qT9ptatHbqa4wxo7%8)r$oRWh$}TNg;a4Wj zbxVHVnY^sHiX063T}cYQ@|!wQfjKrvchX(3>~ospTi~bic^h_DF7z~F{Z_KY2cO~ z)y`^ord$H=qaWMl)}8U)Wq~IY>FMApa37=0HS{JT2k5-*HCLl%pUwFtj1ye%kA6RU z)T{-%*Ep07)|BX)&5s@RkQJQ}g=LfFr@#f+tNLy)0Fy#E zmi(Ua&lom$+u*dyj2~wy>U$|1Y$#f7-L8I;nnTv@)cMdFB^xsPpq`~iv^A?N;XrvYXLujXMCX@ip=fVnX^-cK@0m|*N?9l z0V8^fy+`t{8vw1$R}-_-%NAJwcVAgp@^EqBMapYwoQjsvetGLdwRGjYSK}mrae~;O0i7vhf$4|l z!KCbb8Qz?a?t9pv?L2f|cG1tCIRl62a|?jBc~a~hV-4jC*$Tk#75Ep=3auLFXK+`} z;7xgk+LJ`yvZUV1bmOg(U@Yd)KdZjqrHrZhh7j>CiSvb^G_42!EnE)fG`h4;=zg`? zh*^G$YU0t@8U7pRYt7j9-W^nBerM|XmxeZ4Ic>$Ee6_g6WL1VUvup_c>M0hRvM`*I zFr%-$hA-wK{xxZdPrw#xs>UD5%)o{H+=AD5n5O!&SKS1$nherw=O!B0qsY(tud1cb z@*o^zWncG5} zGrENhab;c%g-p&x(M-zJSd@cFN6S1lv)wt4(srYh2V6+N1Gj$%q}!%gR}<&4oZcDwtD>Tu&(IMC z8DLeXnF-KtsQYa!GZUB4yP1=UQ9<1IqVL8}DJNa|*p0Pk3xD6DcC+2Fuy0q#HcL>= zEb=zS&YJkv(`TU8yje5Oc6!+fbuV>AK7FLyHq?{rQ{~C5iDSxiDu_0#+0E)LXLWGCnQd(9 zbeN$uLhhxXEI_;a%(%pjNQik6p29$&F{OctJW1>_^(%;vBIemEIjIy3dwy%VShzeF zY&skujkJGVbf@uVEd7Hk?YXrwaUs;W!O@V&B_Q>>XA=1SEQ%nq7cxmh&0!01Lr70s ziL9jK#j_>B0RurVRN`?$6z!Mq@q&N_3VZRZ9ETy@yHy;^x{}OP^d9_Z5>qiG{~D^y zgw_~rKj(t7`XMRjpz+srOwGs9mYV>7Lci~K*8#9%huYUJ+mxITOQ;XigP69`%tTKt z+xF!1-h;!DEka6zIrHCpUX>ED+(Yj7C$R$&QK6BOY%kdKchV(eadgP;>is76_y#y7 zIJ&&Tk6IOD;agZNphhU84BX9`3in0mjUlNpn;3j|zLbhgn6lhDX2TN9QH#j+YrQ}; zI2AUOK*W{oIRGz1QT%+1 zlSIPoLvYA7bFPLIp2GB?f*-Z$Y4!uJ zO}R@MPhmGX&Z(ot!~$LI5gN;Jv{ty%`{7VJ^$w{rN7AhD?Zb-yDe`b6!Rd z`SpI#3PAHnlK#t-j9^`l%)4XGZgREfKR#kj9}#y)n>1cnzkxO4H{e@A^UQgKZj0qY zTU^Bzgl#!=D-2d?lbVU(N#^i7f3w zvh83Gpw0l7KeN4ZGYJCjxp@aXiLuk|JtJB{%5%5A3S5V?Vkj{Xxf}CLJU2CAMWpg9 zo_HkdUaGb4saPcp@^O4ccdF1?KZXQOA?PDcR`Vpafu>N11gUxm!ZUEVm9EawlPVRI zEap(bV0Y0h;%eXCf`msD|4VPsF^}idJ`WyYoOVD!9psKu@G`{6JhL{}=UZjw%g@t^ zeW$`|{#}HBy!+d6L*|@jVR<1+T zgSRsJP{Ydtd>jfAiNr768Gvse-K|M1B`V-`>U@XD#_sWuvHZ-JJ*4nmWWf}5SWX|3 zk+dL|o#&|>UFf`*_OS#?Sya@;a9;!X+S*cgdxqF8O2Hyf7g$&_Fgi5Di#r5Zy~u|5 z*$yv)t)J-cwdsIt);78C?oD@f3 z&Ds0YXf#h*KAY|_Hu;nq>spw^6GN6ZHb~;eTLVec@Il!)i+2C2&<+#x9QA4N z;tWj(H8>hTeC@dXk9NXo@yT8o>6U{%sKIQLaK7M$g+FSvt{o<=&N?-#v|xW4WksV0 zMxnn~u8IYpJ|oOAc{NmkU9BSFBxVXo7y<4!$Dv69&85h>d<3$umY}@eJ{he$Oy{4_ za|0*7f1@z2M6tUtZnDMXc1sJy{A@8^?G zQ1*Ib{<|Q2dlrz$qL5hibt-ob4_6!#rpdm?`VgqcZ|2mha{Sq|uGJtl1p8HMMjzip zI=;)sJ}ttHL2SHfF&DtDujJoqTG^f`RKV^ey7k$7Wpcm47w1Zph##NX<$eD#1Wm_c+`;Jf!Pj^+`Aa!}U!bW)1ds9f=M$J5O(lh-0edmr1 z{LVM2Wx`3DU*Ni*)P2HgoZZoL7KtJ)%FBvl=F{;j*BU1%kn#j}jxGQ`Zp9WCSC_K6S=$hUXU@PJRU0oMnPnA-__Yo|MUjv> z*(A3q?sbm^{DEKv#Q|mi_<~7-Q6S`JLJGz?SYSnVmj>`P0S(ZsH6T{J0K5jT=0?C~Km9TQE`eoi9L^NzRSq-X*c{d^vKl!%IvfV357zjOXKrd{ZSSos zGaGAlX6ln`H-2Us(1?5vXtD_MpLYT04lJObv7IsO+(BLQFZ24{2sf|K; zww1@a3I*ze-%0V2$6*8GFNxsF(0L?bEmUYB5jG9kcDlK>MC z9vmF35P$=41`Xg1SibCCu<;TW^5^98&(6bo{Uw5z516z-CN!ugJAH!~-dLN019fzA z27CMUvvIcr8Jdh@2n5~%m=aPqgq#pq%bO;g6u5gh;tAvffaA`tAAmZ3et&+=o@(i% z!z1#{`VaiH8MuR?xv8<)9SdOnTqUQt-U2+EdXB;Co$nlhL0{j1e0XsIJ3lk`96vvf zKZBL#;NMjoasJ5Eg0y%5V1H%L-&_8cZC@qOVZH2ONVhv^s<^*PV1XGwi+n`>p?SLx z7$-kX-#?u9KNKH3THg*6KRaQjdRLdZ@xucya4yeol=2BK!Dz{!_X*%p~g4F z9muNMx6o{2r9X)uJfL%3AOfbZ_733}oZ-qR4ixVR>jwni3G2_l1@t@C^S7@cMCVEW z=jgpR|0ViQP!7O-P9P!r18ZF;gG=X!=CHkOsdtw}=eBp(1*+4(|K$DoM{wrE`iJ_v zYvK~#U*!5^^(6h<;M(Hv+`s5R+)vPKH`f;o|I6Md!x)UA$6NTTiynqYxPN<|#qm4C z?^(b2e|bH;KLI~vu=!QV3lG6>qv!lp#{#eMD_EfS03aoFbG!gyBK9XDJOOJm$t^99 z5z$gh57z}Ot!|7QZoM0(1Z7N{#^B`~ds5{veiJ%}aYo%}24&t~1TE~up{-;Utv`=m zj8bzMt5y=3KjOD$pI?chA_7?VH0pGBdU+BO1i6Abuj;GxV(UH<8h)@X!kYxwzRvh? zUuZHUMom2DoornWiUic;S|-g!a3C^eRxnd8<`LzHdYa?<%zHUrhX04Lb7&Gq3z~G> zwr$(CZQHhO+x@m}+qP}n_IEcE6B9FwiQ1g{1r?|2$xJ!@J(+{!SbjwcGKQjeys>V& z*H!(qsGjTxt%}7%r(3d8!c}sj;J#7J%>1XcZFyCaoF_VJJ!dS*Y{GM#oqGAx<}LI4 zO~r-x0~ZHF8F6m9aRHfOxcIVrI5<|^57Zk{GkYn%?2!w2tplJ9DrJwx_#Cb z2!o8tgcdh28!gkdE^xeR3q?3uZx||>JZdjlv36V=#*KqqUBD)sUYDCVF70(>?4i$TRBW62_>?;g2)27iP>p;-<{$xE(0T#KIf3h4ArK+-MhF) z;=(@%=sKaUL&?HZVLpGhS8o%~;`a3}v-bN~MRlMKd+eaaDvkr}D8z<7j6o=RSAL&f zoF5lYE0y6%!f7?b63WQPQls>ks=O+!Iu|ZggehSwn)&tUH|hFkS#0E>Id{#J`~>p5 zU5S1p4}pxT{`Hdw+jJ?_o^3x8%g`K#I+Ht2{Bq!8RqxGZ* z1*hkCcJWrqtANXcIZ(@$WZbjVcUxazruH>D*4}M$5Yub6X&Jf*Lw-D@q-Z%mB6CgZ zRVL5*eS1+wM~5$Lp<1(A#$rgjar_2^BLVt6TDi%T>T%euRRpTKMmfoAkryUuvPfPs zW*33Iz>)>~NeAo}yqFo_mOfK?Bg;z{5RL5zpU+>Vm`i>==46r0>UTwBsQWt^>ifbp zEJu3<>9b+k`GxaG6kPar6WzvqIBgn?NjwrG*&^uJ63tYsPv0I?ic0*3-8(vlQ5f#D z0tpjCZUAzIaB;uI5&Me4Wb4Y!T|9oDtLnz~+g1kR{dK2Xfm4CGue`nJrlE+w?aAx% zjAYVLE%dSCg;BjvwDE7%LWE3_lq=U|aMquUM7 zlMcarCd02(-7-u!<9dnWAahF?ME|UPEFLwZ#s0n8PJz-@F7EGfH(OVVs0kLef#|to)F& zbt}~H^^z2R#or!D{>B*9+>a>HuRSWePCvZIu-i5{P1T`>RtB6?Q0+{}q@P1GI@NVb z@7B@3n~=)AC5c<~`2)qN)uG-R!=!G=e%X^e$Z45B5@8TH(^j+kPDPWK&Fi}_^-gX# zUnx8lm@Z>l4Ak>mXID)V4h`l8D?=?%EH%VZ5zExIAX6n!B(Mrvj@?#e_?57$uQ84zZ>f)52)zzAnQ`Uak}hU zE)ky^27`mh|HC)8iOn>n_N%pILh2GGG&Q%0;W+GiPh3$H=(aV2eQu7T(Odhi0-@~N zAfMFboTP+|Ag?bCo2$>IwwcY2Ye530SRX~U$qp>l2@lc!Q0Mk(`R!|FcVl@V(!w=nYt62Q z$I%hC+KZ|lCc@ekcagOim1t1;l&sq^)zeA@{Z6_ZXr&ml-e|*q9l#^CIQbHhR@~$0 zd9yjwl}X3?6_-~0SF_66GphOw5II94^KXcTJktquSp7mBhk05vDgUyL>=kiI`(eMQ zqPt=p*9YU9@HTCIR7w;j20^mfoj8~!)qcjz>f|Aj6zRK$0|I3^Ig&n9JrrTduk!;U z@196@iqYWtg)#%xE`mZBSSusLsY}qq$XC!LW8H^7VqMVd%rX^r`#u)A<;O z2&7ZIv?2zQe;d@opl9p_;%%Xf<#z1*n9i8ZT$BC7w;a>vF9mmKMt0IpujbK3Mn1_A z_|NR(=_*(5`YAfNvtLT}%26~jFlIUoPVqTNQI{Du{#$Qy9vpg74pwFTnC35HnymE6XSl!CHgLyBXy($-5?W{LLoZ3hIcw89 z_bIR*$~axcPTv|&VX(4WDnvQ&8$8qqZN-d4@AJjzFxJtgYY;4|o+c%si~)5;xKPvz zo*CoVP__lvI+M z^)Z8kcKi;<$DtXDs>YDqeUln?aI+1oMzKiN>kP2Gk>gtG=5;(T%>xAQr3}6;79EAJ zyG6qg!Vqct=K#Uj5KB>mqQIxl3=au+6v{IX!B64nk!T^Jvx4I>Iu~_k9;KY-2Kdyk zk~1Fk79_b6hDn~sE4MZ6h4&#US36yRy8@EfWnOoO;Ly#( zv}whX575M?AMud6ib~QMdNpeZHh1XYI9OwwE4ucxMfwf%Gaz($2};XYNj@J4eceAb z3Cfa?Ktryi_kLq`x(3mL+3Bdj+0pQG~=#>${x%Xl6`jT0b)f6X_PU?Y8 z*Qx8xvC{NE2z>( z3pmc4D(f3T+4&wlw_{86Vr;X?3M^m9ah4?~22Mevd_fEo4QBiVhLg3Vuq6zPsn1z) z)eAfoo(4B=VJ#AF5C+N%Q{+19KVxXI*5R4vp|TDe@oW=J;CgeDAPgcHH6Uc4GTaC_ zYFiIK4}E52C)^nfGB@oWoo>J?03lssJq1IC6nuNM5$tm1B()XC~U zc_|>Ri>KPki}mm5AlJ@x=p#)~`x&!2*C#eoCQn_$-2PkxIL&T=Y|Y|ANkaGtuNF~_NaYhL_7V~aSd0)m6WyEAo?eoR}T<^9gyUn6c&3^|rxX(8#bJCQTrFfsT6V zTOxaFh0!69BKU?gTmB=TV-D;KOu?JYw;(9Q&^MO&gyANh*0!r~9T5)ufTZb*&=h8>SBmo62w`vcPg2Web zKmHt5jP5bGwYFLAU9Dd~zXc^jwxCh#dSvA)#BcknZ)g*SjGpw#74Ps7quEcva1ucR z7USz@a=ke!t3E3rv;^p-=vrEx^-#b?dwkNR8nPMqH6+ABVwHGw!Z0Rzfy*7Nyg^0+ zs?L244%U7!R>5O-15V|tNteKv&18eAu5w`RC8`V4*_?4WdX#9-{<(AmCcJskwfEK= zBKfD78j+P^KR(n5x%SxKd~?K#N4K+p&an(ksE~`Zr$Z#vAaogjE(hm2h4En1#1y&^j-i@e^C?C%^DBagm zeX*t20ez}fl$Oc2V0X_fDajZqRiUseRFQNhR;w-yhFdJGchm zFr;IwPCz2wg0v}rsL)FC@K64m@+%95lafqhNf!_3CAId5L$H&-^RauEt;q);M& zK}+V8EKL@eS{@154c3sH0Tz&>_NK^7adf*YQ3;@)9^PsCvzg8M#JDsGw-~P^k<9I5S7-iMS|cFI(rO zn;fe5hlyn@i`@kUh5d>KQw?h9z2B%f7T~QaJr;DCsr7wKXG5nt^9_aZ?3n1bZmAR4 z1xi|e;Lu1bbTA4jt?*N%bKE$K)P6$$?$+aS?DlFoOhNrevD%LxF2#4AhPm+>oG`ce z!>~WYJDxcrugEQug(x!u*p8ks16Qx5=k5*S=v0q9D4Jo6Y_o=4DL783kvaNFAB&kUsET9u7{ z^*_AL*j*U|!rrlR!{sLv+Exn#d??f+zE=vVBLmNaUh32R6^F!??r$Z-B~?)+yyRbu z)&rWfdVTRWApR_+cz3LniZ#E9+q zD2KXL&wL5E9p=G%-h$;&A{jnof*q~49w!poi|Cr~M7saj8gwLG-aRq8_k1PQ4^gQS zj*+OO8k{xu^)*c_KX=hr`EH?s2K6#w*%biz5|Xpr0cx_tuDO z8g3GsL^fy#k#MsoA@(c^AO0xuj2QMcdtSm6{ma9Jn^Z<3g}vAr&}B2RxnC1Hf?~|5 zvrW)!lN9MwkB%M=R$o&RR|W$RlU;a-oCrH;OA!Moyk6_dT}84JiyMe8+6-nK-0#ry z`%t3`rq{(@S@4pa5{;?+Bcuik!&RE&l-@l`w}&O6rwj;ZzOBG$$t4nKUx5j8*3pqE z`;rbh8Rd2C?aqRE&Mcp0_03(A>IM8MvLF&-NqRuf1w)d!=nu?L3bWEmV!k--M6?SC z&?;=>I(UiwGOsNQHncZ_tZPz&nK^%Z#p2mJs=%wn9FNA z3>+@Be+Xs3H4;qMCJgaA$ywT7X2Kc&ee4U=(V}6!+&ml?y=qZBLOYzwYmQHKCLQwO z&$$z2@;f^4tqo#HdEtN6B7aygBgo{U3c&mTje5sFOi&)-7td5fR=?RPLsYwQsTQ%J^`#z2If=Z1wUX4G^ z{1hZmW+qRkx7Zr9vGwe4*19OGw{PJFSc?YH%a5uLbx!-G)@1SZew%*|a&l9u2^Ao z$vZ%7FksbO6sB2je5(QG6<}kf;sUKuYy6uIZy!1-ZH_Pu%e%noO_88Ssh>xx&bwL6 zDvNIb7SXy#()OWpWk1SehOa~qOEKg+M!K~<EQTlX zD#AW}#066bJOBaV5fBz6j3>9GE8+OMWv7)}WS!G&(>-;gH=hSmtnd&bzDL*yx6-7E zq+P;qRqGvpCixn|)a%Gq`dOgs}!Yms5)HW;8s zOP^I$f{G<4TKVo2HINU)(LWUSb9y$APcnVRMu+arj_~}YQZOlLGBUe%oW;6f{80(X zU$c*=-GkduXmKaj##K$KOX1fSC=(|j&x#;ZMoOyrPS&uvCgr-v(OA~m7~4{BR|t~2 zTj3eWVVZ49ZP?Mz>2@S3N=43se-S&r*kc_LW^t_n$cC+rAd3^5@C0Bxn)XJuRck`O zS`fsJfB(bIQYB6I!NX`{z!|8>k0i@1I>qy)ew&E>Y1ihz9Iw~TLXFYUoqw4%)k6nt z0<$tBrh`KcT{3bNA;Wx;#dbJPJFP)eLaC}o=0Sa$cJFW^(;RW#9H|ptDN!&lFq*|E z7JE~Y_dRb&F<)n&8@N`X6ANuKLVUYt5^;9Olstg^>>okADQ`Z^3d~&7^^3JR!B!MM ztx-AF+4PyPeRl_|oRwj2r67;4f=AE#khyH`wxz>6K`c%BPV%@mDSWNw*DF^DlcD*@ zSqY;^PB9#}Kjn<{oMa;|#jv;=#7X|*>H{KqDQ?s!zG_x0&SkD-^>%@h(b8N+;;i3>N1`ngV}gkd zj3RvfXfG6#Hq0>f>p%v9FRv$}5tO}UBL!O$tJZM_Dx069^3%)92R~Zc#vGjE53Puw zzPnJrDK0vTJB1D$Jne}-N8ik*b}uvJiV4i(bTvI2`V%SJ))UV8@Yu_eeYe?>h*N}) zghHPRTKe&oqpeol53D&ISj&1nm^`|MMD2XszFUMf%oWwz+W0YcmIx7M0XTR48u$Nc z+fVX)IqCCm(0b@Lp_kzubjF8j&>10_Vyd}PoLI9)MS^L;m?}{v1X=TlP^F+tl0{5S zZL1HTeI2OIG6wn>1@-EB>}eOHG4tJ!?W&7O;~$NR8@LqpO_nOq=lS&A{*wIlbO6aI zgmOj+aUWAmGF($+X+2UU(cGd-eZ0qO=-vn)i$H6B(4h5x(+JPw$L!!h0jfkGH9k-_;fhyDnV?T*Foo2Z+|n z6rL6_IX=q#BzEgK9EGv*;ue=6d~hGH{*$rZ05hfJrwG1*9^yd_C1}HTYJ(OaU%?^CFcyAid4QDnJ2dZ(Y$GI>rlRS~yG8}A++*$wc3cM6rXJO&= zkD`p=XdbmB7^n@)NOZeyQCYNkV)FEw1u*$I8T9C1exC2VQANzZAhZ}aYP`J;3VZVk zhwGK&w%faiQ*-pK`vvgNQ|T+b4jUjkh{?fGeQ09wSyOOJ)C&~#r8#50H~w?$m<|Cz z9MLI7o4{SrX-b7FZe_at2E>HIRHy^7#l~HfSQUx=pcxa;_j3Cl@HGSR~S67fvuEa3Ky{Wy+m*4svjdDZjGKm@m|h812k& zu+&EXx$4Y6H9G37Wi?+*nlap@_M#c&Q^_e=!ssgyHH09|&^0g}fhkMup_xz;T$1Sl~8-Cy-L z>50~w*4P{seA$03zVrh)RB6ZaA;P^tcJ_xj_KWUY-rp+o6M2*loG8I(f zCtL@i8Do*sl@D~6hQC!pgV?;pHDcVM^k0aty=G;Jo9@%x9y_79`1CK`Ml^UADXg4n z4y*z)oJ+29)9@G3yR;XJGtav!G`z)HSe;biM{+#EA%?(0vpM{>0Z+~FRyP3x4z_AI zC_;*Uv_vXx2m|pCdclb#B?HjnM7Q6S{R@AvVJw(&6AH@kol+D6muQ)$xc%vKxDokihD{zLt38YJ!r@^Ae-`r{^gri<- zc=h_R!MRJi@1%+4f~MAgGR|@QOuNVDcFWK`O}I&l60<@zuw|c_)^jy0r<+dq>QXol z(n-?2bKJL>u*T_{0oOcP7GaxQJxgsP?1D(tb!Lq|TJs{n^#HOC)*mve|OF$3Z=i>*HBCXPlWdIRY@ zut$$D5$f)27tn!jUC`Wb`u?cLf@nTFqP?)2%qP&;{kA7Pyq~jYim&6@7Zch4UEp%! z6Q6#<=xIT^2S?b|fb@q3Bb(51>`BLw=^8-9@|BCf2^?5-4rlB9oGH1+A7{@jg0$4? z9JjBAOUr#XG`8Q&T|}QXO=<^Q4*#w0kncM3slelAgp$ur^v5IWb}R1@Tbcyw|-x+hcJ_7X%G0*|rn_1x#@aE^@7o&5V?l24=ZJ()$gD*0p- zV21CTdLzC2(FNL?jL0l)9wU=;QeFj<*Cc4lksLMwCit1j)U68B6DYm-aoXsFwxxFu zpDrB`@^G0->T8Ry435)?(+EXr86551ci$%Hp}3m2aq7~_Uc}T`5kX@5v#3<*R3#vpc4 z3G(;OjPm&kh`DGGOw@}$Qam%^ox&vPa+1zwulh_;^mFaPU+0I;*brBx-JvatE^*v^h~Ey`6yJ zT4hoY@iG!)9-3;5hH4fJ3rK!+=(Sc-5q*WDZ^`Dq`<^s;Jr26@J1aO~t-mG(agMKm zXGFO%ddf2UM)!V)yl*@;55X62PV;1zY-sj!++1D>krOu>({@q_NU9vGraF>S^ps ztoTl6e7;F3gdIV!RIHj$CmM20-dDL@OR1-#$fc9AO*Tjh`c&oiJ)`K^msU=LTTJx1 z=C~s7r*p=LujwbQKK{k#jN3!JJ%a%m(wlQoqUQ9;@ZBZ~of}bs2TTsT0gwJ^u!|!Z z=#THK#4rF8#`1uVHCyF|812z|b?hA<^f5u**eBgtexeV`bxWpK3hIkq6cipnbO}yr z*Y_z9^721~)G}A+2CI7~0IiQ(K0~gq;I0tUH|u(uC7P^av*DW|PH0~5yTV3t;R*(u-kGe+}{GkPS`PwgLUS9y@9h12J;m%y5=)2ASjSY~utubNfs} zPOwtReOQ+t8^D-~kZl6O;C1N0@@tj&TMkLiP(1z|V1y`>X1npmA(=rwek@kZYz4V9 zg%lmEs3ItEYw#(*WD*xN7a1zWb1nRsQ-ZzOFzO>JNzf1SV2$vAad(ybfusE>w}GwQ zMt>?E|37${KJ8ifEF~>5DmO0o12B^5*W~n~DYIp3eZ1fP=UUi~kAqZ>ols2G)=};3 zdgXjiL=v2Z{r)LTO9(v(I7`lFAxOdmXBt5vl1i|^v(wWWGKoLUr;Dr*^V#|x1_DYcSl zMQyPHRqif&U~ORKk>6;f0brY6Y6yY=@EndW)MupY^;^8nYqhZtZzA43VB6KFjjixp zLv4-KbR*09ysGYab*8C=DhBr=W9khlSs&c)-J`F(ehJ4&H3xeV1)M_xPMfM5n9jqZ zyAMY)v9|VBdG1n}^q|IbuF5Gm2dn&%lo2KLLsF8c6Fhj{vmWO`q2!C~#ml6t#)^YS|+$nSV99+W%oF=6f z+{ACcC>Ene%NmirApAmmR*D^U!Yvv%ii%l8tHlvU9@f2;M!^WEi60;RBu-?tUrp20 zOJn7bU03KfLqx-~@3?uz)ssgH?SA`s3uBZ`edu9}X_Qfe229J@2uW|m9QR|*EFT~Y zN%K7&;X`ab9};pWOq~$@m7qGlY>LLOYu1|B@!bdHB(OoZCd<4j&)sK_)azTNW=;pCJs)w;v!d7*0rbz*Z z;_>IDV3>Co?v3BY8quLBxoj72#4?0Pvi-1ontkwQj^6@NNZ`lFobiW#+p4;Q$e^3f zl;dcS!|X$##ob#Xx#TIe53q+Qm3ui<16CmT_ZlHa-$==HWQzP6T6=Lag3uRe`mWPT@Qw~AIz1{CCif>LgqvI0|2&fZ(-=$Z_2@N2Md!{V z#5$=h8IRc(FlJeD9I$&u z2~w2(y&$E~<5b{EktSE|5aLg^6)ee?QTfi%y z$s9UwAJ5dQDlS)eGQMR+EGFo_dNZ#Ca&IpbVGXxJjSJ?FMX)!?{+(oR7hiO}(k&{& z9d4y$z1%R=uC`h*6JX7r;>OF9>I&xSErZUzKPx<`T+Kk+6~nDp*C=}0;)|w`bOOAS z>3?g%9G-2h+npmZ0xOqMkYyx|8H*(P=YhHIY6db0h@MflTz5!s7ohy2CM-*g=fiHj zmsGu^?Ax_|L*va&z{%w?_*#A8{XXqiP1vS)SWgCI-aE=BTxishugX@trFj#wUX^nB zPrP_OBFUtecztQQ$TA9a99GuT!GepAt+__@d@{d3_>pI0C`%G9?I5|ct)!O-_VV01 z7MmX$8%HNEvaLs?vhI5v=B;08v31Bh9B;qd`2ZILF(DXjX@{rH!svquZM`PxG7@ZyLhkEQG8^;mmet+%%gO9#U7R4XL^x8A-5EF+ zWDtw}$V1=stu$JOXXp^9@pZ*>_p&O+H|euRFT(s#)#TJIyZ`&J1grK?)<5%E?3NP~ zR!ZfL?pQ;_ItV+Sm#vJKs_X>$VS2ZXPdB-Q6m{A)&-5Ab?lrv+#fgM0*XJHX7dUJq zQtgSbd7Luq?F=b-!sbphg(y$iGe9Zomj_20nYHzhVC>Y_Q@QJd>k=wO%$s&(i=27) z6t}3#N$GUiwl|!8iMzAxxD)}GxMoF-z2x?UHWmq2o}sR+dFNSKICsZg-ofvV@N@*G zAX;Oto`+CmeD_}JrF;n%f6{|;uWV(5+&;%#AE-c&SRP`sI5f&R%CiOWzz#oVCYy=p z-U^LlI_j=eMwvG!an=;SNsm!R`_#;sm86Ljs)w~jMuP<4foy#QLoF;Z-O|KSe%OS{ zO%WAFTM+6Se;eZn$)mXB!hi{fVE9LReg8-2yds8jc&JFsFEu4>pgKRHV>hJkqI~_W zwJPcDWRE{u%p0iZ@A)J1%YFth=?FLvSu9HSVfa6Tw_wa#Md!}0ISsbJBd;K8#z z%!r+nhg^?GV_I0?7SNWtE?3_m-zz0qGw9>Kr5o7pW0tXq5g5)m3x-TTs6d@#h`!{} zSdG5D8O|dI?G^WO!8x1O1(q82=Au$r{qJt9G0%b++{^i_~kY$=9r9{WKKu7Eec*X$Iw`b;oN36%sgub((s*zH5*D z%d!HLJ8dhg6_ga8dZidupJ(_cIUyslMU)Q5Ycr+t*^OxKJ->&j8ADD zD4sUrIw7X&TWtTEyQh|_PNd@;Vqf+#tVg4@j=AGvw+6nqf6c$DiwoLzh zH{x9<>WJfvf=Q;@=Lqg#y^Vl>B7xd0%1RXJ)Wq_KUU}T|Q(InoP8*~CLJAd^tFa>G zkv`cbO2upht(j{kKp%l{{%A5kpG~3=(I~irGT)(76{qX(-!_JU<}?F?>oP{R%L4iV z8JC+E2ucvvBM&w)Zid`hJrncF*ThX!Wi>RutbRx^MY-Uqq@_vkJ8QOz!tcn^7=8%6 zRTx^(w+8kg>UGyR+GSLy=d;lmk2)^xbk!xH%vnm=j1L_1FVvgoB1@Y=NWDkO^l(Y{Y2d2yr-JMTtu^fu2(Zp=NAW|$?V zjwaerX!{uvb{y`S^{6I9Vl3CtiHLb0n>_w$y5MovH-k=JuE@{LxV)kxiq=M^KYG)? z(@RxO1FD>X!qQZNF?3nv>=`f*zV*vk5M)qe2`7>RR3L*)?3gBQ0% z;{a7k0jxt@bu_m!jv|H|LMwWD|4MA@%au=cll-$2cA%*3ATJPYd(;|Vexq-N>5j5@ zIAd&cJ{vOY;sQChFNAmtEk}g3lALHYN)8*7voK90Y3GJ9u;b~ z`zkHysuKcrUNeIHB+z?}F>T-f01CL&GXEbUjsH9B=fC(4c4o%^Ez;m*XW;x_-T$G{ zVBlc<|4#2{1y#UVN284rc7R5zc7&9JxV^olgJoHa?UKGH7}(j_0S1A-MbklMX$SE% zG5asMnGp|KHY zT~pKZ7a79w7&IcgJ!l#bY8pTj0^>YHh8C>h%>hJHi?a{sDK8Izi`feR8y+702>${A zkvpGwd>RBsfx)pAXtO8B!psO-Avhy2U>5IBRB+7xpe!8* zy`FO(@!p9;KvoPd-vl1y50mE49DsPgt_`rBvFS(lP5srL2;n{61euvRBDV)}9T=n) zL?gf^5P($D)6Cr6Tr2=`{o6f1vIhB>bZ>YC#KhX@6X||zMiwB6hzcMXJ2VUtz?m^37Z>6BI^_Gy?~p(|e`Bi2yZ&2K6PsZe_WA|A9w2ar z)-RgDy}^6|AQ(p{fa%abv^yi=uR#+i7ci%~x>|=P2Ou99;M~q^W zLo_fxop%_|;DHF}9Jmpn*N4!XGqW8Ca5j!k0Kd+k`xl$AsR3|W&}f%CcpNu>>~qoE24HnBug@Q|yE&Z`#OCTj{vH3tG*Mygzw-PlJM8lo+QifyB+<6FMwGG0^0vj9-P|x5f8i4 z*A;wQ8=eRL{Q?mkm!<{=boq1X<)bFA+L*#`{X6^pBR=`7yYX-O-sAf7rzg2Evi=Is zzJ>q$8?!Y6Z+v;D-Y-ek&CxFv0(@k`-v5JL0s7^ffD&*{h~D}0GR=|ID-{N@vHW^t z4$2`BycKXZO=!wo$)kPFqw1dD3hEayjX*wss|93eXlVS6zcbyPw$XcyT#~N&bpX^K zz37Wi0mv4d_MgM$KJyNUEGmiwXS$O1Zg6%2>R#6aTgEy66*mXg$QVF4OGoLC=D`mD z9Y*|c7u|d6W?8ad!jA}t?l*d5|MbO2d-4}#1AxA_AD;j;XaMK{`a3xTsSo%C?Es`{ z{S#OkU+r+6`X+E&TR4N;7Mh;NPLor1J}^57O}qyrDn1^Y`D=^V@k{ zx|)3cLB8>?G9xp(=xB=U%eYi;@&o^SY!d`%C(vwM`U!!#*WjviKW+;Pk%+x?$1xD| zQnv=hi>!`xOfKEqWmx3%GN#{k%sO$nt|x@+_sP%Yeif!Z&^Gj!MmqOse=xQ-C*1jJmHb3+Pyf~S zdFZ=#Qt!o^GbOyyveY7$;wRux^HOJNniB{L#GDL?1nfHR7Nbdhjd^_odCsKK(LT{P zu8Fp+Gs^MD25esj88Q(Ug#kz*|@W^`1M8||nPj;ueQ3GEL-MwWb z=wEGKnkUlFL7aX&wy0~p%RKyQs(A=fN!pVW!$BWqnUkwwb?MtRDKwTi7GbV?GqRER zQ^6MKKbw0OZqB`V9XuKO-2jdzGkf=YzdRwyh;oZ?%`uL*!psZi+uy z5B|fn8SiLzlpZl6g-DLyn-wHNBwtg=$-;-r(1hQoLwn;AAAWVNsjaK{X#YfGSBRF3 z)u3scJYK44b-id6kq08L?^JOF!2D$SQuY8`1!O?sEyFctS<=R11@7cRxzWH(@J0Jh z(>D2y3SVI$hpb5JJ6Mi5ghv`yg6d%H?1tX(1$;ganqSmYR038fW?cIaf`hIR(s$Ho za5V3Gzzy|w5Qb$~rWJ!3!IxRC!LhMs>*SDGWLf^5DQ={5^((B zJqxIeZEY2W+_I|bUnxP4s3X#P|CkRInT|`xFYI{*a?VU5Lp-tVOgh5JwGd4qM)m2F z7x{149i1t6JV`u ze3*k8S~_TWPjApWB+_RHNak*nEPn2z7U+UqbvHrg1w3)$60y_b?=q;7@qL{ErLB9MK8?f9n&!^ zh^1-$WNd`Lf;_Ewg+5$b7EXtTVjeV?>~2Gc=)TrF(^QJ~^D^w$a=A$&os>Rw6(gw` z;lPYeJXz7mWlJk71*^6TQquj8Dsh~}jqI>S1VtQG0dI-w7ZniN=fD{)XVJ@i)f`m% zn)EK#A)1@fggHG{1Lg>dsAPqZN)Myq>+7lYG4ed=+x<>7@!RnyKS}sB71X z8GQT03f5{&HE1&^=B`F$Fx)J*7auV5`0|I;bMIM`YvQbJ^tj6e>S1|(?#g$NHZ+Uv zT6Yj`CTNA-KQ=g?kJI>=+kUYJ9_2+O!gF-?bh85bqV;%umEj2|r?fQ!4X;6`5ikuY zN%b(bV91S43)A`oYH=;*pyi>*5~?#NlM;_5_}{D81A9$WOy z4YUn_t@jNDj{#bVfhbnyv~l{J zYF#Y-+xtbUt_@!BeLT{L70Txr#My9VZ>|q2LhT$sP;QHBpA1No`wqmd(2WdwH>dPN zKjF}^%bXr7uc^qC_9^>bxTZ=}y>$doofxfkV%q!CG)p|$-%95*pu$DxnuupQCAY@mAN~W%ORt{m6&a zr?qA;JyzIT{@b^>4Z-dCX*kJ!ENVCsxK)UO)Di()-5_T7N$`CVSJsUOSRa{VjbKVqhlaH*}B7vzfO#tIT_p$u3Te4*G9h>^4Ui{LrMO?G!p7 zRnqp!F3@UZHD*Ci5kX?%S_!E*9I-5BLb*^#oRf4h2k+PU!ZonjD(70|G0aNRm0`Rw z5=4*=MZw28(4VUn=^DL_^Nsv;2q15O>zVDj-qwe`@vBp+W%KjdaTMY4r`Dim|1^5h z9TD&0BG;C#se0Ozrnmn7C{J*6eefkEhXhZKo8;J>9zsF+(5>2RnOM(6*0)}865?Tsc8B>t92}z zJ4OCfvcG6!ZwHL{Mxxu{C|`1BV`X0}aX2vh5eqYYnMlE@a|uRDr&5m+QndM;D_geO zGbwdI?O``iLs%RvjejV5%G1p=wZzk==0XUWmahusbTsJwfFx>f4fX9<{!YWJjp}Ew zyojA3cqX>IG0CXzM^BTO|F^ac+d=%2n~1eWnbOVq=jJpVj$gr4OO>b8kogFM{g&Bv z!OaJGu1#f*qC&!w=Q)qhYIN9VWh4NLym;04EyMe9p-m$C&S|iL&N}G!tzA;aBR9!$ zM_*>tG^-35vSSkH2XA6ev13j;*oLiI#0_KA-_1fiNh64!hr;m>6|ZVW2`?4px;h>A z7Z|d3^*(kM1igp1(Ce<#QSTyy9Xu`UYKTE>$=i^XH7p}bPtl;*_R=JOk8z?Dxy=^Y zfPI;KS1{@LOpOf%K(PH5%KI$S+@>@oq5maYtegqoZT|tv?{Nn?3jE0q9_F-q1bgPY zgB^kv+h%0E9x%{TdO5pzL(B2ia9ywZb^O#>WzZ4@-xKpQ)kwpC94K9yj}`p&mBOqN zVZ$Z`-)DYS?6J+ZYxMzPa+?BE^HPbzyPwp>bW@M5It>s_jv0|~5R8Q!8j{tbQ0zZU z@IuifF7iRq_3I>!Acb=Xe}T192Hl8wOx~HzS3{Y;@4Pjm-MT}D85Vfx>xPPkbgURJ->6r+lhw_ zGF=9+Y!#(8o+(Wckp)T*LL8jSWTi=i3S6**sW?o~dQ7f88FC2@d zQ^SEAl%2M+X$#lUA5slK@IretdzzDlp46Xw?_lF)9^3-=TCAmbJZ>qN^UHd-LWvPp zR3*j%V=tqehp7Pc8#5~}^1m%a)mQn91esiml65G~I&%J-&b`Ndp}11L*!k%^rDvh! zKdC9C-6(+CV;Qrius#{zoyq3gP-BDe!Xjs_07`h;jKr?qqcD#fR zZFL)`78qj87|X=H9KQ*SK(+(}dMH#`RIy;)f#SnT#At4|2UI zDYP&{JgdnNk6ZC5?qUB;etOCtg`}+0f^w^eH3cx2gNv0cUmh`5~EwZI5bnc+{4 zXn)IE(6@RitjrJIYto}KOO+xFhhS;5qxdQUpOZ)sVb73$e1M}Ivi0eEy5~Dobirt6 zSfz?&WZR@_Iv&WTP?-!Y)1f)j0xGuE@^f$hx`Z}>~XJL>H{(W^zX zJqu&B^VMmTJsRT(w_I6=kUU3zwyB@$nq`J1 z4%J~YMs{W$GpXdEq(%8-qJ0Gpv86jH%9#eKpb~DZIisM5h$Ou7=oTn$UGz|_m6h4s=Wm0LK!kOhn1pAG5h}RdXZ+`e*iAgA z&zLgUWriq0#m@ZjLQ_RQ25-dkgOA+D7ssJy{kp}TCws1<-C)1=p=SX0%BZ*q_jl|y z>~v?8duuqT!JiNd)%j?7SD<#?N8#w`rK8;a25C`R04=;#B%VUnI-1b7%Ja@#O@pgz zK-x*^d}y|TA7C-tr{%Ya&DaU$#VretG@RT#tChk# zpS5B7V|?LvpB8=3?Ykf#!)`IkB23;Zx%I7U--k8egR8XQ4vXG8_Dbcs4`2afeYc&F z7;GGsZ5pZTBreja-j?kY#l;CR=%v9=nOCUn@We!H{_F+(GdE2haEbqwn{#Yxpe z*q8m?N&WbmA znF~L~9nLOiZyv3Q1txZ0tTyiWqv`F7T1cLb@6Jr%h8iMuF&~$Mi&=ItH*C^6py4vt z%5JsbQKSl&f-T;W{p<}koP{czV+jqt;P=VnP^BD}14QKP35g)v(`{9XEY_w%_!LVI z6U1sFpa_=qd0?%nF!%WALLOlUCG7)mu!nGv+F=mzP#+wBnyADZOVf`mR6{Q>m}AQI zt7&J+1FX1I)JJlft;rvg0f5W9Po1|w5*oQmuQKi%s;4gwd=drTw)Ni^b?qzA{>jq*_A+Sq-;pcu1VyH34}*wtM5j*eH~JIFi(-U`&h zV$Pt&UblOy@I%|$bU(Cqc7B3WK1%MjHdyCoTIdMu(L{A&qR42-JCfNig&F1Tw+)lj zFI|fzzymXL)PD3D`vA#BkBf?euNG}FPIz%28do%J#qvDcYPd?PU6rxrEy*LS+wC5I zxEJb~!wMGLDDl`n(1L}hU;@T^HCNz{sp{l&aNB`Xwz_m@6>3e?c}L+YkHP?=E5w%q zrc21-36kjlFcTpj0EIP~+c5*5ISy=7&8u$XP2TewznNjEymH@DsM!G1edJNd3#?%^ z=~z4ndZf2PHCYvaNiR02)U*P_9kOmgQUGfjg}3)V&&0lk-iTGPh{SlK;0)* zVfY`wV%Z?1U|~!k4J(okA1z7p(xrP*OP|*yhvm6gn(G0A-9Tm;uaEKw%MzuTJPwMS zBu^g=h)a-x+jwA_9*@lD9XR?mrqU{qcR7t6{3(s!)aMzdR>0vOteiOHK*-)AHD4(< zfl!vC9p$|Ub*DOtOeP%g8Q;ZaFt-G_e}-!HU&aZ}o;QT2$nCj=lTUAU+*N9oFd*1o zzo3m5!zP-G36WLi_uf}$rD!EcL*sKz%z5V_TXp-%sD{4PJ!mVFr|WP-YNAtTQZ9~q znyQ;P=HnsE^X0&cqZj{}k7Y;N)&@8fiRw$nclpaUQy9#?ksk#6lHEFXt62B|XMx&Z zlXW{kH~KZ!mlAPo&+1+Z=yfU(4a92#Ip!ltZE*0`n+au+2`u?A0+Ad;a-=2NNK0{= zZq{&%lAdC<178P%411!dYx`XBXQIUDi5LixI@K;vDykI)UBVOf6QqSm^;(CKJJPKA zmNE$FskqTKnz*c^x|`cVev}dumV)k*A^mw zzwNl7duv~;eSl8)e2iF94<#*FTMW;yv`v5RsT$B^X7$nFc_RnKTPqc!=0by@Gc{7+ zpKA|5Vi61+{}bAA)$i|kq4D74GiqriM=;-0S}*jo&%Vj|ZcSLs-o?#6r);av#JnGm|Y!J z>1hvNOyqU9lEkn9&H(wcRQg3}ey|djU}vcpGvWc|aiRe?bP{qVwEg1VYXruyQUvbA zOjk_*-xRU)&fs}=GK-*|_@vlVwxr=EVc2H*RqAO{sjM%#+y2tpcsPCT0_G8Dj~q{qJUbaD1zg;lhEL z&4Ph%mXn0iOm(isvOneDeEhZMIurKy!?HBAO&IZKvFv6(J#NT)=12yvw=qZI8yxcv z?HO5h)irjXNcuhI40EQ`jydOdW9-Rhj;m)i=h4>Ik**mBM&Ba=*6o$f*#Yn=9%--Q zxZ=?ZCpJcr`?ie=w6h!^Kr4ZFohPah;Us$Q#eWB?VRiN(3b&HS^pFm*OHUi{J*Y$G zl0uGO;4Z^XZO_7h(j&unkQUqxyHbLuVWvpo87Y|i7 z(dhSC;<%M3Imm8E@shVZxhv`Bj+qyf?zz5!;8tFE=Ep_)N?Ac>qrAW$f)!Xpx0EC@JD(1sv=Wo2D(p zvjqgBqO-Sg9u)bp1yn~6m+^c9Tn6lrbS`tX7t9q0E^e&E`rVRTFbixS73;x1*Eu3M zdIB7kfLn2zzMc50Gl*9wNX~A_!8vb4nHEOl@KW7kOan32%G43bei&+UiAm(AE3Dt# z9q6FF{R*i->zVQr_&I0 zo1V6GERxnd>MtJ`Kujuf!a9c&0Sjk*?9)p_f~w0*Amv&+8#_ctV6S>l)*cX{gpAON zgAsl8bj+I-TNlB`T|phe&?(O1zrktqa&*|)iLW6*YqHZ^;yrTY$^G(Tn6;gn>eluB zAs@fnxx8g@E>edD?0$W1m3KyS^ogO1v(YOKy1oVTJ06K5tMW)$Y>%4oKNMWsy{R7w zlL70dO(|?T)laJla~@}V^DX}b(Il!ZNjWLzvw$%l#3}j=jk4+s=-@;U$5&i~Z6kkW zB#5slyaLUdND3fUt#g3cpn4eU$b-t`l%Cc;{9wLnQobncFFM#Dr4;#Zn00>FiOxav zblpdHl(o6=HGE5BWyG%CF{#-k8@LrN3^EE8&H6dhg z9SQ}AJk(E0_#$3BV5&P}NZa>>H26F@d9QHE6_zMPR+Y4u6D$bmfoI1^%Twq-$}CrJ zf>VD+1re6g2k=f~RPs~3E>H|OpLQ#*hZbr635kTC^S1TD6B-iOg>nXxGskogd*ZH^kYvItY$fX+)YV;&Tq z`FEB;Z8Vm3u++*XN+P9-5@(?p3Nxd;My$w^3w0v>9aACLB4Fd9UYI+AJ^4GN^kt`d z7to3|dGl3eT;kJ_&0B+1M~~OU>J;tTnX~VT8-!o@P6fbS-AaC*&~MirsS- zWk3(I{SzczKmc>i_Y&WzntUWb;75#7?G)IJWlc~#)E1B zyph=IU*)@&LMjcv^$a1f*aXdQc%Prx>>4&v;z!b}k8R!ACPx4i@*VEi*5<8Olt)%^ z$Eh|)k9%M;>3v@3t#icP46~85L%e3yZ?Hm^2Sn_%eIz3w=2GrUE=R{6Yil#2fhzm{ zhu=Nzt)(q;9xm4Tw@Q7<3jZ6znEU}@O$-LKc1$i#Q8A}K^;4L5r z&*bnLOO|?C8q4QRtnTC`H^=RJnmwFWQ^|DD))1wv5ohWUY8JC=*V@0Rg&eC-z=uf0 z=ypRTQhtIU`?5aMO3AZ_q8^U+vI(T4RJZ_>ZWNQ zxlBMOa+*dHi=$o_^|vBoF^@i%6`2`roTO}U?e8m0fi1lfg1D(p2qe=lNFJ8&hLTj) zklWmwY7=F7Kpm!}uQ@~_o^&GZnTV(2#t@&8MV&1#g+?7s-Gxarx62?jA(ZhB%`|BbdIq$1|X-;X0SyvKq$j!q~h>^yP3AQMqG#Yo%%3Mw1>-3Y*? z$}rH{=H8-1{29|6;2#N5%xU4Xy-MZX4Z5RDh`hq%wD^^NicMj%2MV5o}#_mx9 z^Qj>hsV{A5YrFiMD^dOS%JI916sWZE3?CB?U$_Q{%nzP*Y92Kn#tL&GGr)}?G&P8c zqItuShG~>4pjBLr?TH&i&f0g21)nF)B5P)E$-Jo!FitMrUK7px^bn)GZ7M?dApLaY@YT+f6U(pC}^0i%?zGJy5rDOS3(!djTp|M?)>HswE65O zp;VVgq*4M6FQ*SEY~PKFgy5=$cdLVTQ68xy(11@KxHr=x`|R+hauRic4|B|p1K6E6 zqyYf@^X8c7WiHb35PLB->Xx;vzL-6n4DrA*+X$(*&y^%nh_rZD_sen@lMvE22;jWz zn8oCW{}|csTw$;&rQ*;1rblJN`uTxR>2gFb3&&TJ>DtWsUtjWk#5{b%5v+h=FRH-d zMvG)E-)Fb2hu+l?^01+rX)lgdkbq5n^`tx1)gKc~zchV1#TV@xsVHd5oVr(`mYmlO z6o@bJ?XO8`;ikB0gT#s9BK6Kpg(XRvHL)eNo5ymfjCJ*FS3G;0W}?F~aR%FsAdxZ# zK7s~f0qHa>=YZP1i-X&DyZiCTzq*o-Co=4;AF6F^jDsBYpACfApK9l$*K<{C3aiuJ zED`K^U~Bqtc}nL}zaEKbiJ!@Z7Gfr>_K$tJaFG9&be8+9K|2|a&yZk6bo zBNJC;+T+2hIwz1IRXudA*!-GR<*7ZR(o;vvgT}>^zHxRdskP2?;i>GHEPdfBzi458 zB3NZ`c^%E~JJ}jb_UBC!H!KsQIRM{0A;0Vioe48HJs4f)J)eBl{>Sj>I%;F^jeQ`= zI+?EsnX_2R;-lCakje5PXahc@VUbAcW^ zZCux_v@qRl#4BZI*Tp|4af&nZwYifib}K2R==cxyBrY*P{#`dKQd$|TJH!8{Gh@$t zNOc{#ljLh*_eB?1mn|_jg_8(7o++W_#M6gD*2($GaY{~|((6kqo@G5^?V_t5i=nk) zc7zbXs4#?2XqGnc>D12!fz4Ruk4>=KEv68(3(vN29xpIYfwojXb1+{I?=Bily0=yy zT7+u~wuG{k0rUooX=mhS_G>=33}QM&(TW9YNzM|Ed8j+aJPgrBCR?r*Fc7Ky^T$a&w@e#z{F z0Y$b7M7!!s(0O&U{lajM*zO4zU@H>4*OxQT=RFxAYO5ij^O!IA;f_+`4fQ-V`bQxL zy=9}#fx$YGl1)vdy`D&`=Vi2*tozWDFGOV4sEe8r1z2?{+=6>D_{o@SVy}C7!teu^V4uj1}jfk9b)Dyn;INKb_Ea!$r+y<-39D4A} z)Z>d4$J#QjC$peh?2#=g^a;H!%rAUd!|03xq^1c*xV=}mWdDP*TFoH)9xTUJ>Vv{U z686_2_6h0B;41blY(_MJHo4cphr_hUWwayibz^1CrL7JOde@fq>jfN4HAanS@fwv( z&IiU|C5xT+yy2MBbx&fX-3wn)*L%(}?-R4mMb1u>SR<6%0kzIP7U(g7{!vEn;nFp` zh2f$-IWbGAx4{wl6QR?FzGoL{4}fslUpbGN%al;{&u-L-i$IpTh;=EO!6!fO5{%;i zfvvLsUv6=BHm3gvs{V6}GjOo{-`pxAC)@wGTfF6exK$_+H*)u*+kY|?-u5K{aP#dQ z+&~c6+W}I9Z6FZ0uzflEwg2^stM{m@u=cd(y1Z_dRg9}FXADo@$OJ698kmu>nX38v z2N#CYU~~JYqy%N8q~In*N&z2R1AoWiCS3B)FF=}rpZ=-`2NTZ^f2@#M9DZY!n}dUm zcdP@fa{yRxe_Qi>S62hLs;Twwv9er<} z^6CJzn7IJ3@$upR!>uxE|1Y=7@*i%s*Oi620kC{4CBScH6;xr%KDDroEqByfUECc-iiMKSFd{hfvc=KR`og9 z>sS2aKp<>w@3KSNBe|l;FplTtZfuWzma(dt*Bn+sDIwWo z{1*MND{F7h;qH%$2*U0ko*e-*Fg88`xVLWr^8VX3yT^Wy|LUiqDkI>R6Z?`E*=PXG z4X~F-qGxxm|Np+&KVf8h;6F0ip)^&smio?1sOz zM4#-2-!7Ryup1tFh?>^Ce#RcDoKpRST>+v-_TryfQd7cuR<4?!<%g?apZ_BSZ}>p> zzA^ZMH!%jS|E7L(LD#(ghp1+4{6hCSI=`bIgVb~Uh36?k0>>i7lxwF)++i;bUy1xx1=C{R16_*clh zvT47_EnHT%ZAytNCo1-@6iMoC zpY#>3(b?v?_V*wJq?SA}4~IZQTHm)fL3Zcbj4Xj24_tcT=4Gnq*L?!peIqM}|LU@Z zhVFeh+kwmm5wu%t9BX8DyKMpfnj0b`j@|v#QQ(TA+23TRIC~ zL`#xKXQT-@I%aAa!k@>c6}5VcJZyOO>{m=+4CsqJT3=|j!@r3OXx>AG%g@Rtw`DVN z7aV_UnH$j4Qj)~Be6)g-XTpJZW9!yUJ=)h2`<6Q{2nH*Q3ufK9pP7OJwmniQaFa&% zCLT$ae%y){U*3}pO*f5G4Opx(oLU!#jd7rg*IJ1ftCdOjAOBD<>W6-Ci3rq zUTenO(nAp(uUK_kaVv#-&0%(2v;Lu$Qe(-Z|M$g30On7sjvShZvc3_#z2Q{^sn3#d z9`=!flZw-nnMZRDI2*0dqLVNlkjEzApyZKSyO4#H+n?6Hoa0Z^sUJNCx|-A4S0eN( z$@?xa$}Nxf3k&!ia_PK10TCg$orYIH^KR|T_t(*4{K93nkBmw9cI zs83P#upx*=J%Il>VHcf$26>sFQ^{$+BK<7Y*jmLw1^cJ4XOn4bzol@ubrdCJk5e;& z`VWpEIIQ(Sye011w&q%r(s-p_$m1W{bmUY#vz3mzjkJCEbAqWB65m9t(IAykZ;J9@ z3yjXv9p2zImEi~WgtY7?JBrar#Q@~T(t3?`!5fuzPx|*@dT~QHxv*L<`;l!(!HN&k zc(fjoE&+<@e92Hrd#!d{A!P?RQgJHhHnbo^!685J$t z4jIQyzeunnJC$lbF4{$7l@$#ARk*yPJ<}ui3r2Q=KLC=$Wc{Y`{&|6{h@0i+tYB8@ z%o_8O@iCp*t;Kk2-CqEz@`OSH(Zd1~)~%FS)`&q+EkA6oaE;0hO}jdAq0vz9;Y%FV zKPW_HkWqgLl%nw7O$NefVUGz53!{ZJY)AaDep#{JiGi#mhx58Uw8%W%r?fN5!bwOw zW*{xbKgUNP)6hl6H_jC_m>M++q!;n66%du_<7=wWS5h_=>KlozqI9l88W?KCIW|w( z&5!Jl=~#;^76|qLa9s^>}v%^ZFrGg^s9Wb{pEqn}Np9Vls!D!@*K)!I1bVDF^?N8l|bUQDSaAs(Zc=;{y{1of9)BtcUA(VGzbhJ{k%0yK>;*i(S#3YM9ZmfJ`3Xv-JHrXhfa^Hn`UrO2j(M`SDlIl)Mt9AuINlN=Oc^3 zrAXCrjgECP($;LtrOv*+gbRzqI5uA4Vi&Ue5*D}8L%=D@FCca~i5iNYX9TESy4FWs zVp5b4T1tfMZ1dEH8`xNd>!ilQgEw;uL3o;`JI+Sc%&5VzGgk2?T2ABJb+V^hBe!WS zj$kI|cx9P!p7(pc6td3MwcVfuay4bf!{Z*$Y{rY_9jp-7`Q(j3xVe*1}xnR*y?Q=PFz*C1-8r? z#dNpt)x4#ScjDJ-lfEJ|9231B%0bBsyq+D8Xq))SFW@E?k$x+*gq8|5%tUU~uti=M z(+_E-kAdKjUx{PzDQ4HWN359N;}b1A7(LWva*Lr?oA0_C+TUJu=%T=1gF&Kmou_p# z^KY(bzJm*VXq7u z+X~l)D{rm#u60-HA|+DGjl~{YJvO_FokoP_b_D|ziPcjuw(rkZXMu4lSx(yzKB_R% z%Nk#dsZ2IbYC`@NORK|X)~-ge6V!P;9RYg$C8nArsy1p6K|s7%H@z#{DM^?wuIfZa znkfSJS{z%b@>f(z>m@8Uy_&_Wqo3bLY`*6$VP{EgS5uSoH^L_kJRa7b68|)-<~m!w z=KL{At%ncJ27iS`WXV}+C%(Q>--zQVrU~iPQ)Zsh(^(B!$x5Q$cta;FE_pqn_q7ww zQ)^Tyj~68w4Xbldia>Z*`|cdx)!+0o)vtyhH+UWYXQQ&rQk^8kQ{zDDdNai3*SMrO z;p5U;&gww4{wP&x295AT3_zcw4Javf&85f&$M&V3ifzp6=C2;3iVqg>N-Ryy!Q*qo zCj{FqQ^w6Wi1xQDaf zN^0B+g_nrqVy5wmITh$dVUQfTp3j!H=R!Zi7$!M9OBot)0adFWw+Heduu}OLuNkcC z?SLcElFQ8BLZJHT&f~T2w3P2>%s!kv-Lpc-t>GwHa9S!4MY@pZP=8?WC~w*OFXMtN zbtkQEYF~)04m*&hQI;_O^~YC{fL)u(jCKbe0|A2sMY3R3eYWDIXTQ)`g+rfkd7sg| z;q9@|9>zh3|IuoYFXH6p7Le3S3-06_IQa%ok6eksC|ekKSMsEdo%+KF?o{xDuBXdF zSSRJstk08?%Wa51?m2BDLuUR!&b68d!scQjSR+5V^26j7V>=W|h|;F{WZ!c%27G#Y zLGjzj#TzB@Cu5``chS0CGUyp-1a z;c}>hr;?`Y(>BH*YcTjT&;)*wnCmMB+{Bce^Su~*oUpCR) znmKAKUEUi^=w0HL-Nh2>H7#*0-&;9D;4tnjK~nu0ChYX)>M!7?yXAneNFzn({aL`m zND$8A;)s;j+$$iGv-Pu^xaD1x6(aw-l6jc!+60o`&6iqj7=41GqsQbA*2ugkJp0>51V$RqTB@>$&%<}>92 zq!;+bC$aaVS0w~&?p$MjTwoun5xeV8`sCh%S7GKtcMPn&xg{rSDzX*;K~W0^-doO( z)WZSeR}7?ad{G<4_O5C4TsXuH}!$ura#UW6C0iVC0!JF6sg>U|I>P$19VOVftt6E~=k5M#&E zk;nW#{Q^-EGwZU|D{VFIHqNX-wGbag zc}pe5^!Dw&Hp4jyf^df(4S9rxXH=Kaoe<_F?-4*1cZez2V0F2pv4?Ky_`6o*kyKeT zbeLzyDGFn6m=Qy22ps&TqLgErmApYm8M89T*>L9=m|)$nEH>!C=1K#iNY049Y*x{G zRpooB)FP&4L>7a6L6h7r0g_Q6>hsry2~7vCr)`#O=hiVO$iBvftHtby;bYv(3!T-+ zE{O!?Sn^;X7=@-i1!GC!-ZKhNlLxGGhtTB~8D0*V69wg2G(%yhP zCh}kNAijly;J9wPUC^aR*}pq=j73F}bqx1wk{rn!@s5o6%NJF{rz-;=x~Pfpzj82c z2|{mHr?I9_qvUR&W|BL_)uKTDKp${JBdKLItUsVdxkA?ZY_(hdgi-cXd?|s);Bg9!O2nLt=KSdZFQSu=y(7yrt@>jgiG@6;!mq5%qt-0x>vmy}lwCgJ zt5CJJ+1%kzZY{z11@v`J2j^5kT?pX09aV4JrMxQki3+tSy5!LY+DGp+m+T>evihwP z)}VFSHYB&EcHeJ$t@-g2Slf43bFZ5i0%6Jb2*v=T3n70NeX>use&gO7UD)?vVhOZ+ zb3Uq1(8}auU5PuedQ#k@)C%B8_ zO~ij(^YqI&oSM^u-Z~9(l~UB~;TfByL%DAqt0ZnGgy(Y@aSHwrup@$ars+`>3a6$M zP>B11-H3j@2<{N0VHB&yH?uw$hB`Z=rq7uO<@0A*rZ3?h>xqFp3h>&RWqe6u}H8DD>4SJlQTB@nEE8QR9+uZN)-M(`YF9PCy)DyY+5j~19CmAHUF`nHLorMGPxs1`@o&;bqigl1q^Ne^b9 zKJRP9K;Ev?uDFO{`v@c~3@!0^j4=%Z*3|9QzY7CSr~Mx&z*z6I3)scTW;-gMa;`M)5zNiXm{nx#@(+ktqZ{yd`36p{S`X&OnNb(6AlQ$`kJ$1%d!0IH#eFo=i{VuN|$WzJB7%7Inmg ze3ltYB8XdmaNeRFxg?%k%=1>$T+%>`SEoYRsSM8psi#hxYpqDKKBVU#^(dQMcDnnK zcs4yJBsDuzAx)_dYq(7SR@)RT%C}-(vVtB;5 z(@!`2F?J}(d=%>d1>U_o(C8q znV4D&X*vlsG4fbmJRty)4p&ZEU%?>q{-)5BV%xyC6iopHIn43|clYa9udC@;i}E#vG^}*61YW{!tYwkImv~vDl{|2zgIcj=uVxWJR9H+@w)uWc#|!2s zsz=E)WkoQ}k+EAtHY*o?i0uy%CaDXEYVROpqrvD=@0d*v@+)ITNAv4SlbagAQ<;|R zovB5sdaCO`5J|fXJq?xi;09e~wPhYGwwJ(HR;jowBY6|2Ro%nV_OI+a zW20@CGG!0b_Orm0_KtYR4SLA~e~Ln%b1tPu2&jpScTGFqW=L4oL8=Hnl(dJy4@*0C z8Qq6UWHVnN$&!f0cH=R1{X>NH09pg>Mof;pDBq0R#_Mc*YRp#&qP+E3re+P?w7oaq zYuj(FMGjhJL<*Ed{i;c`W>jPBh=il?o|52Ug{~H_P9Ua2G-!o+mmmBP~YS0Tyw8i z`3BK#fh|cEJ(iNo9{!?mMU@&)C*Dnkxxx`pdcayE9=LT0FM;5Qz{TlJRi8Im;L#Ui z+;XNz@1tb1q_lP3c(-z51trr^8` zuN5->AU*yOSH$hNezRrsF`j5qkXd%~%#5iB`SZy%)PDHv&4s<@!k0qt*bcU!=VyG> z&%;+Q6d2*thezT(v;J4jzTg|tkngh~+0`@?7rv&2OgO+cc{mB97(^9xmhTt}I@?~K z_fgx**NR(%xw2Mtwi>);bFX8K2+rAcoG%JaTxsT2sqDU)@8^BsHNsJ6e_akfLGOdNw=GE zOk}yfR-nnO0Pov>d7lf`)TyB%$^=i7uZWrJl!frrOnh?%A~-^B=Rn=GXc3P?ePyRQO`!H4wG;t9Tl~tsMs1awzUGDP>22zQt1a;U zi0$5Z?P#5JLEf<*iSj@BD(G!J;e4N`AL;y(6r@F*Wm|;^H@LosE7W0#?uGFj*gd-x z!F&V{2viD-`JPVO1(Qq`FY?S6vFiKSsyjKT-D9`D$iAq0 zNcl}5k6p_%@6z2Y`AS6y8j(b|@p6Rk=BDh9Q@#aj*w5t-c50WCx#iBP(zFz05oflj z4&0$R03(Lww`-jv-zL{7Y{y@?O{YjjR+s=dj|jW+uvSd3IB3yIeF5?(pjV)pc>pDT z=AP#w7*UJAimyZFvid&1*Uv5FMU@@zW1!}ulL}ZQ!PYUoi!RDO4+e)X_Np!rXEc>$q}+B#lK5KIT4CRFpHVYJlu}{kfZnD(LG$ zLA%ustuJ@AAhVqB0jiTNJX>Dd9U4v*QG`VlTQ2XFf>OMPenRv>Do3cG+_H1%PS6+Sz!Sa{(L*IN z?%O0Y{iNgaC>9y?y)X?h94U}{+mN41+Lq3?vVd%~+v{x9=zwLHi`H%~SaDzZZtehV zt_JsJ-wxZZ7r~P2^!xfBWwS;PNL;j3#AX#!y}G>4!d}$ zn8+Ai*lFckuWbZlnF(^+OHZEFTbkO?J+#lQmLK0fFj(wS-L`zR<=ktO;r}H0CCzxW zIa3djwBndP!1y7#lPs>(tiHS4Lz;KK)6#j3emdhLM6HRB4D1U3BCmDEhX(gBcPf}y zNoORe9QOxj`V0L+(#g#vQf|2OutdB&uS8%bEOhzC!7v2T z>5Yw5lb}!<$n|s*jJ{*XQY#vs5{8agPd7SvNJHz^sg6Dfwb6;5UyC!vTX0UN9S~kG zS0uXSemm*=$%#k9GPE6kzWmK&(;dVd_Vu6^`CA~S_t$Df^{Bml#Gy3bfon<+g<6xk z`O>o=h0BDPiELW%%B1(Y@z~Uktr?^B1PPn(k+H6>mLx#yctGQK^V3JGASgU*Ixf_? zo*q~z&!eB3uzHl1r7i19m?5}ke2HzPF1~dPlNETOc(T0fwiFfm2LG9!e3O!FQQ+tw&{#mCJamSROW?CL#|zBfI>G@`X?i(LX@^7D)LB&6Iuvs*#5aG zmZg!kJz`8J20dasu`0ZVo(Cty4FvyHvi^g9x92Mu)IckC5WQ4aT*Xi|V^cabcH+foPiC*a+WUqj|8RE!0vi!2p>N~KT(RsP9YiHukt>jr zOI)%9M|B<<=aoKzCeB|~IIE0mse z?^=fOMx2ngy;neKs!Wi19t)$(Bf2Ad&1Hoa!LM>;z?N*B9-MEO{lxZ zh{r}P5H2a!k`gV`vG4Kd=#cd{&4}quUaDcz6yPBwQZt}=RvSOE%qP(HBn3H_N^D8S ze(|;?9%~=k3K6u!psjaFPq{CYyh^i#j_J=XA(eOBCKR>zb|P`OhfZ9BhD|CyvA#4D ziU8}>Zm6QA1wBQ`>`|73Du;u-LlD@OoWD}x`2@5rc~L$!`#+i5gJX_AySnRjRXU_-)PhtqUa-kzL(INs`vN z2=pVhyC#1D22J_7CdxN2{t=OmDKm@U5X>Lpu|j*qe)vl~W>wu9`O79A2p2tExVT&_ z&Z>XWvr@rQE6sf`pb3m|4U&x6&Q|6whaWvg zxU-&~^OR}CuUYcXUHR>3C5jA0AT3eL=K)%nT2Xrt7pBX2d|L3*mM>_HG^YQ|rWk#v z?wP;9OZT;srf~5%OaRzrlWT`Pwq^W%c73@B(4H3V0K*U-79wNuOk3&mH?oX(Lpmi& zj5E)W@+|`@3(n?ys74@|Wjpj9lTU~pe zOiKC=cg3!?pSL#16Z*!phb7K~`aa0cLn0IHyH@LyoA%Zv#;*U~@v)5Bl$OS;_JeKL z=X_7cpTPs4vKKSC4nN!RRYu88rfB3%d zPFsVHnsGW#lh!R21@dafSz|tSt8AVQb3`RY2_y*lcuq5jT1h26 z+mG9e4AnjD;5{|baAHCo6tYKQ{|4XxrHL9T#2V@w8#`o%Bzxbd9P7iU{s4$8FE>y= z2BIE;-I@xE*V@r+M%GbpU0>F?#`Nx{dTnYsWt979=RNQO!~TQc(N`D#f)?#>Ia_NP zbWkV?ANllIA4frx(2s{d?tEyC^eURZX(dZjDm@j?G0s`ve`(e+$>Ma&#m)-`rIn-& zqxaEa_Iw^K7CED(AV=oWnFzayb|xg0=a1m+D{~VW#=2rJofa=e5=DrdY%y#se+k2a zDewabSclAaGdben)*yyLaqh+=m7O`!IgtP4(joR01v}ZJd_!gG29t~z&SL?zF`Y@6 ze7@7-%sl)7Jt51bE9|XdH9ng=yJTkZJJl#yOcS3)Wms4GBx?!OAJ8j}Z%`P~HYaKx zicxBdl2pcQ>$F!C9*qRnXxrp4p;mVfj<6@A;}(U}`ZPGS1m( ztu~&yTP;2wHY0OTi;ds9SZTB4P~f?Rf@SB7%j19+^@_w8ayloN>iXht6l;OuQK0p=FDE z7;n)DO{kKooPMqm0AGHa-FF!%%xtW} z?Yx6Xs-$#LB58Lxuqf zDZ}rZvGFgkLJWQT*xj!?jlyQb17#h-@EW+TZ+940XE(GC$IZ@HO&C}G{z9!jAJuCm zIDC!n$pG>rG-OK!T^+s;kQqqp!dpGaq>U!3ZukdQh0OMyOsDo6l+IxnFT#&X5aAD4 zdZeja5+mVt2koyTUXRKNRmv{zO< z7$4_H%l+{T%OM!uPO;&s~)<@px^VhfaCf+q^Xor}_GN95c zJ6~gElALZ)5HyF&oTWCBvhZ8dc<{Z-D-o=RX)>aRd=p;v>_?G0(Kitfmb0;W0-A(> zy}>DNWk}pbhyT^sR|eG;EL#(T9^4%c?i}3R9RdU=1P|_Va1HM6PS6lExI=Jvf*jo4 z^>Od}-m6=6Z`J#D?bx%3;=WgC2hig&kI7pOIKwCl@4A8OD7f@CJHo^RgFr z1R~S@;*=G_h5nKOp%_+Ra~71Y^a#l(=xcKQpymy`m5)_K-Ua6;IrfOna8FiclH2Rt zv@Buie`z||*6O3<&^A^zDQJlJ{KAY2zCup zctLDGY!yD+xt7{&rE&P>=~OmZw1J572RY{x@C24YiM}TGas>rjn%VdH457I&;gU`6%AJWmOLV{04J6_ohqTS@Vu#5@hJF#zN z-^xjjO#LG)zAhdfU0c$IJc&7CWjRhSNHc_%pCCPj-UU`Z%$%D>E93v{jz4Z4prc0C zS+LSrlrfh#&v&4_;9>zgVSm-bk+l4cdgPY1JTcSFr9IMU+}o6|z}4r8%J^+AGF zXy}maw&8HF>C5wH@5dB_x{GNg^@vl6X;(36nNp-0%&&ms{6kZ zQY!M{5z0HeY_MJFvL@8pZi@Q##DB0`BP05!<^1TIZvArwj$lXUbEj&%rW%I`D}- z|8RUmq<@K9SZsSRGHzasMWf;;OzT%hbMX-5*s_7?m0Xe58x7l6QKS9@w7Zy;p zzb1SugH4a#cMT7 z;GoM@b%>9i`UtgUM%z(EBRF7&wyst(aN2?uVfv)pq~FwIM4H+3g>xQ z|D|xAlb8E{)t~=W@0p8_n;rPi2LO_`v~e+W0)nJ%j9knl%}ne~%>cr}0B08`Gb3Ao z$8xj_BIm5ntlzYGZ4#BjMcoK@By;UZhrLcBn{Qeaf%yQgI2E~MEmkd6Ypp5ml6=u| z5|?!ZIriGre6Qc29AS_N5(^wOYS=nOl2C>B5$brB?C znib#Qzq{xa-O>8@vn!-*|2(l*pkVRBA#3_M;^# z9ek3_8pm{=~mM;e$aD$9*d&1_IjG<1m_MHGIf%IH{~4LL4kUC!h~=kj741039u^ z@S`;0vVRUz*o)Nss}wr4FAuzbWY?SH-HPV~2I12Tez-U!%OFl0#5w=rmyC(1sLE%( z;C(r4=s4|GAqq^1uK1JqQ&~K# zc6ESxWrDq9WaDs{!7sk4lOE_&r>%I`cU$~Mj-=XWB7>yS4Rz~`z2jrBR)JEjEdhk7 zzRrUbgB_zEsGv7l@s9&b>7ZJm^Js@LTJX9SM_`}Jg3rQ-xb8h$H}s*roCxwj%cN9q zqHTz>?&!eHRZ+vUPMkMsbY9|L5`|&@%=`WW;t9~W z-c(LRiXUaK&;EXWdgc6e%PV@Qg}A-;Lf`vxr+@zTCF82AlX8D^a0VIr`Ki|)7ArJ= z(D3~23h>PN@TT;dllta*|CSkFP6T(QKJgZL{ul!BS=;m;R=t+V!I6u!V2}6 z$_!q~Yw|fWWqBZdE2jD5zND3SY%P;?);gP!$!0Q zvZ}baEAt2|d1@DuNI*F{^cbWfp2oSgF_Y1I+n6XWyn0=$hXiBG(-)=b(;gB{H$NWW z*gXAfEU0MG>oqFwXyM>)$k~d$EjeTzK%5$TnGA|hB|B~*a!Wesf&FwCB-Riy)DR+1 z9npSv$k~L*2ry7!+tb+N#?s}-*u(;bUIx=mZXs4)U2(GL7Hxx@@0Vy0ahWsi@=`6z z;whP=7OGGkPGv6gFJp<`ecO8Agc?YJX`Fx1 zPP-*W3%PBvNyr54dDx}Nr^jb5_T3%^@>QNBVt`?_#gKD47B;DsN9LU0j>*yC5zoP{ z2Q(+R>ytMxmAAKsua1DdR3)&ZIE5Ex4Y)NW)mU* z0GTh@mfsPd@6}f6#n(ggux%*Yh=#Z)k&D_tr$TqhcdLJGG z5QGnQ^G49Lw|Y1jmw>&?kXY+&bL#pNJ@=Y_tCOq7hJal|sxb# zVRDE-b&MvQ-rn7%2JWPW0a-ZprxXk#{vPwPUl>PlJi(?!x-8Cdhf<}X+VbU`dvdgg z;wkie^(ra$#fsRp={PlOzP+4^JDyJgTdrD>);d3?D~FR-0ceLeri#*|?=7qAA3ZSP zgBooUSe9oHv~ir58Tziqykm}54&oVi)wbsYkJQoYE-HQp9%BXR$3EQ^inB)z6qz3s zG0#6FlskD^da07(mkQ4vRE`R+(Cp|BR7Week{p>#DJRwZfrKiH+Rl34>20hH854EsUl_qWRXnQhlkB4BorVD$hPCy zH*#{Q9EwAQh0Yk?_=p)b(2qN%&xB->dpb^zrLr(%p?$1e)cb*>XZ(_~rClI!q*i_c z7Lm1%6k)JT*D3!Tp;e`7mt!x#7tTS&YO`+R!NT~c~Tdl2Alg5OWA;~H76_u+e@-u1CuVJO3{1X_|g*Y1I8P8$M=Hm_Ne zotCZ$Y)D_q>T6(h9=`Lj&9-n-hVlcy6Kf)fsrKafCau4I*J^|uakp8b1U@Jd`_z!6 zX&!9r`4ty1*0o~>rkvRY8~2Xn-KG` zF51c0NcJ&Zqjcpue+M!-Ilm97CClqr>{R6?0Q~`0JI+ShaQJ%FBT) zUjVfW`3IG!Reg8LA@z+0TXbHZ&tJu36$lFz>kVNAb3|EZ2a3{0B~(DfD*RbOw?NnP zt7)3;{6E_tbjS5N^1a<>{zkT{8;%y(dylKPJ#cl>EO1y=71m?ZcQ)DSnv%z7#2W>t`8L}DO)lJ0AvVBHh^ zKGleHo8s(%%(Ycwu#~-Tx~Wb?#%f%!7ixU1iSJYT;i$JxQ!kJH(oStHrO|!j4`+%* zgSxwPlHIJC#B4L)^AmJTyrPc?>2XXnmE5YEUE?CMwPzJck`WO)4{PjjQxpte`R4gn zxzYGhvW-p++#NhkMi1Cy4=f_nM}NMfxsSN#nX9noh**Om3rZ->Hf^A9|8{MY{{LO8(~0S z6o#WglnolWv$U1uN1-FkrRLOFEV@y=6|<2BBIwSO!8c2n&dhjwQ~|LaSxkEx@x?hc z^+j`xLMsco`y$VhFC9?XUa%$(%QV}OOE4#;r{}7q!#3JY!&`hxRSxHuW_-dGR6pPb z>D`gTLvG^5)E^c(B?`?OJd|~-`SDw4O>k2fD)yhULhe0>^E1|#__E)kHAV;2r=x0Q z+f+37o z4t1T;J+l@FXPz1fuc~m5Tt}PWWR4q4-(p(L$@bR2@k;L6p#qOVN8*{FUQXEUN8dTn zuGp({MV&V@QtZ{xoxY4^y&37r&NJ$kO0L|? zu`IA#=hA7bFce8?qonoSSHq~7)H$r_+v;YzlrR%v5c)CU8lm<5E}}z3jiwMgoGx=p zfAfGA_oAU;Yk&;-Gu)Vz{xx`v4@NRGLHj%Z4Htke+$5ZM&=cx@ifZZdysjkT+Jmg3mVtC4#)KBP>XL*R>B zz_s1Q)eU4wr!X-lv<#SsXr+}ADwDt3J$|qh@_9ExHj_H6y^Ux-N=>HdKu5P#26&P{ zu47w&6hiXd*R1B9sv>+Fo3wHa%8BaTfXij$JoWd}T-qBMxb7~&lqp=Ff7@H4ZvXzI z<9Cry_3N$P8g%g9b(#Z*0tQEHwa!(hsUn1YD4?LBAf!o1dd4_;%oIGq%HKa%a`n~T ztkj6?m11<00sf{f!*@C3kD?jT=DERFZ8mV8EY zJu$|ISNW(~b}s!ZWzfDBnA!dn&d~E`|GeCB1fXU-85Rfp~sytKGTV`QWyr_Ilz?6}x2aG0wBBq{qhm$A?JtkJ?~ zP-n>La>y?0oOM}~6YR8yN=2Xy_tzt4<|V2Fu1m!(Q{^&dMRXdWH}IW~^Qzf1LBnO8 z$nJfgg@vtQ6%0ugIDozbmQ=_^s3vmyK%7sjJPG)yU;g&FEE2g|_z5x3*Bhs9h6F&A zs&Kl=M5Kn=lhn+*5hD)y+ z;#U#$5)9UysRB8OG+OG5sCXJ-C};LrS#_`)JnIrM1K-u?tSk-DA6u#nYqu1JsFz|O zBN+%U+@ekFodqTk#~W;)*8;NjTa0Pm>fpGP?en1_V-|@jAjkDehxPJ^pcH7bcR=CkcTFc{1_~x5kPSfX7J`tdKo&{)-)77d+XOg}v$W%!^fT2Q*6;qe@=r`LXdNuyH!%<* zNT_y1(%Eg9na$5>6+Mp1+Tw*>6bmxfu9>u*@bLPK)4+B|T&bnWEzu`2KZQdaK)-9| zv+wG*mVPTPX*@Rm5F$g34G+A$uEtK!%G9)@Wf_cF6h1v-JI7cqw>DhvOYQ12MqOR6 zMF2AQZb*$JCuo;1S5Y{y*CuZdI-1B8`V>tg>=M-7> zn2DKIV0{(`)vNE)5-Me2eG~Rcaph*Cd^@30+w#-?v*?4t=yf@ zS7rMG1pKQK2o!MpO^i3KJo>b@8iq5vjRd;{bNnwGSv5#Y9uo^CP#PvgS4+!lHP&bv zg#)}N3R0-b8ASd*NN!b0W+Cs=*c;Ll`^*y` zZ=ON`)^wLWqj8U~x78m7=_IQ#6#>3^_Up*bZ^cOZ_PQ#|7i!cN-LJl?+ zwq@akJn73J-M#yTUQ#huE4yI6HI7ubXETd6vfYHQKXHJ7FqG;kGk&Dm@BK)@Pi6kg zhIq>GOb_nD49jJx9c$U%_^4;LEO)Xdh+fvR72wXISHWnrq9r+;(AO`6*dy=KV!1r^ zs{wn7)q;yBXYnr=T#5T@>GDLK&JvztZeKQe`IqaJ&W!t#VefduMkn=|e;aALpSA9x zVvL6jXd!erw5R)CW}K>gc0stf=k1h8D5Lxc#uEm(r$IBcxu%dKkPL@j1Ja*k&b*Aj z1`tf0>XBMa95Qd6RE=m<#)?L*D--sSsrg*>HHatj2ZF4Yju0~VPv<5jqS$`Bt1OD! z6OIM$jtRsaY*~!fE?MY267mQW`q{0u4OejYEp|WjgdNK0T7-#y*@?z8tl$yUu}5V7 zG_DW0(H9z6A~NiJQ9Up>e#QGqmTtQzd;^m%ZRHeBl2NaQI(QovzKi?FN$L>zm`5B! zTA+qX;*N0*Kw^qL2WJa%Pla0P@G00ssmZfutTTBqipI5lQs?J-uG7gaEU+i9!huYfsn~uET||+*QN^O3UFoM5KGkSlYM8rxkC-j+6?@Kd60v8*f@&_q?V ztw$D$9y_XRcJ@uscx+RbU(WC&4Q~o=syFJ}CxN$Jgv;fcM2-&>YWgS(%LMR*W$A9- z%S>a)?NvA1jQ4PzeN!mYRijHK<4JlxBCA;2!!_8~jz-2@55)dJv6q z$j1S$k4HFY=G9Wt;|Lrekr-H;;1p`~o>eq%ZR$VN!e3`SwsN{j00+%yUvrp`N&U6G z-y95=XFLqVBN&1nj`M_cYwVC;X?QFGAulQGJf80Dk-f^t@ddpy>&JF+-ZiyqQ#UPJu)l7T2kF`L$$-}f;%ypT;BO!7+q$#+ zK7wth#j9-gc#q)0f0P#$uIg$bO(ghYhbK(AI|Dy9n`Y*sr@#tgh=#nIs*iYvLNqDx zHDKpOuJj;cd(R@sX~1bMo5T&p-rCPe(HI*n=1j&6h~a%D$Wp>!fgY^AFl5+M zRq(r_t&ABGQK?^;>hd zim#sCad#I(Fpmo*w9%-miG*qmO8hh0z6Cm2e`fMnH!Db}ENS$C;3~eR)Hy7XI6;|s z8i|oZx>xe+wC1a&qI@K`!C9C;f1^&uvLO+)E%uL%qMxjr{%q?^e@;p2so-k87J6@} z9Fm^U@ss&SXsq%tmBdj_FMB+V$37WFHlS-;bi3CU}pMG{u|jin*l(o8dBOU(ylf(#zuB_ z|G=X0&C(h8{{A;6CZML7lk@x0K#q50Y+QWo+|2AOT>k_0p8$c1mTqRicT5~0Ni$vK5gK3zGayLC*h<~S764KP zvcG3Aq%EDCU4U#{|C`$Q$C&N^H-mAaZL31WhyI#l2#Iy)$EaSnMf@CytvjoxM))%s zooxCSbv!VCskr#==#0RN$1$OVy8X#%TJG3XkRvDck4d%85P(M8K~a__&|I9A02?cV z{wSSwRAB_>wH_`Yod-Htu9zedHnGEjggzY;b|9@-Fc`Pa)jy#ON-M@v2YZygs>tZO zB}%dRGH<`&3^!1%yFRs?GXGrJ?eu_A-2=j65wy6=VJ`au88@4G7(>9 zgg0v`la*OWEntV30}{U_@D`^_CApDgxdk^jY*fhuE4~#+6?|sa$U>|_ug@VLSF7se zth-=FI{e&zuB7Q9`DwAg3&sjs-ZA~!>d{ituAV)qCou6_nLe3?WI6`!(9~k2`DqWs zfrbss4*hB$$o2h0o3Tkv_CbiQhE8opmSDLf+-j@LMl5>m8&UwSy!Z4gR>t!-XMfL= zu$_B>oVY@H8drT8lN%}%lEMh35VHY!d{tsf{gj$q?UXVnsXt6Rrqa|tQMIF6??;Yh zbXePX{QPhNOHtE03N}r0^O!!GT!jRS=*k-a$dULSC)3<6VGG}pnLDQ3W_MS(P^r~U z!+O)%ww&%F-nf0sC|igW1U(Ex$?pzytQwg94v6R9rzV{{92{5Wp=Pmkxk^(ksnt>O z(YTExOMEE08PI)j*~cBbur^8ICg~q2STp@W{E7cuR@uOY@~lvBDNd`kbXuyN4KZ|p zVmfX@P6vBrc~ z;4;+6+WD&)Uo(NpzHO*F{`3i=TFz|m%FzB-PiMW_g5LGHoz+}k0*O$+Z#0lcRI)8d z*3X2_3sRBI>U(;Tt&hUny;Bkfml&P9)Nh>K>v+$bIU}^sDeD*Xxfe_I+jq|$St{lW z&m3>htQFn89JyB!3vHwmBMA$J7S92Gkl5#yv$CcwM7179-qx2_j+-hh+DKUaL`i?!3pp z&{*U;A0;CUp!f*&ky+NHMgQW88lPb^eaj-@7bHNhgGDcN5{)2^qZEyMgi#Wg`b}-m zDa8feo@35e-;3^kW7w<1VV!09N_?#no6`w{ACy>iVziPic^7GT7AusGM^fNBNiO8u zV_2xbf~$vketz-$$&qjDk>V)4Nr!@zQ8X>PaVYYt&NtQ{-{zw@6nqPgTuVwiG90<) z*E|R`9R1Ge3Y9GqHmTN|x?8YK*Dt4pK4JRKF8>y@EqooZKR#q6rg!HxF%p;*RlP=^ z2mESyVpefj57cF!@m@XHtF6jI;-`)v#!!Z5vg7Wpgt=0_IY z?iQ_O26S!ON%cZ(UEiShj|5zpn^vKGxIAi*PyIezHyG65{^>+|l`;$= zMF*@ID*a@1BhX6d=!aOGFsj*y`Ea%#6s0d|<#m35VJ$QI4}q5L-{On5nwdEOBxh%8 z<^j}W1#++(06^-No@VbO07wg{#|C_toqJzXv$uBvvi~DKsr|#;+#dMPsQr(LBv4O~ zlZ#7&mz7P5PmEPsjFp{7lAD8*olA;M>|L0Sokv_;82Epiyq}_IW@q8@4aoQ3T6XVo z?f*{8;|#W=1c~AY8D%=ewL<+_=S7x~3P|$VXNMLj3V*-p9NIv=M#xm#Kxsj%e89-( zR#Qll*Cnlc$rhx_e_B@Vm!oMGJb1hHLhUBJ|562FNo?3SGhr^?6As+_PNZms9QW^T bbapXva`A9_cN`brd&6h|HMNwAG~mAg9kW_* literal 0 HcmV?d00001 diff --git a/eval-partiel/input/affect-err.l b/eval-partiel/input/affect-err.l new file mode 100644 index 0000000..f142572 --- /dev/null +++ b/eval-partiel/input/affect-err.l @@ -0,0 +1,7 @@ +entier $a; +main() +{ +$a = 5; +ecrire( $a ); +} +$extra = 0; diff --git a/eval-partiel/input/affect.l b/eval-partiel/input/affect.l new file mode 100644 index 0000000..576dc8d --- /dev/null +++ b/eval-partiel/input/affect.l @@ -0,0 +1,6 @@ +entier $a; +main() +{ +$a = 1; +ecrire($a); +} diff --git a/eval-partiel/input/boucle.l b/eval-partiel/input/boucle.l new file mode 100644 index 0000000..4821457 --- /dev/null +++ b/eval-partiel/input/boucle.l @@ -0,0 +1,11 @@ +entier $i, entier $carre; +main() +{ + $i = 0; + tantque $i < 10 faire + { + $carre = $i * $i; + ecrire( $carre ); + $i = $i + 1; + } +} diff --git a/eval-partiel/input/eval1.l b/eval-partiel/input/eval1.l new file mode 100644 index 0000000..2bcd814 --- /dev/null +++ b/eval-partiel/input/eval1.l @@ -0,0 +1,25 @@ +add (entier $a, entier $b) +{ + retour $a + $b; +} + +mult (entier $a, entier $b) +{ + retour $a * $b; +} + +main() +entier $a, entier $b, entier $op; +{ + $a = lire(); + $b = lire(); + $op = lire(); + si $op = 1 alors { + ecrire(add($a, $b)); + } + sinon { + si $op = 2 alors { + ecrire(mult($a, $b)); + } + } +} diff --git a/eval-partiel/input/eval1err.l b/eval-partiel/input/eval1err.l new file mode 100644 index 0000000..b1d4456 --- /dev/null +++ b/eval-partiel/input/eval1err.l @@ -0,0 +1 @@ +33a diff --git a/eval-partiel/input/eval2.l b/eval-partiel/input/eval2.l new file mode 100644 index 0000000..6008853 --- /dev/null +++ b/eval-partiel/input/eval2.l @@ -0,0 +1,14 @@ +fibo( entier $n ) +{ + si $n < 2 alors { + retour 1; + } + sinon { + retour fibo( $n - 1 ) + fibo( $n - 2 ); + } +} + +main() +{ + ecrire( fibo( lire() ) ); +} diff --git a/eval-partiel/input/eval2err.l b/eval-partiel/input/eval2err.l new file mode 100644 index 0000000..f142572 --- /dev/null +++ b/eval-partiel/input/eval2err.l @@ -0,0 +1,7 @@ +entier $a; +main() +{ +$a = 5; +ecrire( $a ); +} +$extra = 0; diff --git a/eval-partiel/input/eval3.l b/eval-partiel/input/eval3.l new file mode 100644 index 0000000..816745e --- /dev/null +++ b/eval-partiel/input/eval3.l @@ -0,0 +1,12 @@ +entier $i, entier $j, entier $k, entier $somme; +main() { + $somme = 0; + pour $i = 0; $i < 10; $i = $i + 1; faire { + pour $j = 0; $j < $i; $j = $j + 1; faire { + pour $k = 0; $k < $j; $k = $k + 1; faire { + $somme = $somme + $i + $j + $k; + } + } + } + ecrire ( $somme ); +} diff --git a/eval-partiel/input/eval3err.l b/eval-partiel/input/eval3err.l new file mode 100644 index 0000000..645279c --- /dev/null +++ b/eval-partiel/input/eval3err.l @@ -0,0 +1,12 @@ +entier $i; +main() +{ + entier $carre; + $i = 0; + tantque $i < 10 faire + { + $carre = $i * $i; + ecrire( $carre ); + $i = $i + 1; + } +} diff --git a/eval-partiel/input/eval4.l b/eval-partiel/input/eval4.l new file mode 100644 index 0000000..7b37cf3 --- /dev/null +++ b/eval-partiel/input/eval4.l @@ -0,0 +1,7 @@ +entier $a; +main() +{ +si 1 alors +{ecrire(1); +} +} diff --git a/eval-partiel/input/eval4err.l b/eval-partiel/input/eval4err.l new file mode 100644 index 0000000..155d4ab --- /dev/null +++ b/eval-partiel/input/eval4err.l @@ -0,0 +1 @@ +entier entier entier diff --git a/eval-partiel/input/eval5.l b/eval-partiel/input/eval5.l new file mode 100644 index 0000000..beeda13 --- /dev/null +++ b/eval-partiel/input/eval5.l @@ -0,0 +1,9 @@ +entier $a; +main() +{ +si 0 alors +{ecrire(1); +} +sinon +{ecrire(0);} +} diff --git a/eval-partiel/input/eval5err.l b/eval-partiel/input/eval5err.l new file mode 100644 index 0000000..964acba --- /dev/null +++ b/eval-partiel/input/eval5err.l @@ -0,0 +1 @@ +entier ? diff --git a/eval-partiel/input/eval6.l b/eval-partiel/input/eval6.l new file mode 100644 index 0000000..01c44dc --- /dev/null +++ b/eval-partiel/input/eval6.l @@ -0,0 +1,11 @@ +entier $a[10], entier $b; +main() { + $a[0] = 10; + $b = 5; + ecrire( $a ); # erreur de type ou ecrit 10? + ecrire( $a + 1 ); # erreur de type ou ecrit 11? + ecrire( $b[0] ); # erreur de type ou ecrit 5? + ecrire( $a[10] ); # erreur de type ou ecrit 5? + retour 0; + ecrire( $b ); # ecrit 5 ou pas? +} diff --git a/eval-partiel/input/eval7.l b/eval-partiel/input/eval7.l new file mode 100644 index 0000000..e69de29 diff --git a/eval-partiel/input/eval8.l b/eval-partiel/input/eval8.l new file mode 100644 index 0000000..4f35eff --- /dev/null +++ b/eval-partiel/input/eval8.l @@ -0,0 +1,9 @@ +entier $a; +main() +{ +$a = 0; +tantque $a < 10 faire{ +ecrire($a); +$a = $a + 1; +} +} diff --git a/eval-partiel/input/expression.l b/eval-partiel/input/expression.l new file mode 100644 index 0000000..a33fb9e --- /dev/null +++ b/eval-partiel/input/expression.l @@ -0,0 +1,5 @@ +entier $a; +main() +{ +ecrire(5 * 2); +} diff --git a/eval-partiel/input/max.l b/eval-partiel/input/max.l new file mode 100644 index 0000000..ef3e9c8 --- /dev/null +++ b/eval-partiel/input/max.l @@ -0,0 +1,23 @@ +max( entier $a, entier $b ) +{ + si $a < $b alors { + retour $b; + } + retour $a; +} + +main() +entier $v_1, entier $v_2; +{ + $v_1 = lire(); + $v_2 = lire(); + si max( $v_1, $v_2 ) = $v_1 alors + { + ecrire( $v_1 ); + } + sinon + { + ecrire( $v_2 ); + } + +} diff --git a/eval-partiel/input/test1.l b/eval-partiel/input/test1.l new file mode 100644 index 0000000..058f2b5 --- /dev/null +++ b/eval-partiel/input/test1.l @@ -0,0 +1,8 @@ +entier $a; +main() +{ +pour $a=1; $a<10; $a = $a + 1; faire +{ +ecrire( $a ); +} +} diff --git a/eval-partiel/input/test1err.l b/eval-partiel/input/test1err.l new file mode 100644 index 0000000..e436203 --- /dev/null +++ b/eval-partiel/input/test1err.l @@ -0,0 +1,6 @@ +entier $i; +main() { + pour $i = 5; $i < 10; $i faire { + ecrire ( $i ); + } +} diff --git a/eval-partiel/input/test2.l b/eval-partiel/input/test2.l new file mode 100644 index 0000000..058f2b5 --- /dev/null +++ b/eval-partiel/input/test2.l @@ -0,0 +1,8 @@ +entier $a; +main() +{ +pour $a=1; $a<10; $a = $a + 1; faire +{ +ecrire( $a ); +} +} diff --git a/eval-partiel/input/test3.l b/eval-partiel/input/test3.l new file mode 100644 index 0000000..058f2b5 --- /dev/null +++ b/eval-partiel/input/test3.l @@ -0,0 +1,8 @@ +entier $a; +main() +{ +pour $a=1; $a<10; $a = $a + 1; faire +{ +ecrire( $a ); +} +} diff --git a/eval-partiel/input/tri.l b/eval-partiel/input/tri.l new file mode 100644 index 0000000..a39cba6 --- /dev/null +++ b/eval-partiel/input/tri.l @@ -0,0 +1,57 @@ +entier $tab[ 10 ]; + +initialiser() +{ + $tab[0] = 8; $tab[1] = 6; $tab[2] = 9; + $tab[3] = 9; $tab[4] = 4; $tab[5] = 2; + $tab[6] = 3; $tab[7] = 1; $tab[8] = 4; + $tab[9] = 5; +} + +afficher( entier $n ) +entier $i; +{ + $i = 0; + tantque $i < $n faire { + ecrire( $tab[ $i ] ); + $i = $i + 1; + } + ecrire( 0 ); # marqueur fin de tableau +} + +echanger( entier $i, entier $j ) +entier $temp; +{ + $temp = $tab[ $j ]; + $tab[ $j ] = $tab[ $i ]; + $tab[ $i ] = $temp; +} + +trier( entier $n ) +entier $echange, entier $j, entier $m; +{ + $m = $n; + $echange = 1; + tantque $echange = 1 faire + { + $echange = 0; + $j = 0; + tantque $j < $m - 1 faire + { + si $tab[ $j + 1 ] < $tab[ $j ] alors { + echanger( $j, $j + 1 ); + $echange = 1; + } + $j = $j + 1; + } + $m = $m - 1; + } +} + +main() +{ + initialiser(); + afficher( 10 ); + trier( 10 ); + afficher( 10 ); +} diff --git a/eval-partiel/main.css b/eval-partiel/main.css new file mode 100755 index 0000000..fed6e77 --- /dev/null +++ b/eval-partiel/main.css @@ -0,0 +1,196 @@ +body{ + font-family: "Trebuchet MS", arial, helvetica, sans-serif; + margin: 0; +} + +#header{ + color: #ffffff; + background-color: #c01010; + width: 100%; + height: 70px; +} + +#header h1{ + margin: 0; + font-size: 140%; + padding: 20px 0 0 20px; +} + +#header ul{ + margin: 0; + padding: 0; +} + +#lang_bar{ + list-style-type: none; +} + +#lang_bar li{ + float: right; +} + +#lang_bar a{ + color: #dddddd; + padding: 0 7px; + font-weight: bold; + font-size: 80%; +} + +#lang_bar a:hover{ + color: #dddddd; + background-color: #c01010; +} + +#main_menu{ + margin: 0; + padding: 0; + list-style-type: none; + clear: right; + width: 100%; + background-color: #330000; + height: 32px; +} + +#main_menu li{ + float: left; +} + +#main_menu a{ + float: left; + background-color: #dddddd; + padding: 5px 10px; + font-size: 90%; + font-style: italic; + font-weight: bold; + text-align: center; + color: #990000; + margin: 2px 1px; +} + +#main_menu a:hover{ + background-color: #c01010; + color: #ff0000; +} + +#main_menu a.active{ + background-color: #c01010; + color: #ffffff; +} + + +#links li{ + list-style-type: none; + color: #990000; + padding: 0; +} + +#links ul{ + margin: 0; + padding: 0; +} + +#links img{ + height: 40px; + border: 0; +} + +#links{ + border: solid 2px #FFA273; + margin: 5px; + text-align: center; + float: right; +} + +#links h1{ + font-size: 100%; + color: #a63800; + margin: 5px; +} + +a{ + text-decoration: none; + color: #c01010; +} + +#page_body a:hover{ + text-decoration: none; + color: #ff0000; +} + +#page_body p{ + color: #000000; +} + +#page_body{ + font-size: 90%; + margin: 10px 20px 0 40px; + +} + +#page_body h1{ + font-size: 130%; + margin: 15px 0 5px -30px; + color: #c01010; +} + +#page_body h2{ + font-size: 110%; + margin: 8px 0 5px -15px; + color: #c01010; +} + +#page_body li{ + margin: 5px 0 0 20px; +} + +#page_body ul{ + margin: 0; + padding: 5px 0 0 40px; +} + +#page_body li p{ + margin: 0; +} + +#page_body img.left{ + float: left; + margin: 5px 20px 5px 0; +} + +#page_body img.right{ + float: right; + margin: 5px 0 5px 20px; +} + +.codefrag{ + font-family: "courier", "sans"; + font-weight: bold; + margin: 0; + text-indent: 20pt; +} + +.indent1{ + text-indent: 40pt; +} + +.indent2{ + text-indent: 60pt; +} + +.indent3{ + text-indent: 80pt; +} + +.indent4{ + text-indent: 100pt; +} + +.indent5{ + text-indent: 180pt; +} + +.nobullet{ + list-style-type: none; +} + + diff --git a/eval-partiel/output/affect-err.synt.xml b/eval-partiel/output/affect-err.synt.xml new file mode 100644 index 0000000..011887f --- /dev/null +++ b/eval-partiel/output/affect-err.synt.xml @@ -0,0 +1,110 @@ + + + + + entier + $a + + + + + + + POINT_VIRGULE + + + + main + + PARENTHESE_OUVRANTE + + + PARENTHESE_FERMANTE + + + + + ACCOLADE_OUVRANTE + + + + + $a + + + + EGAL + + + + + + + + 5 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + + $a + + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + + ACCOLADE_FERMANTE + + + diff --git a/eval-partiel/output/affect.lex b/eval-partiel/output/affect.lex new file mode 100644 index 0000000..fb828db --- /dev/null +++ b/eval-partiel/output/affect.lex @@ -0,0 +1,18 @@ +entier mot_clef entier +$a id_variable $a +; symbole POINT_VIRGULE +main id_fonction main +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +{ symbole ACCOLADE_OUVRANTE +$a id_variable $a += symbole EGAL +1 nombre 1 +; symbole POINT_VIRGULE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +$a id_variable $a +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE + symbole FIN diff --git a/eval-partiel/output/affect.synt b/eval-partiel/output/affect.synt new file mode 100644 index 0000000..038df30 --- /dev/null +++ b/eval-partiel/output/affect.synt @@ -0,0 +1,113 @@ + + + + + entier + $a + + + + + + + POINT_VIRGULE + + + + main + + PARENTHESE_OUVRANTE + + + PARENTHESE_FERMANTE + + + + + ACCOLADE_OUVRANTE + + + + + $a + + + + EGAL + + + + + + + + 1 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + + $a + + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + + ACCOLADE_FERMANTE + + + + + + diff --git a/eval-partiel/output/boucle.lex b/eval-partiel/output/boucle.lex new file mode 100644 index 0000000..cbdea9f --- /dev/null +++ b/eval-partiel/output/boucle.lex @@ -0,0 +1,40 @@ +entier mot_clef entier +$i id_variable $i +, symbole VIRGULE +entier mot_clef entier +$carre id_variable $carre +; symbole POINT_VIRGULE +main id_fonction main +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +{ symbole ACCOLADE_OUVRANTE +$i id_variable $i += symbole EGAL +0 nombre 0 +; symbole POINT_VIRGULE +tantque mot_clef tantque +$i id_variable $i +< symbole INFERIEUR +10 nombre 10 +faire mot_clef faire +{ symbole ACCOLADE_OUVRANTE +$carre id_variable $carre += symbole EGAL +$i id_variable $i +* symbole FOIS +$i id_variable $i +; symbole POINT_VIRGULE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +$carre id_variable $carre +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +$i id_variable $i += symbole EGAL +$i id_variable $i ++ symbole PLUS +1 nombre 1 +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +} symbole ACCOLADE_FERMANTE + symbole FIN diff --git a/eval-partiel/output/boucle.synt b/eval-partiel/output/boucle.synt new file mode 100644 index 0000000..c3cf0f2 --- /dev/null +++ b/eval-partiel/output/boucle.synt @@ -0,0 +1,283 @@ + + + + + entier + $i + + + + + VIRGULE + + entier + $carre + + + + + + + + POINT_VIRGULE + + + + main + + PARENTHESE_OUVRANTE + + + PARENTHESE_FERMANTE + + + + + ACCOLADE_OUVRANTE + + + + + $i + + + + EGAL + + + + + + + + 0 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + tantque + + + + + + + + + $i + + + + + + + + + + + + INFERIEUR + + + + 10 + + + + + + + + + + + + + + + + + + + faire + + ACCOLADE_OUVRANTE + + + + + $carre + + + + EGAL + + + + + + + + + $i + + + + + + FOIS + + + $i + + + + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + + $carre + + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + + $i + + + + EGAL + + + + + + + + + $i + + + + + + + + + PLUS + + + 1 + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + + ACCOLADE_FERMANTE + + + + + + + + ACCOLADE_FERMANTE + + + + + + diff --git a/eval-partiel/output/eval1.lex b/eval-partiel/output/eval1.lex new file mode 100644 index 0000000..fbfdd45 --- /dev/null +++ b/eval-partiel/output/eval1.lex @@ -0,0 +1,100 @@ +add id_fonction add +( symbole PARENTHESE_OUVRANTE +entier mot_clef entier +$a id_variable $a +, symbole VIRGULE +entier mot_clef entier +$b id_variable $b +) symbole PARENTHESE_FERMANTE +{ symbole ACCOLADE_OUVRANTE +retour mot_clef retour +$a id_variable $a ++ symbole PLUS +$b id_variable $b +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +mult id_fonction mult +( symbole PARENTHESE_OUVRANTE +entier mot_clef entier +$a id_variable $a +, symbole VIRGULE +entier mot_clef entier +$b id_variable $b +) symbole PARENTHESE_FERMANTE +{ symbole ACCOLADE_OUVRANTE +retour mot_clef retour +$a id_variable $a +* symbole FOIS +$b id_variable $b +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +main id_fonction main +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +entier mot_clef entier +$a id_variable $a +, symbole VIRGULE +entier mot_clef entier +$b id_variable $b +, symbole VIRGULE +entier mot_clef entier +$op id_variable $op +; symbole POINT_VIRGULE +{ symbole ACCOLADE_OUVRANTE +$a id_variable $a += symbole EGAL +lire mot_clef lire +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +$b id_variable $b += symbole EGAL +lire mot_clef lire +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +$op id_variable $op += symbole EGAL +lire mot_clef lire +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +si mot_clef si +$op id_variable $op += symbole EGAL +1 nombre 1 +alors mot_clef alors +{ symbole ACCOLADE_OUVRANTE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +add id_fonction add +( symbole PARENTHESE_OUVRANTE +$a id_variable $a +, symbole VIRGULE +$b id_variable $b +) symbole PARENTHESE_FERMANTE +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +sinon mot_clef sinon +{ symbole ACCOLADE_OUVRANTE +si mot_clef si +$op id_variable $op += symbole EGAL +2 nombre 2 +alors mot_clef alors +{ symbole ACCOLADE_OUVRANTE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +mult id_fonction mult +( symbole PARENTHESE_OUVRANTE +$a id_variable $a +, symbole VIRGULE +$b id_variable $b +) symbole PARENTHESE_FERMANTE +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +} symbole ACCOLADE_FERMANTE +} symbole ACCOLADE_FERMANTE + symbole FIN diff --git a/eval-partiel/output/eval1.synt b/eval-partiel/output/eval1.synt new file mode 100644 index 0000000..d0afcbb --- /dev/null +++ b/eval-partiel/output/eval1.synt @@ -0,0 +1,681 @@ + + + + + + add + + PARENTHESE_OUVRANTE + + + + entier + $a + + + + + VIRGULE + + entier + $b + + + + + + + + + PARENTHESE_FERMANTE + + + + + ACCOLADE_OUVRANTE + + + + retour + + + + + + + + + $a + + + + + + + + + PLUS + + + + $b + + + + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + ACCOLADE_FERMANTE + + + + + mult + + PARENTHESE_OUVRANTE + + + + entier + $a + + + + + VIRGULE + + entier + $b + + + + + + + + + PARENTHESE_FERMANTE + + + + + ACCOLADE_OUVRANTE + + + + retour + + + + + + + + + $a + + + + + + FOIS + + + $b + + + + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + ACCOLADE_FERMANTE + + + + + main + + PARENTHESE_OUVRANTE + + + PARENTHESE_FERMANTE + + + + + entier + $a + + + + + VIRGULE + + entier + $b + + + + + VIRGULE + + entier + $op + + + + + + + + + POINT_VIRGULE + + + ACCOLADE_OUVRANTE + + + + + $a + + + + EGAL + + + + + + + + lire + PARENTHESE_OUVRANTE + PARENTHESE_FERMANTE + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + $b + + + + EGAL + + + + + + + + lire + PARENTHESE_OUVRANTE + PARENTHESE_FERMANTE + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + $op + + + + EGAL + + + + + + + + lire + PARENTHESE_OUVRANTE + PARENTHESE_FERMANTE + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + si + + + + + + + + + $op + + + + + + + + + + + + EGAL + + + + 1 + + + + + + + + + + + + + + + + + + + alors + + ACCOLADE_OUVRANTE + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + + add + PARENTHESE_OUVRANTE + + + + + + + + + + $a + + + + + + + + + + + + + + + + + + + + + + VIRGULE + + + + + + + + + $b + + + + + + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + ACCOLADE_FERMANTE + + + sinon + + ACCOLADE_OUVRANTE + + + + si + + + + + + + + + $op + + + + + + + + + + + + EGAL + + + + 2 + + + + + + + + + + + + + + + + + + + alors + + ACCOLADE_OUVRANTE + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + + mult + PARENTHESE_OUVRANTE + + + + + + + + + + $a + + + + + + + + + + + + + + + + + + + + + + VIRGULE + + + + + + + + + $b + + + + + + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + ACCOLADE_FERMANTE + + + + + + + + + ACCOLADE_FERMANTE + + + + + + + + + + + ACCOLADE_FERMANTE + + + + + + + + diff --git a/eval-partiel/output/eval1err.synt.xml b/eval-partiel/output/eval1err.synt.xml new file mode 100644 index 0000000..5553b61 --- /dev/null +++ b/eval-partiel/output/eval1err.synt.xml @@ -0,0 +1 @@ + diff --git a/eval-partiel/output/eval2.lex b/eval-partiel/output/eval2.lex new file mode 100644 index 0000000..40e933b --- /dev/null +++ b/eval-partiel/output/eval2.lex @@ -0,0 +1,51 @@ +fibo id_fonction fibo +( symbole PARENTHESE_OUVRANTE +entier mot_clef entier +$n id_variable $n +) symbole PARENTHESE_FERMANTE +{ symbole ACCOLADE_OUVRANTE +si mot_clef si +$n id_variable $n +< symbole INFERIEUR +2 nombre 2 +alors mot_clef alors +{ symbole ACCOLADE_OUVRANTE +retour mot_clef retour +1 nombre 1 +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +sinon mot_clef sinon +{ symbole ACCOLADE_OUVRANTE +retour mot_clef retour +fibo id_fonction fibo +( symbole PARENTHESE_OUVRANTE +$n id_variable $n +- symbole MOINS +1 nombre 1 +) symbole PARENTHESE_FERMANTE ++ symbole PLUS +fibo id_fonction fibo +( symbole PARENTHESE_OUVRANTE +$n id_variable $n +- symbole MOINS +2 nombre 2 +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +} symbole ACCOLADE_FERMANTE +main id_fonction main +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +{ symbole ACCOLADE_OUVRANTE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +fibo id_fonction fibo +( symbole PARENTHESE_OUVRANTE +lire mot_clef lire +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +) symbole PARENTHESE_FERMANTE +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE + symbole FIN diff --git a/eval-partiel/output/eval2.synt b/eval-partiel/output/eval2.synt new file mode 100644 index 0000000..1ca6407 --- /dev/null +++ b/eval-partiel/output/eval2.synt @@ -0,0 +1,360 @@ + + + + + + fibo + + PARENTHESE_OUVRANTE + + + + entier + $n + + + + + + + + PARENTHESE_FERMANTE + + + + + ACCOLADE_OUVRANTE + + + + si + + + + + + + + + $n + + + + + + + + + + + + INFERIEUR + + + + 2 + + + + + + + + + + + + + + + + + + + alors + + ACCOLADE_OUVRANTE + + + + retour + + + + + + + + 1 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + ACCOLADE_FERMANTE + + + sinon + + ACCOLADE_OUVRANTE + + + + retour + + + + + + + + + fibo + PARENTHESE_OUVRANTE + + + + + + + + + + $n + + + + + + + + + MOINS + + + 1 + + + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + + + + + + + PLUS + + + + fibo + PARENTHESE_OUVRANTE + + + + + + + + + + $n + + + + + + + + + MOINS + + + 2 + + + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + ACCOLADE_FERMANTE + + + + + + + + ACCOLADE_FERMANTE + + + + + main + + PARENTHESE_OUVRANTE + + + PARENTHESE_FERMANTE + + + + + ACCOLADE_OUVRANTE + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + + fibo + PARENTHESE_OUVRANTE + + + + + + + + + lire + PARENTHESE_OUVRANTE + PARENTHESE_FERMANTE + + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + ACCOLADE_FERMANTE + + + + + + + diff --git a/eval-partiel/output/eval2err.synt.xml b/eval-partiel/output/eval2err.synt.xml new file mode 100644 index 0000000..011887f --- /dev/null +++ b/eval-partiel/output/eval2err.synt.xml @@ -0,0 +1,110 @@ + + + + + entier + $a + + + + + + + POINT_VIRGULE + + + + main + + PARENTHESE_OUVRANTE + + + PARENTHESE_FERMANTE + + + + + ACCOLADE_OUVRANTE + + + + + $a + + + + EGAL + + + + + + + + 5 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + + $a + + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + + ACCOLADE_FERMANTE + + + diff --git a/eval-partiel/output/eval3.lex b/eval-partiel/output/eval3.lex new file mode 100644 index 0000000..53881f7 --- /dev/null +++ b/eval-partiel/output/eval3.lex @@ -0,0 +1,91 @@ +entier mot_clef entier +$i id_variable $i +, symbole VIRGULE +entier mot_clef entier +$j id_variable $j +, symbole VIRGULE +entier mot_clef entier +$k id_variable $k +, symbole VIRGULE +entier mot_clef entier +$somme id_variable $somme +; symbole POINT_VIRGULE +main id_fonction main +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +{ symbole ACCOLADE_OUVRANTE +$somme id_variable $somme += symbole EGAL +0 nombre 0 +; symbole POINT_VIRGULE +pour mot_clef pour +$i id_variable $i += symbole EGAL +0 nombre 0 +; symbole POINT_VIRGULE +$i id_variable $i +< symbole INFERIEUR +10 nombre 10 +; symbole POINT_VIRGULE +$i id_variable $i += symbole EGAL +$i id_variable $i ++ symbole PLUS +1 nombre 1 +; symbole POINT_VIRGULE +faire mot_clef faire +{ symbole ACCOLADE_OUVRANTE +pour mot_clef pour +$j id_variable $j += symbole EGAL +0 nombre 0 +; symbole POINT_VIRGULE +$j id_variable $j +< symbole INFERIEUR +$i id_variable $i +; symbole POINT_VIRGULE +$j id_variable $j += symbole EGAL +$j id_variable $j ++ symbole PLUS +1 nombre 1 +; symbole POINT_VIRGULE +faire mot_clef faire +{ symbole ACCOLADE_OUVRANTE +pour mot_clef pour +$k id_variable $k += symbole EGAL +0 nombre 0 +; symbole POINT_VIRGULE +$k id_variable $k +< symbole INFERIEUR +$j id_variable $j +; symbole POINT_VIRGULE +$k id_variable $k += symbole EGAL +$k id_variable $k ++ symbole PLUS +1 nombre 1 +; symbole POINT_VIRGULE +faire mot_clef faire +{ symbole ACCOLADE_OUVRANTE +$somme id_variable $somme += symbole EGAL +$somme id_variable $somme ++ symbole PLUS +$i id_variable $i ++ symbole PLUS +$j id_variable $j ++ symbole PLUS +$k id_variable $k +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +} symbole ACCOLADE_FERMANTE +} symbole ACCOLADE_FERMANTE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +$somme id_variable $somme +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE + symbole FIN diff --git a/eval-partiel/output/eval3.synt b/eval-partiel/output/eval3.synt new file mode 100644 index 0000000..295b490 --- /dev/null +++ b/eval-partiel/output/eval3.synt @@ -0,0 +1,652 @@ + + + + + entier + $i + + + + + VIRGULE + + entier + $j + + + + + VIRGULE + + entier + $k + + + + + VIRGULE + + entier + $somme + + + + + + + + + + POINT_VIRGULE + + + + main + + PARENTHESE_OUVRANTE + + + PARENTHESE_FERMANTE + + + + + ACCOLADE_OUVRANTE + + + + + $somme + + + + EGAL + + + + + + + + 0 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + pour + + + $i + + + + EGAL + + + + + + + + 0 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + + + + $i + + + + + + + + + + + + INFERIEUR + + + + 10 + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + $i + + + + EGAL + + + + + + + + + $i + + + + + + + + + PLUS + + + 1 + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + faire + + ACCOLADE_OUVRANTE + + + + pour + + + $j + + + + EGAL + + + + + + + + 0 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + + + + $j + + + + + + + + + + + + INFERIEUR + + + + + $i + + + + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + $j + + + + EGAL + + + + + + + + + $j + + + + + + + + + PLUS + + + 1 + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + faire + + ACCOLADE_OUVRANTE + + + + pour + + + $k + + + + EGAL + + + + + + + + 0 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + + + + $k + + + + + + + + + + + + INFERIEUR + + + + + $j + + + + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + $k + + + + EGAL + + + + + + + + + $k + + + + + + + + + PLUS + + + 1 + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + faire + + ACCOLADE_OUVRANTE + + + + + $somme + + + + EGAL + + + + + + + + + $somme + + + + + + + + + PLUS + + + + $i + + + + + + + + + PLUS + + + + $j + + + + + + + + + PLUS + + + + $k + + + + + + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + ACCOLADE_FERMANTE + + + + + + + ACCOLADE_FERMANTE + + + + + + + ACCOLADE_FERMANTE + + + + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + + $somme + + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + + + ACCOLADE_FERMANTE + + + + + + diff --git a/eval-partiel/output/eval3err.synt.xml b/eval-partiel/output/eval3err.synt.xml new file mode 100644 index 0000000..cbfea55 --- /dev/null +++ b/eval-partiel/output/eval3err.synt.xml @@ -0,0 +1,28 @@ + + + + + entier + $i + + + + + + + POINT_VIRGULE + + + + main + + PARENTHESE_OUVRANTE + + + PARENTHESE_FERMANTE + + + + + ACCOLADE_OUVRANTE + diff --git a/eval-partiel/output/eval4.lex b/eval-partiel/output/eval4.lex new file mode 100644 index 0000000..a51d4f1 --- /dev/null +++ b/eval-partiel/output/eval4.lex @@ -0,0 +1,19 @@ +entier mot_clef entier +$a id_variable $a +; symbole POINT_VIRGULE +main id_fonction main +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +{ symbole ACCOLADE_OUVRANTE +si mot_clef si +1 nombre 1 +alors mot_clef alors +{ symbole ACCOLADE_OUVRANTE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +1 nombre 1 +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +} symbole ACCOLADE_FERMANTE + symbole FIN diff --git a/eval-partiel/output/eval4.synt b/eval-partiel/output/eval4.synt new file mode 100644 index 0000000..c855a07 --- /dev/null +++ b/eval-partiel/output/eval4.synt @@ -0,0 +1,112 @@ + + + + + entier + $a + + + + + + + POINT_VIRGULE + + + + main + + PARENTHESE_OUVRANTE + + + PARENTHESE_FERMANTE + + + + + ACCOLADE_OUVRANTE + + + + si + + + + + + + + 1 + + + + + + + + + + + + + + + + + + alors + + ACCOLADE_OUVRANTE + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + 1 + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + ACCOLADE_FERMANTE + + + + + + + + + ACCOLADE_FERMANTE + + + + + + diff --git a/eval-partiel/output/eval4err.synt.xml b/eval-partiel/output/eval4err.synt.xml new file mode 100644 index 0000000..fa79479 --- /dev/null +++ b/eval-partiel/output/eval4err.synt.xml @@ -0,0 +1,5 @@ + + + + + entier diff --git a/eval-partiel/output/eval5.lex b/eval-partiel/output/eval5.lex new file mode 100644 index 0000000..a40b0de --- /dev/null +++ b/eval-partiel/output/eval5.lex @@ -0,0 +1,27 @@ +entier mot_clef entier +$a id_variable $a +; symbole POINT_VIRGULE +main id_fonction main +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +{ symbole ACCOLADE_OUVRANTE +si mot_clef si +0 nombre 0 +alors mot_clef alors +{ symbole ACCOLADE_OUVRANTE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +1 nombre 1 +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +sinon mot_clef sinon +{ symbole ACCOLADE_OUVRANTE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +0 nombre 0 +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +} symbole ACCOLADE_FERMANTE + symbole FIN diff --git a/eval-partiel/output/eval5.synt b/eval-partiel/output/eval5.synt new file mode 100644 index 0000000..f049cf1 --- /dev/null +++ b/eval-partiel/output/eval5.synt @@ -0,0 +1,154 @@ + + + + + entier + $a + + + + + + + POINT_VIRGULE + + + + main + + PARENTHESE_OUVRANTE + + + PARENTHESE_FERMANTE + + + + + ACCOLADE_OUVRANTE + + + + si + + + + + + + + 0 + + + + + + + + + + + + + + + + + + alors + + ACCOLADE_OUVRANTE + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + 1 + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + ACCOLADE_FERMANTE + + + sinon + + ACCOLADE_OUVRANTE + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + 0 + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + ACCOLADE_FERMANTE + + + + + + + + ACCOLADE_FERMANTE + + + + + + diff --git a/eval-partiel/output/eval5err.synt.xml b/eval-partiel/output/eval5err.synt.xml new file mode 100644 index 0000000..fa79479 --- /dev/null +++ b/eval-partiel/output/eval5err.synt.xml @@ -0,0 +1,5 @@ + + + + + entier diff --git a/eval-partiel/output/eval6.lex b/eval-partiel/output/eval6.lex new file mode 100644 index 0000000..df16673 --- /dev/null +++ b/eval-partiel/output/eval6.lex @@ -0,0 +1,62 @@ +entier mot_clef entier +$a id_variable $a +[ symbole CROCHET_OUVRANT +10 nombre 10 +] symbole CROCHET_FERMANT +, symbole VIRGULE +entier mot_clef entier +$b id_variable $b +; symbole POINT_VIRGULE +main id_fonction main +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +{ symbole ACCOLADE_OUVRANTE +$a id_variable $a +[ symbole CROCHET_OUVRANT +0 nombre 0 +] symbole CROCHET_FERMANT += symbole EGAL +10 nombre 10 +; symbole POINT_VIRGULE +$b id_variable $b += symbole EGAL +5 nombre 5 +; symbole POINT_VIRGULE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +$a id_variable $a +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +$a id_variable $a ++ symbole PLUS +1 nombre 1 +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +$b id_variable $b +[ symbole CROCHET_OUVRANT +0 nombre 0 +] symbole CROCHET_FERMANT +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +$a id_variable $a +[ symbole CROCHET_OUVRANT +10 nombre 10 +] symbole CROCHET_FERMANT +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +retour mot_clef retour +0 nombre 0 +; symbole POINT_VIRGULE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +$b id_variable $b +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE + symbole FIN diff --git a/eval-partiel/output/eval6.synt b/eval-partiel/output/eval6.synt new file mode 100644 index 0000000..0eeef81 --- /dev/null +++ b/eval-partiel/output/eval6.synt @@ -0,0 +1,443 @@ + + + + + entier + $a + + CROCHET_OUVRANT + 10 + CROCHET_FERMANT + + + + VIRGULE + + entier + $b + + + + + + + + POINT_VIRGULE + + + + main + + PARENTHESE_OUVRANTE + + + PARENTHESE_FERMANTE + + + + + ACCOLADE_OUVRANTE + + + + + $a + + CROCHET_OUVRANT + + + + + + + + 0 + + + + + + + + + + + + + + + + + + CROCHET_FERMANT + + + EGAL + + + + + + + + 10 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + $b + + + + EGAL + + + + + + + + 5 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + + $a + + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + + $a + + + + + + + + + PLUS + + + 1 + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + + $b + + CROCHET_OUVRANT + + + + + + + + 0 + + + + + + + + + + + + + + + + + + CROCHET_FERMANT + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + + $a + + CROCHET_OUVRANT + + + + + + + + 10 + + + + + + + + + + + + + + + + + + CROCHET_FERMANT + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + retour + + + + + + + + 0 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + + $b + + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + + + + + + + + ACCOLADE_FERMANTE + + + + + + diff --git a/eval-partiel/output/eval7.lex b/eval-partiel/output/eval7.lex new file mode 100644 index 0000000..2fb15f9 --- /dev/null +++ b/eval-partiel/output/eval7.lex @@ -0,0 +1 @@ + symbole FIN diff --git a/eval-partiel/output/eval7.synt b/eval-partiel/output/eval7.synt new file mode 100644 index 0000000..56784dd --- /dev/null +++ b/eval-partiel/output/eval7.synt @@ -0,0 +1,6 @@ + + + + + + diff --git a/eval-partiel/output/eval8.lex b/eval-partiel/output/eval8.lex new file mode 100644 index 0000000..fb449a8 --- /dev/null +++ b/eval-partiel/output/eval8.lex @@ -0,0 +1,31 @@ +entier mot_clef entier +$a id_variable $a +; symbole POINT_VIRGULE +main id_fonction main +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +{ symbole ACCOLADE_OUVRANTE +$a id_variable $a += symbole EGAL +0 nombre 0 +; symbole POINT_VIRGULE +tantque mot_clef tantque +$a id_variable $a +< symbole INFERIEUR +10 nombre 10 +faire mot_clef faire +{ symbole ACCOLADE_OUVRANTE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +$a id_variable $a +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +$a id_variable $a += symbole EGAL +$a id_variable $a ++ symbole PLUS +1 nombre 1 +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +} symbole ACCOLADE_FERMANTE + symbole FIN diff --git a/eval-partiel/output/eval8.synt b/eval-partiel/output/eval8.synt new file mode 100644 index 0000000..812c711 --- /dev/null +++ b/eval-partiel/output/eval8.synt @@ -0,0 +1,222 @@ + + + + + entier + $a + + + + + + + POINT_VIRGULE + + + + main + + PARENTHESE_OUVRANTE + + + PARENTHESE_FERMANTE + + + + + ACCOLADE_OUVRANTE + + + + + $a + + + + EGAL + + + + + + + + 0 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + tantque + + + + + + + + + $a + + + + + + + + + + + + INFERIEUR + + + + 10 + + + + + + + + + + + + + + + + + + + faire + + ACCOLADE_OUVRANTE + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + + $a + + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + + $a + + + + EGAL + + + + + + + + + $a + + + + + + + + + PLUS + + + 1 + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + ACCOLADE_FERMANTE + + + + + + + + ACCOLADE_FERMANTE + + + + + + diff --git a/eval-partiel/output/expression.lex b/eval-partiel/output/expression.lex new file mode 100644 index 0000000..a569a71 --- /dev/null +++ b/eval-partiel/output/expression.lex @@ -0,0 +1,16 @@ +entier mot_clef entier +$a id_variable $a +; symbole POINT_VIRGULE +main id_fonction main +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +{ symbole ACCOLADE_OUVRANTE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +5 nombre 5 +* symbole FOIS +2 nombre 2 +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE + symbole FIN diff --git a/eval-partiel/output/expression.synt b/eval-partiel/output/expression.synt new file mode 100644 index 0000000..4d058f0 --- /dev/null +++ b/eval-partiel/output/expression.synt @@ -0,0 +1,77 @@ + + + + + entier + $a + + + + + + + POINT_VIRGULE + + + + main + + PARENTHESE_OUVRANTE + + + PARENTHESE_FERMANTE + + + + + ACCOLADE_OUVRANTE + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + 5 + + + FOIS + + 2 + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + ACCOLADE_FERMANTE + + + + + + diff --git a/eval-partiel/output/max.lex b/eval-partiel/output/max.lex new file mode 100644 index 0000000..5b96821 --- /dev/null +++ b/eval-partiel/output/max.lex @@ -0,0 +1,72 @@ +max id_fonction max +( symbole PARENTHESE_OUVRANTE +entier mot_clef entier +$a id_variable $a +, symbole VIRGULE +entier mot_clef entier +$b id_variable $b +) symbole PARENTHESE_FERMANTE +{ symbole ACCOLADE_OUVRANTE +si mot_clef si +$a id_variable $a +< symbole INFERIEUR +$b id_variable $b +alors mot_clef alors +{ symbole ACCOLADE_OUVRANTE +retour mot_clef retour +$b id_variable $b +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +retour mot_clef retour +$a id_variable $a +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +main id_fonction main +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +entier mot_clef entier +$v_1 id_variable $v_1 +, symbole VIRGULE +entier mot_clef entier +$v_2 id_variable $v_2 +; symbole POINT_VIRGULE +{ symbole ACCOLADE_OUVRANTE +$v_1 id_variable $v_1 += symbole EGAL +lire mot_clef lire +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +$v_2 id_variable $v_2 += symbole EGAL +lire mot_clef lire +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +si mot_clef si +max id_fonction max +( symbole PARENTHESE_OUVRANTE +$v_1 id_variable $v_1 +, symbole VIRGULE +$v_2 id_variable $v_2 +) symbole PARENTHESE_FERMANTE += symbole EGAL +$v_1 id_variable $v_1 +alors mot_clef alors +{ symbole ACCOLADE_OUVRANTE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +$v_1 id_variable $v_1 +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +sinon mot_clef sinon +{ symbole ACCOLADE_OUVRANTE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +$v_2 id_variable $v_2 +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +} symbole ACCOLADE_FERMANTE + symbole FIN diff --git a/eval-partiel/output/max.synt b/eval-partiel/output/max.synt new file mode 100644 index 0000000..08f06d7 --- /dev/null +++ b/eval-partiel/output/max.synt @@ -0,0 +1,513 @@ + + + + + + max + + PARENTHESE_OUVRANTE + + + + entier + $a + + + + + VIRGULE + + entier + $b + + + + + + + + + PARENTHESE_FERMANTE + + + + + ACCOLADE_OUVRANTE + + + + si + + + + + + + + + $a + + + + + + + + + + + + INFERIEUR + + + + + $b + + + + + + + + + + + + + + + + + + + + + + alors + + ACCOLADE_OUVRANTE + + + + retour + + + + + + + + + $b + + + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + ACCOLADE_FERMANTE + + + + + + + + + retour + + + + + + + + + $a + + + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + ACCOLADE_FERMANTE + + + + + main + + PARENTHESE_OUVRANTE + + + PARENTHESE_FERMANTE + + + + + entier + $v_1 + + + + + VIRGULE + + entier + $v_2 + + + + + + + + POINT_VIRGULE + + + ACCOLADE_OUVRANTE + + + + + $v_1 + + + + EGAL + + + + + + + + lire + PARENTHESE_OUVRANTE + PARENTHESE_FERMANTE + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + $v_2 + + + + EGAL + + + + + + + + lire + PARENTHESE_OUVRANTE + PARENTHESE_FERMANTE + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + si + + + + + + + + + max + PARENTHESE_OUVRANTE + + + + + + + + + + $v_1 + + + + + + + + + + + + + + + + + + + + + + VIRGULE + + + + + + + + + $v_2 + + + + + + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + + + + + + + + + + EGAL + + + + + $v_1 + + + + + + + + + + + + + + + + + + + + + + alors + + ACCOLADE_OUVRANTE + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + + $v_1 + + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + ACCOLADE_FERMANTE + + + sinon + + ACCOLADE_OUVRANTE + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + + $v_2 + + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + ACCOLADE_FERMANTE + + + + + + + + + + ACCOLADE_FERMANTE + + + + + + + diff --git a/eval-partiel/output/tri.lex b/eval-partiel/output/tri.lex new file mode 100644 index 0000000..457125e --- /dev/null +++ b/eval-partiel/output/tri.lex @@ -0,0 +1,271 @@ +entier mot_clef entier +$tab id_variable $tab +[ symbole CROCHET_OUVRANT +10 nombre 10 +] symbole CROCHET_FERMANT +; symbole POINT_VIRGULE +initialiser id_fonction initialiser +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +{ symbole ACCOLADE_OUVRANTE +$tab id_variable $tab +[ symbole CROCHET_OUVRANT +0 nombre 0 +] symbole CROCHET_FERMANT += symbole EGAL +8 nombre 8 +; symbole POINT_VIRGULE +$tab id_variable $tab +[ symbole CROCHET_OUVRANT +1 nombre 1 +] symbole CROCHET_FERMANT += symbole EGAL +6 nombre 6 +; symbole POINT_VIRGULE +$tab id_variable $tab +[ symbole CROCHET_OUVRANT +2 nombre 2 +] symbole CROCHET_FERMANT += symbole EGAL +9 nombre 9 +; symbole POINT_VIRGULE +$tab id_variable $tab +[ symbole CROCHET_OUVRANT +3 nombre 3 +] symbole CROCHET_FERMANT += symbole EGAL +9 nombre 9 +; symbole POINT_VIRGULE +$tab id_variable $tab +[ symbole CROCHET_OUVRANT +4 nombre 4 +] symbole CROCHET_FERMANT += symbole EGAL +4 nombre 4 +; symbole POINT_VIRGULE +$tab id_variable $tab +[ symbole CROCHET_OUVRANT +5 nombre 5 +] symbole CROCHET_FERMANT += symbole EGAL +2 nombre 2 +; symbole POINT_VIRGULE +$tab id_variable $tab +[ symbole CROCHET_OUVRANT +6 nombre 6 +] symbole CROCHET_FERMANT += symbole EGAL +3 nombre 3 +; symbole POINT_VIRGULE +$tab id_variable $tab +[ symbole CROCHET_OUVRANT +7 nombre 7 +] symbole CROCHET_FERMANT += symbole EGAL +1 nombre 1 +; symbole POINT_VIRGULE +$tab id_variable $tab +[ symbole CROCHET_OUVRANT +8 nombre 8 +] symbole CROCHET_FERMANT += symbole EGAL +4 nombre 4 +; symbole POINT_VIRGULE +$tab id_variable $tab +[ symbole CROCHET_OUVRANT +9 nombre 9 +] symbole CROCHET_FERMANT += symbole EGAL +5 nombre 5 +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +afficher id_fonction afficher +( symbole PARENTHESE_OUVRANTE +entier mot_clef entier +$n id_variable $n +) symbole PARENTHESE_FERMANTE +entier mot_clef entier +$i id_variable $i +; symbole POINT_VIRGULE +{ symbole ACCOLADE_OUVRANTE +$i id_variable $i += symbole EGAL +0 nombre 0 +; symbole POINT_VIRGULE +tantque mot_clef tantque +$i id_variable $i +< symbole INFERIEUR +$n id_variable $n +faire mot_clef faire +{ symbole ACCOLADE_OUVRANTE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +$tab id_variable $tab +[ symbole CROCHET_OUVRANT +$i id_variable $i +] symbole CROCHET_FERMANT +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +$i id_variable $i += symbole EGAL +$i id_variable $i ++ symbole PLUS +1 nombre 1 +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +0 nombre 0 +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +echanger id_fonction echanger +( symbole PARENTHESE_OUVRANTE +entier mot_clef entier +$i id_variable $i +, symbole VIRGULE +entier mot_clef entier +$j id_variable $j +) symbole PARENTHESE_FERMANTE +entier mot_clef entier +$temp id_variable $temp +; symbole POINT_VIRGULE +{ symbole ACCOLADE_OUVRANTE +$temp id_variable $temp += symbole EGAL +$tab id_variable $tab +[ symbole CROCHET_OUVRANT +$j id_variable $j +] symbole CROCHET_FERMANT +; symbole POINT_VIRGULE +$tab id_variable $tab +[ symbole CROCHET_OUVRANT +$j id_variable $j +] symbole CROCHET_FERMANT += symbole EGAL +$tab id_variable $tab +[ symbole CROCHET_OUVRANT +$i id_variable $i +] symbole CROCHET_FERMANT +; symbole POINT_VIRGULE +$tab id_variable $tab +[ symbole CROCHET_OUVRANT +$i id_variable $i +] symbole CROCHET_FERMANT += symbole EGAL +$temp id_variable $temp +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +trier id_fonction trier +( symbole PARENTHESE_OUVRANTE +entier mot_clef entier +$n id_variable $n +) symbole PARENTHESE_FERMANTE +entier mot_clef entier +$echange id_variable $echange +, symbole VIRGULE +entier mot_clef entier +$j id_variable $j +, symbole VIRGULE +entier mot_clef entier +$m id_variable $m +; symbole POINT_VIRGULE +{ symbole ACCOLADE_OUVRANTE +$m id_variable $m += symbole EGAL +$n id_variable $n +; symbole POINT_VIRGULE +$echange id_variable $echange += symbole EGAL +1 nombre 1 +; symbole POINT_VIRGULE +tantque mot_clef tantque +$echange id_variable $echange += symbole EGAL +1 nombre 1 +faire mot_clef faire +{ symbole ACCOLADE_OUVRANTE +$echange id_variable $echange += symbole EGAL +0 nombre 0 +; symbole POINT_VIRGULE +$j id_variable $j += symbole EGAL +0 nombre 0 +; symbole POINT_VIRGULE +tantque mot_clef tantque +$j id_variable $j +< symbole INFERIEUR +$m id_variable $m +- symbole MOINS +1 nombre 1 +faire mot_clef faire +{ symbole ACCOLADE_OUVRANTE +si mot_clef si +$tab id_variable $tab +[ symbole CROCHET_OUVRANT +$j id_variable $j ++ symbole PLUS +1 nombre 1 +] symbole CROCHET_FERMANT +< symbole INFERIEUR +$tab id_variable $tab +[ symbole CROCHET_OUVRANT +$j id_variable $j +] symbole CROCHET_FERMANT +alors mot_clef alors +{ symbole ACCOLADE_OUVRANTE +echanger id_fonction echanger +( symbole PARENTHESE_OUVRANTE +$j id_variable $j +, symbole VIRGULE +$j id_variable $j ++ symbole PLUS +1 nombre 1 +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +$echange id_variable $echange += symbole EGAL +1 nombre 1 +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +$j id_variable $j += symbole EGAL +$j id_variable $j ++ symbole PLUS +1 nombre 1 +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +$m id_variable $m += symbole EGAL +$m id_variable $m +- symbole MOINS +1 nombre 1 +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +} symbole ACCOLADE_FERMANTE +main id_fonction main +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +{ symbole ACCOLADE_OUVRANTE +initialiser id_fonction initialiser +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +afficher id_fonction afficher +( symbole PARENTHESE_OUVRANTE +10 nombre 10 +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +trier id_fonction trier +( symbole PARENTHESE_OUVRANTE +10 nombre 10 +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +afficher id_fonction afficher +( symbole PARENTHESE_OUVRANTE +10 nombre 10 +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE + symbole FIN diff --git a/eval-partiel/output/tri.synt b/eval-partiel/output/tri.synt new file mode 100644 index 0000000..77a518b --- /dev/null +++ b/eval-partiel/output/tri.synt @@ -0,0 +1,2146 @@ + + + + + entier + $tab + + CROCHET_OUVRANT + 10 + CROCHET_FERMANT + + + + + + POINT_VIRGULE + + + + initialiser + + PARENTHESE_OUVRANTE + + + PARENTHESE_FERMANTE + + + + + ACCOLADE_OUVRANTE + + + + + $tab + + CROCHET_OUVRANT + + + + + + + + 0 + + + + + + + + + + + + + + + + + + CROCHET_FERMANT + + + EGAL + + + + + + + + 8 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + $tab + + CROCHET_OUVRANT + + + + + + + + 1 + + + + + + + + + + + + + + + + + + CROCHET_FERMANT + + + EGAL + + + + + + + + 6 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + $tab + + CROCHET_OUVRANT + + + + + + + + 2 + + + + + + + + + + + + + + + + + + CROCHET_FERMANT + + + EGAL + + + + + + + + 9 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + $tab + + CROCHET_OUVRANT + + + + + + + + 3 + + + + + + + + + + + + + + + + + + CROCHET_FERMANT + + + EGAL + + + + + + + + 9 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + $tab + + CROCHET_OUVRANT + + + + + + + + 4 + + + + + + + + + + + + + + + + + + CROCHET_FERMANT + + + EGAL + + + + + + + + 4 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + $tab + + CROCHET_OUVRANT + + + + + + + + 5 + + + + + + + + + + + + + + + + + + CROCHET_FERMANT + + + EGAL + + + + + + + + 2 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + $tab + + CROCHET_OUVRANT + + + + + + + + 6 + + + + + + + + + + + + + + + + + + CROCHET_FERMANT + + + EGAL + + + + + + + + 3 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + $tab + + CROCHET_OUVRANT + + + + + + + + 7 + + + + + + + + + + + + + + + + + + CROCHET_FERMANT + + + EGAL + + + + + + + + 1 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + $tab + + CROCHET_OUVRANT + + + + + + + + 8 + + + + + + + + + + + + + + + + + + CROCHET_FERMANT + + + EGAL + + + + + + + + 4 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + $tab + + CROCHET_OUVRANT + + + + + + + + 9 + + + + + + + + + + + + + + + + + + CROCHET_FERMANT + + + EGAL + + + + + + + + 5 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + + + + + + + + + ACCOLADE_FERMANTE + + + + + afficher + + PARENTHESE_OUVRANTE + + + + entier + $n + + + + + + + + PARENTHESE_FERMANTE + + + + + entier + $i + + + + + + + POINT_VIRGULE + + + ACCOLADE_OUVRANTE + + + + + $i + + + + EGAL + + + + + + + + 0 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + tantque + + + + + + + + + $i + + + + + + + + + + + + INFERIEUR + + + + + $n + + + + + + + + + + + + + + + + + + + + + + faire + + ACCOLADE_OUVRANTE + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + + $tab + + CROCHET_OUVRANT + + + + + + + + + $i + + + + + + + + + + + + + + + + + + + + + CROCHET_FERMANT + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + + $i + + + + EGAL + + + + + + + + + $i + + + + + + + + + PLUS + + + 1 + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + ACCOLADE_FERMANTE + + + + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + 0 + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + + + ACCOLADE_FERMANTE + + + + + echanger + + PARENTHESE_OUVRANTE + + + + entier + $i + + + + + VIRGULE + + entier + $j + + + + + + + + + PARENTHESE_FERMANTE + + + + + entier + $temp + + + + + + + POINT_VIRGULE + + + ACCOLADE_OUVRANTE + + + + + $temp + + + + EGAL + + + + + + + + + $tab + + CROCHET_OUVRANT + + + + + + + + + $j + + + + + + + + + + + + + + + + + + + + + CROCHET_FERMANT + + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + $tab + + CROCHET_OUVRANT + + + + + + + + + $j + + + + + + + + + + + + + + + + + + + + + CROCHET_FERMANT + + + EGAL + + + + + + + + + $tab + + CROCHET_OUVRANT + + + + + + + + + $i + + + + + + + + + + + + + + + + + + + + + CROCHET_FERMANT + + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + $tab + + CROCHET_OUVRANT + + + + + + + + + $i + + + + + + + + + + + + + + + + + + + + + CROCHET_FERMANT + + + EGAL + + + + + + + + + $temp + + + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + + ACCOLADE_FERMANTE + + + + + trier + + PARENTHESE_OUVRANTE + + + + entier + $n + + + + + + + + PARENTHESE_FERMANTE + + + + + entier + $echange + + + + + VIRGULE + + entier + $j + + + + + VIRGULE + + entier + $m + + + + + + + + + POINT_VIRGULE + + + ACCOLADE_OUVRANTE + + + + + $m + + + + EGAL + + + + + + + + + $n + + + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + $echange + + + + EGAL + + + + + + + + 1 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + tantque + + + + + + + + + $echange + + + + + + + + + + + + EGAL + + + + 1 + + + + + + + + + + + + + + + + + + + faire + + ACCOLADE_OUVRANTE + + + + + $echange + + + + EGAL + + + + + + + + 0 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + $j + + + + EGAL + + + + + + + + 0 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + tantque + + + + + + + + + $j + + + + + + + + + + + + INFERIEUR + + + + + $m + + + + + + + + + MOINS + + + 1 + + + + + + + + + + + + + + + + + + + + faire + + ACCOLADE_OUVRANTE + + + + si + + + + + + + + + $tab + + CROCHET_OUVRANT + + + + + + + + + $j + + + + + + + + + PLUS + + + 1 + + + + + + + + + + + + + + + + + + + CROCHET_FERMANT + + + + + + + + + + + INFERIEUR + + + + + $tab + + CROCHET_OUVRANT + + + + + + + + + $j + + + + + + + + + + + + + + + + + + + + + CROCHET_FERMANT + + + + + + + + + + + + + + + + + + + + + alors + + ACCOLADE_OUVRANTE + + + + + echanger + PARENTHESE_OUVRANTE + + + + + + + + + + $j + + + + + + + + + + + + + + + + + + + + + + VIRGULE + + + + + + + + + $j + + + + + + + + + PLUS + + + 1 + + + + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + + POINT_VIRGULE + + + + + + + $echange + + + + EGAL + + + + + + + + 1 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + ACCOLADE_FERMANTE + + + + + + + + + + $j + + + + EGAL + + + + + + + + + $j + + + + + + + + + PLUS + + + 1 + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + ACCOLADE_FERMANTE + + + + + + + + $m + + + + EGAL + + + + + + + + + $m + + + + + + + + + MOINS + + + 1 + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + + + ACCOLADE_FERMANTE + + + + + + + + + ACCOLADE_FERMANTE + + + + + main + + PARENTHESE_OUVRANTE + + + PARENTHESE_FERMANTE + + + + + ACCOLADE_OUVRANTE + + + + + initialiser + PARENTHESE_OUVRANTE + + + PARENTHESE_FERMANTE + + POINT_VIRGULE + + + + + + + afficher + PARENTHESE_OUVRANTE + + + + + + + + + 10 + + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + + POINT_VIRGULE + + + + + + + trier + PARENTHESE_OUVRANTE + + + + + + + + + 10 + + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + + POINT_VIRGULE + + + + + + + afficher + PARENTHESE_OUVRANTE + + + + + + + + + 10 + + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + + POINT_VIRGULE + + + + + + + + + ACCOLADE_FERMANTE + + + + + + + + + + diff --git a/eval-partiel/ref-lex/affect.lex b/eval-partiel/ref-lex/affect.lex new file mode 100644 index 0000000..fb828db --- /dev/null +++ b/eval-partiel/ref-lex/affect.lex @@ -0,0 +1,18 @@ +entier mot_clef entier +$a id_variable $a +; symbole POINT_VIRGULE +main id_fonction main +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +{ symbole ACCOLADE_OUVRANTE +$a id_variable $a += symbole EGAL +1 nombre 1 +; symbole POINT_VIRGULE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +$a id_variable $a +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE + symbole FIN diff --git a/eval-partiel/ref-lex/boucle.lex b/eval-partiel/ref-lex/boucle.lex new file mode 100644 index 0000000..cbdea9f --- /dev/null +++ b/eval-partiel/ref-lex/boucle.lex @@ -0,0 +1,40 @@ +entier mot_clef entier +$i id_variable $i +, symbole VIRGULE +entier mot_clef entier +$carre id_variable $carre +; symbole POINT_VIRGULE +main id_fonction main +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +{ symbole ACCOLADE_OUVRANTE +$i id_variable $i += symbole EGAL +0 nombre 0 +; symbole POINT_VIRGULE +tantque mot_clef tantque +$i id_variable $i +< symbole INFERIEUR +10 nombre 10 +faire mot_clef faire +{ symbole ACCOLADE_OUVRANTE +$carre id_variable $carre += symbole EGAL +$i id_variable $i +* symbole FOIS +$i id_variable $i +; symbole POINT_VIRGULE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +$carre id_variable $carre +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +$i id_variable $i += symbole EGAL +$i id_variable $i ++ symbole PLUS +1 nombre 1 +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +} symbole ACCOLADE_FERMANTE + symbole FIN diff --git a/eval-partiel/ref-lex/eval1.lex b/eval-partiel/ref-lex/eval1.lex new file mode 100644 index 0000000..fbfdd45 --- /dev/null +++ b/eval-partiel/ref-lex/eval1.lex @@ -0,0 +1,100 @@ +add id_fonction add +( symbole PARENTHESE_OUVRANTE +entier mot_clef entier +$a id_variable $a +, symbole VIRGULE +entier mot_clef entier +$b id_variable $b +) symbole PARENTHESE_FERMANTE +{ symbole ACCOLADE_OUVRANTE +retour mot_clef retour +$a id_variable $a ++ symbole PLUS +$b id_variable $b +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +mult id_fonction mult +( symbole PARENTHESE_OUVRANTE +entier mot_clef entier +$a id_variable $a +, symbole VIRGULE +entier mot_clef entier +$b id_variable $b +) symbole PARENTHESE_FERMANTE +{ symbole ACCOLADE_OUVRANTE +retour mot_clef retour +$a id_variable $a +* symbole FOIS +$b id_variable $b +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +main id_fonction main +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +entier mot_clef entier +$a id_variable $a +, symbole VIRGULE +entier mot_clef entier +$b id_variable $b +, symbole VIRGULE +entier mot_clef entier +$op id_variable $op +; symbole POINT_VIRGULE +{ symbole ACCOLADE_OUVRANTE +$a id_variable $a += symbole EGAL +lire mot_clef lire +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +$b id_variable $b += symbole EGAL +lire mot_clef lire +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +$op id_variable $op += symbole EGAL +lire mot_clef lire +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +si mot_clef si +$op id_variable $op += symbole EGAL +1 nombre 1 +alors mot_clef alors +{ symbole ACCOLADE_OUVRANTE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +add id_fonction add +( symbole PARENTHESE_OUVRANTE +$a id_variable $a +, symbole VIRGULE +$b id_variable $b +) symbole PARENTHESE_FERMANTE +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +sinon mot_clef sinon +{ symbole ACCOLADE_OUVRANTE +si mot_clef si +$op id_variable $op += symbole EGAL +2 nombre 2 +alors mot_clef alors +{ symbole ACCOLADE_OUVRANTE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +mult id_fonction mult +( symbole PARENTHESE_OUVRANTE +$a id_variable $a +, symbole VIRGULE +$b id_variable $b +) symbole PARENTHESE_FERMANTE +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +} symbole ACCOLADE_FERMANTE +} symbole ACCOLADE_FERMANTE + symbole FIN diff --git a/eval-partiel/ref-lex/eval2.lex b/eval-partiel/ref-lex/eval2.lex new file mode 100644 index 0000000..40e933b --- /dev/null +++ b/eval-partiel/ref-lex/eval2.lex @@ -0,0 +1,51 @@ +fibo id_fonction fibo +( symbole PARENTHESE_OUVRANTE +entier mot_clef entier +$n id_variable $n +) symbole PARENTHESE_FERMANTE +{ symbole ACCOLADE_OUVRANTE +si mot_clef si +$n id_variable $n +< symbole INFERIEUR +2 nombre 2 +alors mot_clef alors +{ symbole ACCOLADE_OUVRANTE +retour mot_clef retour +1 nombre 1 +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +sinon mot_clef sinon +{ symbole ACCOLADE_OUVRANTE +retour mot_clef retour +fibo id_fonction fibo +( symbole PARENTHESE_OUVRANTE +$n id_variable $n +- symbole MOINS +1 nombre 1 +) symbole PARENTHESE_FERMANTE ++ symbole PLUS +fibo id_fonction fibo +( symbole PARENTHESE_OUVRANTE +$n id_variable $n +- symbole MOINS +2 nombre 2 +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +} symbole ACCOLADE_FERMANTE +main id_fonction main +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +{ symbole ACCOLADE_OUVRANTE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +fibo id_fonction fibo +( symbole PARENTHESE_OUVRANTE +lire mot_clef lire +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +) symbole PARENTHESE_FERMANTE +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE + symbole FIN diff --git a/eval-partiel/ref-lex/eval3.lex b/eval-partiel/ref-lex/eval3.lex new file mode 100644 index 0000000..53881f7 --- /dev/null +++ b/eval-partiel/ref-lex/eval3.lex @@ -0,0 +1,91 @@ +entier mot_clef entier +$i id_variable $i +, symbole VIRGULE +entier mot_clef entier +$j id_variable $j +, symbole VIRGULE +entier mot_clef entier +$k id_variable $k +, symbole VIRGULE +entier mot_clef entier +$somme id_variable $somme +; symbole POINT_VIRGULE +main id_fonction main +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +{ symbole ACCOLADE_OUVRANTE +$somme id_variable $somme += symbole EGAL +0 nombre 0 +; symbole POINT_VIRGULE +pour mot_clef pour +$i id_variable $i += symbole EGAL +0 nombre 0 +; symbole POINT_VIRGULE +$i id_variable $i +< symbole INFERIEUR +10 nombre 10 +; symbole POINT_VIRGULE +$i id_variable $i += symbole EGAL +$i id_variable $i ++ symbole PLUS +1 nombre 1 +; symbole POINT_VIRGULE +faire mot_clef faire +{ symbole ACCOLADE_OUVRANTE +pour mot_clef pour +$j id_variable $j += symbole EGAL +0 nombre 0 +; symbole POINT_VIRGULE +$j id_variable $j +< symbole INFERIEUR +$i id_variable $i +; symbole POINT_VIRGULE +$j id_variable $j += symbole EGAL +$j id_variable $j ++ symbole PLUS +1 nombre 1 +; symbole POINT_VIRGULE +faire mot_clef faire +{ symbole ACCOLADE_OUVRANTE +pour mot_clef pour +$k id_variable $k += symbole EGAL +0 nombre 0 +; symbole POINT_VIRGULE +$k id_variable $k +< symbole INFERIEUR +$j id_variable $j +; symbole POINT_VIRGULE +$k id_variable $k += symbole EGAL +$k id_variable $k ++ symbole PLUS +1 nombre 1 +; symbole POINT_VIRGULE +faire mot_clef faire +{ symbole ACCOLADE_OUVRANTE +$somme id_variable $somme += symbole EGAL +$somme id_variable $somme ++ symbole PLUS +$i id_variable $i ++ symbole PLUS +$j id_variable $j ++ symbole PLUS +$k id_variable $k +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +} symbole ACCOLADE_FERMANTE +} symbole ACCOLADE_FERMANTE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +$somme id_variable $somme +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE + symbole FIN diff --git a/eval-partiel/ref-lex/eval4.lex b/eval-partiel/ref-lex/eval4.lex new file mode 100644 index 0000000..a51d4f1 --- /dev/null +++ b/eval-partiel/ref-lex/eval4.lex @@ -0,0 +1,19 @@ +entier mot_clef entier +$a id_variable $a +; symbole POINT_VIRGULE +main id_fonction main +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +{ symbole ACCOLADE_OUVRANTE +si mot_clef si +1 nombre 1 +alors mot_clef alors +{ symbole ACCOLADE_OUVRANTE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +1 nombre 1 +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +} symbole ACCOLADE_FERMANTE + symbole FIN diff --git a/eval-partiel/ref-lex/eval5.lex b/eval-partiel/ref-lex/eval5.lex new file mode 100644 index 0000000..a40b0de --- /dev/null +++ b/eval-partiel/ref-lex/eval5.lex @@ -0,0 +1,27 @@ +entier mot_clef entier +$a id_variable $a +; symbole POINT_VIRGULE +main id_fonction main +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +{ symbole ACCOLADE_OUVRANTE +si mot_clef si +0 nombre 0 +alors mot_clef alors +{ symbole ACCOLADE_OUVRANTE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +1 nombre 1 +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +sinon mot_clef sinon +{ symbole ACCOLADE_OUVRANTE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +0 nombre 0 +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +} symbole ACCOLADE_FERMANTE + symbole FIN diff --git a/eval-partiel/ref-lex/eval6.lex b/eval-partiel/ref-lex/eval6.lex new file mode 100644 index 0000000..df16673 --- /dev/null +++ b/eval-partiel/ref-lex/eval6.lex @@ -0,0 +1,62 @@ +entier mot_clef entier +$a id_variable $a +[ symbole CROCHET_OUVRANT +10 nombre 10 +] symbole CROCHET_FERMANT +, symbole VIRGULE +entier mot_clef entier +$b id_variable $b +; symbole POINT_VIRGULE +main id_fonction main +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +{ symbole ACCOLADE_OUVRANTE +$a id_variable $a +[ symbole CROCHET_OUVRANT +0 nombre 0 +] symbole CROCHET_FERMANT += symbole EGAL +10 nombre 10 +; symbole POINT_VIRGULE +$b id_variable $b += symbole EGAL +5 nombre 5 +; symbole POINT_VIRGULE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +$a id_variable $a +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +$a id_variable $a ++ symbole PLUS +1 nombre 1 +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +$b id_variable $b +[ symbole CROCHET_OUVRANT +0 nombre 0 +] symbole CROCHET_FERMANT +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +$a id_variable $a +[ symbole CROCHET_OUVRANT +10 nombre 10 +] symbole CROCHET_FERMANT +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +retour mot_clef retour +0 nombre 0 +; symbole POINT_VIRGULE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +$b id_variable $b +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE + symbole FIN diff --git a/eval-partiel/ref-lex/eval7.lex b/eval-partiel/ref-lex/eval7.lex new file mode 100644 index 0000000..2fb15f9 --- /dev/null +++ b/eval-partiel/ref-lex/eval7.lex @@ -0,0 +1 @@ + symbole FIN diff --git a/eval-partiel/ref-lex/eval8.lex b/eval-partiel/ref-lex/eval8.lex new file mode 100644 index 0000000..fb449a8 --- /dev/null +++ b/eval-partiel/ref-lex/eval8.lex @@ -0,0 +1,31 @@ +entier mot_clef entier +$a id_variable $a +; symbole POINT_VIRGULE +main id_fonction main +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +{ symbole ACCOLADE_OUVRANTE +$a id_variable $a += symbole EGAL +0 nombre 0 +; symbole POINT_VIRGULE +tantque mot_clef tantque +$a id_variable $a +< symbole INFERIEUR +10 nombre 10 +faire mot_clef faire +{ symbole ACCOLADE_OUVRANTE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +$a id_variable $a +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +$a id_variable $a += symbole EGAL +$a id_variable $a ++ symbole PLUS +1 nombre 1 +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +} symbole ACCOLADE_FERMANTE + symbole FIN diff --git a/eval-partiel/ref-lex/expression.lex b/eval-partiel/ref-lex/expression.lex new file mode 100644 index 0000000..a569a71 --- /dev/null +++ b/eval-partiel/ref-lex/expression.lex @@ -0,0 +1,16 @@ +entier mot_clef entier +$a id_variable $a +; symbole POINT_VIRGULE +main id_fonction main +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +{ symbole ACCOLADE_OUVRANTE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +5 nombre 5 +* symbole FOIS +2 nombre 2 +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE + symbole FIN diff --git a/eval-partiel/ref-lex/max.lex b/eval-partiel/ref-lex/max.lex new file mode 100644 index 0000000..5b96821 --- /dev/null +++ b/eval-partiel/ref-lex/max.lex @@ -0,0 +1,72 @@ +max id_fonction max +( symbole PARENTHESE_OUVRANTE +entier mot_clef entier +$a id_variable $a +, symbole VIRGULE +entier mot_clef entier +$b id_variable $b +) symbole PARENTHESE_FERMANTE +{ symbole ACCOLADE_OUVRANTE +si mot_clef si +$a id_variable $a +< symbole INFERIEUR +$b id_variable $b +alors mot_clef alors +{ symbole ACCOLADE_OUVRANTE +retour mot_clef retour +$b id_variable $b +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +retour mot_clef retour +$a id_variable $a +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +main id_fonction main +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +entier mot_clef entier +$v_1 id_variable $v_1 +, symbole VIRGULE +entier mot_clef entier +$v_2 id_variable $v_2 +; symbole POINT_VIRGULE +{ symbole ACCOLADE_OUVRANTE +$v_1 id_variable $v_1 += symbole EGAL +lire mot_clef lire +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +$v_2 id_variable $v_2 += symbole EGAL +lire mot_clef lire +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +si mot_clef si +max id_fonction max +( symbole PARENTHESE_OUVRANTE +$v_1 id_variable $v_1 +, symbole VIRGULE +$v_2 id_variable $v_2 +) symbole PARENTHESE_FERMANTE += symbole EGAL +$v_1 id_variable $v_1 +alors mot_clef alors +{ symbole ACCOLADE_OUVRANTE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +$v_1 id_variable $v_1 +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +sinon mot_clef sinon +{ symbole ACCOLADE_OUVRANTE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +$v_2 id_variable $v_2 +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +} symbole ACCOLADE_FERMANTE + symbole FIN diff --git a/eval-partiel/ref-lex/test1.lex b/eval-partiel/ref-lex/test1.lex new file mode 100644 index 0000000..466ec61 --- /dev/null +++ b/eval-partiel/ref-lex/test1.lex @@ -0,0 +1,32 @@ +entier mot_clef entier +$a id_variable $a +; symbole POINT_VIRGULE +main id_fonction main +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +{ symbole ACCOLADE_OUVRANTE +pour mot_clef pour +$a id_variable $a += symbole EGAL +1 nombre 1 +; symbole POINT_VIRGULE +$a id_variable $a +< symbole INFERIEUR +10 nombre 10 +; symbole POINT_VIRGULE +$a id_variable $a += symbole EGAL +$a id_variable $a ++ symbole PLUS +1 nombre 1 +; symbole POINT_VIRGULE +faire mot_clef faire +{ symbole ACCOLADE_OUVRANTE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +$a id_variable $a +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +} symbole ACCOLADE_FERMANTE + symbole FIN diff --git a/eval-partiel/ref-lex/test2.lex b/eval-partiel/ref-lex/test2.lex new file mode 100644 index 0000000..466ec61 --- /dev/null +++ b/eval-partiel/ref-lex/test2.lex @@ -0,0 +1,32 @@ +entier mot_clef entier +$a id_variable $a +; symbole POINT_VIRGULE +main id_fonction main +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +{ symbole ACCOLADE_OUVRANTE +pour mot_clef pour +$a id_variable $a += symbole EGAL +1 nombre 1 +; symbole POINT_VIRGULE +$a id_variable $a +< symbole INFERIEUR +10 nombre 10 +; symbole POINT_VIRGULE +$a id_variable $a += symbole EGAL +$a id_variable $a ++ symbole PLUS +1 nombre 1 +; symbole POINT_VIRGULE +faire mot_clef faire +{ symbole ACCOLADE_OUVRANTE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +$a id_variable $a +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +} symbole ACCOLADE_FERMANTE + symbole FIN diff --git a/eval-partiel/ref-lex/test3.lex b/eval-partiel/ref-lex/test3.lex new file mode 100644 index 0000000..466ec61 --- /dev/null +++ b/eval-partiel/ref-lex/test3.lex @@ -0,0 +1,32 @@ +entier mot_clef entier +$a id_variable $a +; symbole POINT_VIRGULE +main id_fonction main +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +{ symbole ACCOLADE_OUVRANTE +pour mot_clef pour +$a id_variable $a += symbole EGAL +1 nombre 1 +; symbole POINT_VIRGULE +$a id_variable $a +< symbole INFERIEUR +10 nombre 10 +; symbole POINT_VIRGULE +$a id_variable $a += symbole EGAL +$a id_variable $a ++ symbole PLUS +1 nombre 1 +; symbole POINT_VIRGULE +faire mot_clef faire +{ symbole ACCOLADE_OUVRANTE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +$a id_variable $a +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +} symbole ACCOLADE_FERMANTE + symbole FIN diff --git a/eval-partiel/ref-lex/tri.lex b/eval-partiel/ref-lex/tri.lex new file mode 100644 index 0000000..457125e --- /dev/null +++ b/eval-partiel/ref-lex/tri.lex @@ -0,0 +1,271 @@ +entier mot_clef entier +$tab id_variable $tab +[ symbole CROCHET_OUVRANT +10 nombre 10 +] symbole CROCHET_FERMANT +; symbole POINT_VIRGULE +initialiser id_fonction initialiser +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +{ symbole ACCOLADE_OUVRANTE +$tab id_variable $tab +[ symbole CROCHET_OUVRANT +0 nombre 0 +] symbole CROCHET_FERMANT += symbole EGAL +8 nombre 8 +; symbole POINT_VIRGULE +$tab id_variable $tab +[ symbole CROCHET_OUVRANT +1 nombre 1 +] symbole CROCHET_FERMANT += symbole EGAL +6 nombre 6 +; symbole POINT_VIRGULE +$tab id_variable $tab +[ symbole CROCHET_OUVRANT +2 nombre 2 +] symbole CROCHET_FERMANT += symbole EGAL +9 nombre 9 +; symbole POINT_VIRGULE +$tab id_variable $tab +[ symbole CROCHET_OUVRANT +3 nombre 3 +] symbole CROCHET_FERMANT += symbole EGAL +9 nombre 9 +; symbole POINT_VIRGULE +$tab id_variable $tab +[ symbole CROCHET_OUVRANT +4 nombre 4 +] symbole CROCHET_FERMANT += symbole EGAL +4 nombre 4 +; symbole POINT_VIRGULE +$tab id_variable $tab +[ symbole CROCHET_OUVRANT +5 nombre 5 +] symbole CROCHET_FERMANT += symbole EGAL +2 nombre 2 +; symbole POINT_VIRGULE +$tab id_variable $tab +[ symbole CROCHET_OUVRANT +6 nombre 6 +] symbole CROCHET_FERMANT += symbole EGAL +3 nombre 3 +; symbole POINT_VIRGULE +$tab id_variable $tab +[ symbole CROCHET_OUVRANT +7 nombre 7 +] symbole CROCHET_FERMANT += symbole EGAL +1 nombre 1 +; symbole POINT_VIRGULE +$tab id_variable $tab +[ symbole CROCHET_OUVRANT +8 nombre 8 +] symbole CROCHET_FERMANT += symbole EGAL +4 nombre 4 +; symbole POINT_VIRGULE +$tab id_variable $tab +[ symbole CROCHET_OUVRANT +9 nombre 9 +] symbole CROCHET_FERMANT += symbole EGAL +5 nombre 5 +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +afficher id_fonction afficher +( symbole PARENTHESE_OUVRANTE +entier mot_clef entier +$n id_variable $n +) symbole PARENTHESE_FERMANTE +entier mot_clef entier +$i id_variable $i +; symbole POINT_VIRGULE +{ symbole ACCOLADE_OUVRANTE +$i id_variable $i += symbole EGAL +0 nombre 0 +; symbole POINT_VIRGULE +tantque mot_clef tantque +$i id_variable $i +< symbole INFERIEUR +$n id_variable $n +faire mot_clef faire +{ symbole ACCOLADE_OUVRANTE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +$tab id_variable $tab +[ symbole CROCHET_OUVRANT +$i id_variable $i +] symbole CROCHET_FERMANT +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +$i id_variable $i += symbole EGAL +$i id_variable $i ++ symbole PLUS +1 nombre 1 +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +ecrire mot_clef ecrire +( symbole PARENTHESE_OUVRANTE +0 nombre 0 +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +echanger id_fonction echanger +( symbole PARENTHESE_OUVRANTE +entier mot_clef entier +$i id_variable $i +, symbole VIRGULE +entier mot_clef entier +$j id_variable $j +) symbole PARENTHESE_FERMANTE +entier mot_clef entier +$temp id_variable $temp +; symbole POINT_VIRGULE +{ symbole ACCOLADE_OUVRANTE +$temp id_variable $temp += symbole EGAL +$tab id_variable $tab +[ symbole CROCHET_OUVRANT +$j id_variable $j +] symbole CROCHET_FERMANT +; symbole POINT_VIRGULE +$tab id_variable $tab +[ symbole CROCHET_OUVRANT +$j id_variable $j +] symbole CROCHET_FERMANT += symbole EGAL +$tab id_variable $tab +[ symbole CROCHET_OUVRANT +$i id_variable $i +] symbole CROCHET_FERMANT +; symbole POINT_VIRGULE +$tab id_variable $tab +[ symbole CROCHET_OUVRANT +$i id_variable $i +] symbole CROCHET_FERMANT += symbole EGAL +$temp id_variable $temp +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +trier id_fonction trier +( symbole PARENTHESE_OUVRANTE +entier mot_clef entier +$n id_variable $n +) symbole PARENTHESE_FERMANTE +entier mot_clef entier +$echange id_variable $echange +, symbole VIRGULE +entier mot_clef entier +$j id_variable $j +, symbole VIRGULE +entier mot_clef entier +$m id_variable $m +; symbole POINT_VIRGULE +{ symbole ACCOLADE_OUVRANTE +$m id_variable $m += symbole EGAL +$n id_variable $n +; symbole POINT_VIRGULE +$echange id_variable $echange += symbole EGAL +1 nombre 1 +; symbole POINT_VIRGULE +tantque mot_clef tantque +$echange id_variable $echange += symbole EGAL +1 nombre 1 +faire mot_clef faire +{ symbole ACCOLADE_OUVRANTE +$echange id_variable $echange += symbole EGAL +0 nombre 0 +; symbole POINT_VIRGULE +$j id_variable $j += symbole EGAL +0 nombre 0 +; symbole POINT_VIRGULE +tantque mot_clef tantque +$j id_variable $j +< symbole INFERIEUR +$m id_variable $m +- symbole MOINS +1 nombre 1 +faire mot_clef faire +{ symbole ACCOLADE_OUVRANTE +si mot_clef si +$tab id_variable $tab +[ symbole CROCHET_OUVRANT +$j id_variable $j ++ symbole PLUS +1 nombre 1 +] symbole CROCHET_FERMANT +< symbole INFERIEUR +$tab id_variable $tab +[ symbole CROCHET_OUVRANT +$j id_variable $j +] symbole CROCHET_FERMANT +alors mot_clef alors +{ symbole ACCOLADE_OUVRANTE +echanger id_fonction echanger +( symbole PARENTHESE_OUVRANTE +$j id_variable $j +, symbole VIRGULE +$j id_variable $j ++ symbole PLUS +1 nombre 1 +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +$echange id_variable $echange += symbole EGAL +1 nombre 1 +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +$j id_variable $j += symbole EGAL +$j id_variable $j ++ symbole PLUS +1 nombre 1 +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +$m id_variable $m += symbole EGAL +$m id_variable $m +- symbole MOINS +1 nombre 1 +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE +} symbole ACCOLADE_FERMANTE +main id_fonction main +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +{ symbole ACCOLADE_OUVRANTE +initialiser id_fonction initialiser +( symbole PARENTHESE_OUVRANTE +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +afficher id_fonction afficher +( symbole PARENTHESE_OUVRANTE +10 nombre 10 +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +trier id_fonction trier +( symbole PARENTHESE_OUVRANTE +10 nombre 10 +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +afficher id_fonction afficher +( symbole PARENTHESE_OUVRANTE +10 nombre 10 +) symbole PARENTHESE_FERMANTE +; symbole POINT_VIRGULE +} symbole ACCOLADE_FERMANTE + symbole FIN diff --git a/eval-partiel/ref-synt/affect.synt b/eval-partiel/ref-synt/affect.synt new file mode 100644 index 0000000..038df30 --- /dev/null +++ b/eval-partiel/ref-synt/affect.synt @@ -0,0 +1,113 @@ + + + + + entier + $a + + + + + + + POINT_VIRGULE + + + + main + + PARENTHESE_OUVRANTE + + + PARENTHESE_FERMANTE + + + + + ACCOLADE_OUVRANTE + + + + + $a + + + + EGAL + + + + + + + + 1 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + + $a + + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + + ACCOLADE_FERMANTE + + + + + + diff --git a/eval-partiel/ref-synt/boucle.synt b/eval-partiel/ref-synt/boucle.synt new file mode 100644 index 0000000..c3cf0f2 --- /dev/null +++ b/eval-partiel/ref-synt/boucle.synt @@ -0,0 +1,283 @@ + + + + + entier + $i + + + + + VIRGULE + + entier + $carre + + + + + + + + POINT_VIRGULE + + + + main + + PARENTHESE_OUVRANTE + + + PARENTHESE_FERMANTE + + + + + ACCOLADE_OUVRANTE + + + + + $i + + + + EGAL + + + + + + + + 0 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + tantque + + + + + + + + + $i + + + + + + + + + + + + INFERIEUR + + + + 10 + + + + + + + + + + + + + + + + + + + faire + + ACCOLADE_OUVRANTE + + + + + $carre + + + + EGAL + + + + + + + + + $i + + + + + + FOIS + + + $i + + + + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + + $carre + + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + + $i + + + + EGAL + + + + + + + + + $i + + + + + + + + + PLUS + + + 1 + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + + ACCOLADE_FERMANTE + + + + + + + + ACCOLADE_FERMANTE + + + + + + diff --git a/eval-partiel/ref-synt/eval1.synt b/eval-partiel/ref-synt/eval1.synt new file mode 100644 index 0000000..d0afcbb --- /dev/null +++ b/eval-partiel/ref-synt/eval1.synt @@ -0,0 +1,681 @@ + + + + + + add + + PARENTHESE_OUVRANTE + + + + entier + $a + + + + + VIRGULE + + entier + $b + + + + + + + + + PARENTHESE_FERMANTE + + + + + ACCOLADE_OUVRANTE + + + + retour + + + + + + + + + $a + + + + + + + + + PLUS + + + + $b + + + + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + ACCOLADE_FERMANTE + + + + + mult + + PARENTHESE_OUVRANTE + + + + entier + $a + + + + + VIRGULE + + entier + $b + + + + + + + + + PARENTHESE_FERMANTE + + + + + ACCOLADE_OUVRANTE + + + + retour + + + + + + + + + $a + + + + + + FOIS + + + $b + + + + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + ACCOLADE_FERMANTE + + + + + main + + PARENTHESE_OUVRANTE + + + PARENTHESE_FERMANTE + + + + + entier + $a + + + + + VIRGULE + + entier + $b + + + + + VIRGULE + + entier + $op + + + + + + + + + POINT_VIRGULE + + + ACCOLADE_OUVRANTE + + + + + $a + + + + EGAL + + + + + + + + lire + PARENTHESE_OUVRANTE + PARENTHESE_FERMANTE + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + $b + + + + EGAL + + + + + + + + lire + PARENTHESE_OUVRANTE + PARENTHESE_FERMANTE + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + $op + + + + EGAL + + + + + + + + lire + PARENTHESE_OUVRANTE + PARENTHESE_FERMANTE + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + si + + + + + + + + + $op + + + + + + + + + + + + EGAL + + + + 1 + + + + + + + + + + + + + + + + + + + alors + + ACCOLADE_OUVRANTE + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + + add + PARENTHESE_OUVRANTE + + + + + + + + + + $a + + + + + + + + + + + + + + + + + + + + + + VIRGULE + + + + + + + + + $b + + + + + + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + ACCOLADE_FERMANTE + + + sinon + + ACCOLADE_OUVRANTE + + + + si + + + + + + + + + $op + + + + + + + + + + + + EGAL + + + + 2 + + + + + + + + + + + + + + + + + + + alors + + ACCOLADE_OUVRANTE + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + + mult + PARENTHESE_OUVRANTE + + + + + + + + + + $a + + + + + + + + + + + + + + + + + + + + + + VIRGULE + + + + + + + + + $b + + + + + + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + ACCOLADE_FERMANTE + + + + + + + + + ACCOLADE_FERMANTE + + + + + + + + + + + ACCOLADE_FERMANTE + + + + + + + + diff --git a/eval-partiel/ref-synt/eval2.synt b/eval-partiel/ref-synt/eval2.synt new file mode 100644 index 0000000..1ca6407 --- /dev/null +++ b/eval-partiel/ref-synt/eval2.synt @@ -0,0 +1,360 @@ + + + + + + fibo + + PARENTHESE_OUVRANTE + + + + entier + $n + + + + + + + + PARENTHESE_FERMANTE + + + + + ACCOLADE_OUVRANTE + + + + si + + + + + + + + + $n + + + + + + + + + + + + INFERIEUR + + + + 2 + + + + + + + + + + + + + + + + + + + alors + + ACCOLADE_OUVRANTE + + + + retour + + + + + + + + 1 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + ACCOLADE_FERMANTE + + + sinon + + ACCOLADE_OUVRANTE + + + + retour + + + + + + + + + fibo + PARENTHESE_OUVRANTE + + + + + + + + + + $n + + + + + + + + + MOINS + + + 1 + + + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + + + + + + + PLUS + + + + fibo + PARENTHESE_OUVRANTE + + + + + + + + + + $n + + + + + + + + + MOINS + + + 2 + + + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + ACCOLADE_FERMANTE + + + + + + + + ACCOLADE_FERMANTE + + + + + main + + PARENTHESE_OUVRANTE + + + PARENTHESE_FERMANTE + + + + + ACCOLADE_OUVRANTE + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + + fibo + PARENTHESE_OUVRANTE + + + + + + + + + lire + PARENTHESE_OUVRANTE + PARENTHESE_FERMANTE + + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + ACCOLADE_FERMANTE + + + + + + + diff --git a/eval-partiel/ref-synt/eval3.synt b/eval-partiel/ref-synt/eval3.synt new file mode 100644 index 0000000..295b490 --- /dev/null +++ b/eval-partiel/ref-synt/eval3.synt @@ -0,0 +1,652 @@ + + + + + entier + $i + + + + + VIRGULE + + entier + $j + + + + + VIRGULE + + entier + $k + + + + + VIRGULE + + entier + $somme + + + + + + + + + + POINT_VIRGULE + + + + main + + PARENTHESE_OUVRANTE + + + PARENTHESE_FERMANTE + + + + + ACCOLADE_OUVRANTE + + + + + $somme + + + + EGAL + + + + + + + + 0 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + pour + + + $i + + + + EGAL + + + + + + + + 0 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + + + + $i + + + + + + + + + + + + INFERIEUR + + + + 10 + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + $i + + + + EGAL + + + + + + + + + $i + + + + + + + + + PLUS + + + 1 + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + faire + + ACCOLADE_OUVRANTE + + + + pour + + + $j + + + + EGAL + + + + + + + + 0 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + + + + $j + + + + + + + + + + + + INFERIEUR + + + + + $i + + + + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + $j + + + + EGAL + + + + + + + + + $j + + + + + + + + + PLUS + + + 1 + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + faire + + ACCOLADE_OUVRANTE + + + + pour + + + $k + + + + EGAL + + + + + + + + 0 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + + + + $k + + + + + + + + + + + + INFERIEUR + + + + + $j + + + + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + $k + + + + EGAL + + + + + + + + + $k + + + + + + + + + PLUS + + + 1 + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + faire + + ACCOLADE_OUVRANTE + + + + + $somme + + + + EGAL + + + + + + + + + $somme + + + + + + + + + PLUS + + + + $i + + + + + + + + + PLUS + + + + $j + + + + + + + + + PLUS + + + + $k + + + + + + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + ACCOLADE_FERMANTE + + + + + + + ACCOLADE_FERMANTE + + + + + + + ACCOLADE_FERMANTE + + + + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + + $somme + + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + + + ACCOLADE_FERMANTE + + + + + + diff --git a/eval-partiel/ref-synt/eval4.synt b/eval-partiel/ref-synt/eval4.synt new file mode 100644 index 0000000..c855a07 --- /dev/null +++ b/eval-partiel/ref-synt/eval4.synt @@ -0,0 +1,112 @@ + + + + + entier + $a + + + + + + + POINT_VIRGULE + + + + main + + PARENTHESE_OUVRANTE + + + PARENTHESE_FERMANTE + + + + + ACCOLADE_OUVRANTE + + + + si + + + + + + + + 1 + + + + + + + + + + + + + + + + + + alors + + ACCOLADE_OUVRANTE + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + 1 + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + ACCOLADE_FERMANTE + + + + + + + + + ACCOLADE_FERMANTE + + + + + + diff --git a/eval-partiel/ref-synt/eval5.synt b/eval-partiel/ref-synt/eval5.synt new file mode 100644 index 0000000..f049cf1 --- /dev/null +++ b/eval-partiel/ref-synt/eval5.synt @@ -0,0 +1,154 @@ + + + + + entier + $a + + + + + + + POINT_VIRGULE + + + + main + + PARENTHESE_OUVRANTE + + + PARENTHESE_FERMANTE + + + + + ACCOLADE_OUVRANTE + + + + si + + + + + + + + 0 + + + + + + + + + + + + + + + + + + alors + + ACCOLADE_OUVRANTE + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + 1 + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + ACCOLADE_FERMANTE + + + sinon + + ACCOLADE_OUVRANTE + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + 0 + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + ACCOLADE_FERMANTE + + + + + + + + ACCOLADE_FERMANTE + + + + + + diff --git a/eval-partiel/ref-synt/eval6.synt b/eval-partiel/ref-synt/eval6.synt new file mode 100644 index 0000000..0eeef81 --- /dev/null +++ b/eval-partiel/ref-synt/eval6.synt @@ -0,0 +1,443 @@ + + + + + entier + $a + + CROCHET_OUVRANT + 10 + CROCHET_FERMANT + + + + VIRGULE + + entier + $b + + + + + + + + POINT_VIRGULE + + + + main + + PARENTHESE_OUVRANTE + + + PARENTHESE_FERMANTE + + + + + ACCOLADE_OUVRANTE + + + + + $a + + CROCHET_OUVRANT + + + + + + + + 0 + + + + + + + + + + + + + + + + + + CROCHET_FERMANT + + + EGAL + + + + + + + + 10 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + $b + + + + EGAL + + + + + + + + 5 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + + $a + + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + + $a + + + + + + + + + PLUS + + + 1 + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + + $b + + CROCHET_OUVRANT + + + + + + + + 0 + + + + + + + + + + + + + + + + + + CROCHET_FERMANT + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + + $a + + CROCHET_OUVRANT + + + + + + + + 10 + + + + + + + + + + + + + + + + + + CROCHET_FERMANT + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + retour + + + + + + + + 0 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + + $b + + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + + + + + + + + ACCOLADE_FERMANTE + + + + + + diff --git a/eval-partiel/ref-synt/eval7.synt b/eval-partiel/ref-synt/eval7.synt new file mode 100644 index 0000000..56784dd --- /dev/null +++ b/eval-partiel/ref-synt/eval7.synt @@ -0,0 +1,6 @@ + + + + + + diff --git a/eval-partiel/ref-synt/eval8.synt b/eval-partiel/ref-synt/eval8.synt new file mode 100644 index 0000000..812c711 --- /dev/null +++ b/eval-partiel/ref-synt/eval8.synt @@ -0,0 +1,222 @@ + + + + + entier + $a + + + + + + + POINT_VIRGULE + + + + main + + PARENTHESE_OUVRANTE + + + PARENTHESE_FERMANTE + + + + + ACCOLADE_OUVRANTE + + + + + $a + + + + EGAL + + + + + + + + 0 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + tantque + + + + + + + + + $a + + + + + + + + + + + + INFERIEUR + + + + 10 + + + + + + + + + + + + + + + + + + + faire + + ACCOLADE_OUVRANTE + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + + $a + + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + + $a + + + + EGAL + + + + + + + + + $a + + + + + + + + + PLUS + + + 1 + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + ACCOLADE_FERMANTE + + + + + + + + ACCOLADE_FERMANTE + + + + + + diff --git a/eval-partiel/ref-synt/expression.synt b/eval-partiel/ref-synt/expression.synt new file mode 100644 index 0000000..4d058f0 --- /dev/null +++ b/eval-partiel/ref-synt/expression.synt @@ -0,0 +1,77 @@ + + + + + entier + $a + + + + + + + POINT_VIRGULE + + + + main + + PARENTHESE_OUVRANTE + + + PARENTHESE_FERMANTE + + + + + ACCOLADE_OUVRANTE + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + 5 + + + FOIS + + 2 + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + ACCOLADE_FERMANTE + + + + + + diff --git a/eval-partiel/ref-synt/max.synt b/eval-partiel/ref-synt/max.synt new file mode 100644 index 0000000..08f06d7 --- /dev/null +++ b/eval-partiel/ref-synt/max.synt @@ -0,0 +1,513 @@ + + + + + + max + + PARENTHESE_OUVRANTE + + + + entier + $a + + + + + VIRGULE + + entier + $b + + + + + + + + + PARENTHESE_FERMANTE + + + + + ACCOLADE_OUVRANTE + + + + si + + + + + + + + + $a + + + + + + + + + + + + INFERIEUR + + + + + $b + + + + + + + + + + + + + + + + + + + + + + alors + + ACCOLADE_OUVRANTE + + + + retour + + + + + + + + + $b + + + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + ACCOLADE_FERMANTE + + + + + + + + + retour + + + + + + + + + $a + + + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + ACCOLADE_FERMANTE + + + + + main + + PARENTHESE_OUVRANTE + + + PARENTHESE_FERMANTE + + + + + entier + $v_1 + + + + + VIRGULE + + entier + $v_2 + + + + + + + + POINT_VIRGULE + + + ACCOLADE_OUVRANTE + + + + + $v_1 + + + + EGAL + + + + + + + + lire + PARENTHESE_OUVRANTE + PARENTHESE_FERMANTE + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + $v_2 + + + + EGAL + + + + + + + + lire + PARENTHESE_OUVRANTE + PARENTHESE_FERMANTE + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + si + + + + + + + + + max + PARENTHESE_OUVRANTE + + + + + + + + + + $v_1 + + + + + + + + + + + + + + + + + + + + + + VIRGULE + + + + + + + + + $v_2 + + + + + + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + + + + + + + + + + EGAL + + + + + $v_1 + + + + + + + + + + + + + + + + + + + + + + alors + + ACCOLADE_OUVRANTE + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + + $v_1 + + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + ACCOLADE_FERMANTE + + + sinon + + ACCOLADE_OUVRANTE + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + + $v_2 + + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + ACCOLADE_FERMANTE + + + + + + + + + + ACCOLADE_FERMANTE + + + + + + + diff --git a/eval-partiel/ref-synt/test1.synt b/eval-partiel/ref-synt/test1.synt new file mode 100644 index 0000000..52042e9 --- /dev/null +++ b/eval-partiel/ref-synt/test1.synt @@ -0,0 +1,215 @@ + + + + + entier + $a + + + + + + + POINT_VIRGULE + + + + main + + PARENTHESE_OUVRANTE + + + PARENTHESE_FERMANTE + + + + + ACCOLADE_OUVRANTE + + + + pour + + + $a + + + + EGAL + + + + + + + + 1 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + + + + $a + + + + + + + + + + + + INFERIEUR + + + + 10 + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + $a + + + + EGAL + + + + + + + + + $a + + + + + + + + + PLUS + + + 1 + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + faire + + ACCOLADE_OUVRANTE + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + + $a + + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + ACCOLADE_FERMANTE + + + + + + + ACCOLADE_FERMANTE + + + + + + diff --git a/eval-partiel/ref-synt/test2.synt b/eval-partiel/ref-synt/test2.synt new file mode 100644 index 0000000..52042e9 --- /dev/null +++ b/eval-partiel/ref-synt/test2.synt @@ -0,0 +1,215 @@ + + + + + entier + $a + + + + + + + POINT_VIRGULE + + + + main + + PARENTHESE_OUVRANTE + + + PARENTHESE_FERMANTE + + + + + ACCOLADE_OUVRANTE + + + + pour + + + $a + + + + EGAL + + + + + + + + 1 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + + + + $a + + + + + + + + + + + + INFERIEUR + + + + 10 + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + $a + + + + EGAL + + + + + + + + + $a + + + + + + + + + PLUS + + + 1 + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + faire + + ACCOLADE_OUVRANTE + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + + $a + + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + ACCOLADE_FERMANTE + + + + + + + ACCOLADE_FERMANTE + + + + + + diff --git a/eval-partiel/ref-synt/test3.synt b/eval-partiel/ref-synt/test3.synt new file mode 100644 index 0000000..52042e9 --- /dev/null +++ b/eval-partiel/ref-synt/test3.synt @@ -0,0 +1,215 @@ + + + + + entier + $a + + + + + + + POINT_VIRGULE + + + + main + + PARENTHESE_OUVRANTE + + + PARENTHESE_FERMANTE + + + + + ACCOLADE_OUVRANTE + + + + pour + + + $a + + + + EGAL + + + + + + + + 1 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + + + + $a + + + + + + + + + + + + INFERIEUR + + + + 10 + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + $a + + + + EGAL + + + + + + + + + $a + + + + + + + + + PLUS + + + 1 + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + faire + + ACCOLADE_OUVRANTE + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + + $a + + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + ACCOLADE_FERMANTE + + + + + + + ACCOLADE_FERMANTE + + + + + + diff --git a/eval-partiel/ref-synt/tri.synt b/eval-partiel/ref-synt/tri.synt new file mode 100644 index 0000000..77a518b --- /dev/null +++ b/eval-partiel/ref-synt/tri.synt @@ -0,0 +1,2146 @@ + + + + + entier + $tab + + CROCHET_OUVRANT + 10 + CROCHET_FERMANT + + + + + + POINT_VIRGULE + + + + initialiser + + PARENTHESE_OUVRANTE + + + PARENTHESE_FERMANTE + + + + + ACCOLADE_OUVRANTE + + + + + $tab + + CROCHET_OUVRANT + + + + + + + + 0 + + + + + + + + + + + + + + + + + + CROCHET_FERMANT + + + EGAL + + + + + + + + 8 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + $tab + + CROCHET_OUVRANT + + + + + + + + 1 + + + + + + + + + + + + + + + + + + CROCHET_FERMANT + + + EGAL + + + + + + + + 6 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + $tab + + CROCHET_OUVRANT + + + + + + + + 2 + + + + + + + + + + + + + + + + + + CROCHET_FERMANT + + + EGAL + + + + + + + + 9 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + $tab + + CROCHET_OUVRANT + + + + + + + + 3 + + + + + + + + + + + + + + + + + + CROCHET_FERMANT + + + EGAL + + + + + + + + 9 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + $tab + + CROCHET_OUVRANT + + + + + + + + 4 + + + + + + + + + + + + + + + + + + CROCHET_FERMANT + + + EGAL + + + + + + + + 4 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + $tab + + CROCHET_OUVRANT + + + + + + + + 5 + + + + + + + + + + + + + + + + + + CROCHET_FERMANT + + + EGAL + + + + + + + + 2 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + $tab + + CROCHET_OUVRANT + + + + + + + + 6 + + + + + + + + + + + + + + + + + + CROCHET_FERMANT + + + EGAL + + + + + + + + 3 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + $tab + + CROCHET_OUVRANT + + + + + + + + 7 + + + + + + + + + + + + + + + + + + CROCHET_FERMANT + + + EGAL + + + + + + + + 1 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + $tab + + CROCHET_OUVRANT + + + + + + + + 8 + + + + + + + + + + + + + + + + + + CROCHET_FERMANT + + + EGAL + + + + + + + + 4 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + $tab + + CROCHET_OUVRANT + + + + + + + + 9 + + + + + + + + + + + + + + + + + + CROCHET_FERMANT + + + EGAL + + + + + + + + 5 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + + + + + + + + + ACCOLADE_FERMANTE + + + + + afficher + + PARENTHESE_OUVRANTE + + + + entier + $n + + + + + + + + PARENTHESE_FERMANTE + + + + + entier + $i + + + + + + + POINT_VIRGULE + + + ACCOLADE_OUVRANTE + + + + + $i + + + + EGAL + + + + + + + + 0 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + tantque + + + + + + + + + $i + + + + + + + + + + + + INFERIEUR + + + + + $n + + + + + + + + + + + + + + + + + + + + + + faire + + ACCOLADE_OUVRANTE + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + + $tab + + CROCHET_OUVRANT + + + + + + + + + $i + + + + + + + + + + + + + + + + + + + + + CROCHET_FERMANT + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + + $i + + + + EGAL + + + + + + + + + $i + + + + + + + + + PLUS + + + 1 + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + ACCOLADE_FERMANTE + + + + + + + ecrire + PARENTHESE_OUVRANTE + + + + + + + + 0 + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + POINT_VIRGULE + + + + + + + + ACCOLADE_FERMANTE + + + + + echanger + + PARENTHESE_OUVRANTE + + + + entier + $i + + + + + VIRGULE + + entier + $j + + + + + + + + + PARENTHESE_FERMANTE + + + + + entier + $temp + + + + + + + POINT_VIRGULE + + + ACCOLADE_OUVRANTE + + + + + $temp + + + + EGAL + + + + + + + + + $tab + + CROCHET_OUVRANT + + + + + + + + + $j + + + + + + + + + + + + + + + + + + + + + CROCHET_FERMANT + + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + $tab + + CROCHET_OUVRANT + + + + + + + + + $j + + + + + + + + + + + + + + + + + + + + + CROCHET_FERMANT + + + EGAL + + + + + + + + + $tab + + CROCHET_OUVRANT + + + + + + + + + $i + + + + + + + + + + + + + + + + + + + + + CROCHET_FERMANT + + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + $tab + + CROCHET_OUVRANT + + + + + + + + + $i + + + + + + + + + + + + + + + + + + + + + CROCHET_FERMANT + + + EGAL + + + + + + + + + $temp + + + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + + ACCOLADE_FERMANTE + + + + + trier + + PARENTHESE_OUVRANTE + + + + entier + $n + + + + + + + + PARENTHESE_FERMANTE + + + + + entier + $echange + + + + + VIRGULE + + entier + $j + + + + + VIRGULE + + entier + $m + + + + + + + + + POINT_VIRGULE + + + ACCOLADE_OUVRANTE + + + + + $m + + + + EGAL + + + + + + + + + $n + + + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + $echange + + + + EGAL + + + + + + + + 1 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + tantque + + + + + + + + + $echange + + + + + + + + + + + + EGAL + + + + 1 + + + + + + + + + + + + + + + + + + + faire + + ACCOLADE_OUVRANTE + + + + + $echange + + + + EGAL + + + + + + + + 0 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + $j + + + + EGAL + + + + + + + + 0 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + tantque + + + + + + + + + $j + + + + + + + + + + + + INFERIEUR + + + + + $m + + + + + + + + + MOINS + + + 1 + + + + + + + + + + + + + + + + + + + + faire + + ACCOLADE_OUVRANTE + + + + si + + + + + + + + + $tab + + CROCHET_OUVRANT + + + + + + + + + $j + + + + + + + + + PLUS + + + 1 + + + + + + + + + + + + + + + + + + + CROCHET_FERMANT + + + + + + + + + + + INFERIEUR + + + + + $tab + + CROCHET_OUVRANT + + + + + + + + + $j + + + + + + + + + + + + + + + + + + + + + CROCHET_FERMANT + + + + + + + + + + + + + + + + + + + + + alors + + ACCOLADE_OUVRANTE + + + + + echanger + PARENTHESE_OUVRANTE + + + + + + + + + + $j + + + + + + + + + + + + + + + + + + + + + + VIRGULE + + + + + + + + + $j + + + + + + + + + PLUS + + + 1 + + + + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + + POINT_VIRGULE + + + + + + + $echange + + + + EGAL + + + + + + + + 1 + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + ACCOLADE_FERMANTE + + + + + + + + + + $j + + + + EGAL + + + + + + + + + $j + + + + + + + + + PLUS + + + 1 + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + ACCOLADE_FERMANTE + + + + + + + + $m + + + + EGAL + + + + + + + + + $m + + + + + + + + + MOINS + + + 1 + + + + + + + + + + + + + + + + + + + POINT_VIRGULE + + + + + + + + + ACCOLADE_FERMANTE + + + + + + + + + ACCOLADE_FERMANTE + + + + + main + + PARENTHESE_OUVRANTE + + + PARENTHESE_FERMANTE + + + + + ACCOLADE_OUVRANTE + + + + + initialiser + PARENTHESE_OUVRANTE + + + PARENTHESE_FERMANTE + + POINT_VIRGULE + + + + + + + afficher + PARENTHESE_OUVRANTE + + + + + + + + + 10 + + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + + POINT_VIRGULE + + + + + + + trier + PARENTHESE_OUVRANTE + + + + + + + + + 10 + + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + + POINT_VIRGULE + + + + + + + afficher + PARENTHESE_OUVRANTE + + + + + + + + + 10 + + + + + + + + + + + + + + + + + + + + + PARENTHESE_FERMANTE + + POINT_VIRGULE + + + + + + + + + ACCOLADE_FERMANTE + + + + + + + + + + diff --git a/eval-partiel/runEval.sh b/eval-partiel/runEval.sh new file mode 100755 index 0000000..ddd17c9 --- /dev/null +++ b/eval-partiel/runEval.sh @@ -0,0 +1,157 @@ +#!/bin/bash + +################################################################################ +# Script d'évaluation automatique des compilateurs du projet. +# Compile le programme source et compare avec la référence. +# Comprend analyse lexicale, syntaxique, arbre abstrait, table des symboles et +# code MIPS. +################################################################################ + +# MODIFIEZ LES VARIABLES CI-DESSOUS AVEC LE CHEMIN/OPTIONS DE VOTRE COMPILATEUR + +MYCOMPILO="../compilateur-l" +MYCOMPILOLEX="${MYCOMPILO} -l" +MYCOMPILOSYNT="${MYCOMPILO} -s" +#MYCOMPILOASYNT="${MYCOMPILO} -a" +#MYCOMPILOTAB="${MYCOMPILO} -t" +#MYCOMPILOMIPS="${MYCOMPILO} -m" + +################################################################################ + +XMLDIFF="./compare_arbres_xml" +REGDIFF="diff -q -w" +EXITONFAIL=1 +declare -A testname +testname["lex"]="Analyse lexicale" +testname["synt"]="Analyse syntaxique" +#testname["asynt"]="Arbre abstrait" +#testname["tab"]="Table des symboles" +#testname["mips"]="Code machine MIPS" + +################################################################################ + +function diff_prog() { + diffprog=$1 + input=$2 + suffix=$3 + echo -e "\033[35m > ${testname[${suffix}]} (.${suffix})\033[0m" + if [ -f ref-${suffix}/$input.${suffix} ]; then + ${diffprog} output/${input}.${suffix} ref-${suffix}/${input}.${suffix} 2> /dev/null + if [ $? != 0 ]; then + echo -e "\033[31mTEST ${testname[${suffix}]} ÉCHOUÉ\033[0m" + echo -e "Pour connaître les différences, exécutez :" + echo -e " diff output/${input}.${suffix} ref-${suffix}/${input}.${suffix}" + if [ $EXITONFAIL = 1 ]; then exit 1; fi + else + echo -e "\033[32mTEST ${testname[${suffix}]} OK\033[0m" + fi + else + echo -e "\033[34mRéférence ref-${suffix}/${input}.${suffix} absente\033[0m" + fi +} + +################################################################################ + +function test_fichier_ok() { + input=$1 + echo -e "\n\033[4m ---- Test input/$input.l ----\033[0m" + if [ -f input/$input.l ]; then + echo -e "\033[35m > Reconnaissance (accepte l'entrée)\033[0m" + ${MYCOMPILOSYNT} input/$input.l > output/$input.synt + if [ $? != 0 ]; then + echo -e "\033[31mTEST Reconnaissance ÉCHOUÉ\033[0m" + echo -e "Le programme $input.l n'a pas été compilé correctement" + if [ $EXITONFAIL = 1 ]; then exit 1; fi + else + echo -e "\033[32mTEST Reconnaissance OK\033[0m" + fi + ${MYCOMPILOLEX} input/$input.l > output/$input.lex + diff_prog "${REGDIFF}" $input lex + diff_prog ${XMLDIFF} $input synt + #${MYCOMPILOASYNT} input/$input.l > output/$input.asynt + #diff_prog ${XMLDIFF} $input asynt + #${MYCOMPILOTAB} input/$input.l > output/$input.tab + #diff_prog "${REGDIFF}" $input tab + #${MYCOMPILOMIPS} input/$input.l > output/$input.mips + #diff_prog "${REGDIFF}" $input mips + else + echo -e "\033[31minput/$input.l non trouvé\033[0m" + echo -e "\033[31mTest impossible\033[0m" + fi +} + +################################################################################ + +function test_fichier_fail() { + input=$1 + echo -e "\n\033[4m ---- Test input/$input.l ----\033[0m" + ${MYCOMPILOSYNT} input/$input.l > output/$input.synt.xml + if [ $? = 0 ]; then + echo -e "\033[31mTEST REJET ÉCHOUÉ\033[0m" + echo -e "Le programme $input.l a été accepté alors qu'il aurait dû être rejeté" + if [ $EXITONFAIL = 1 ]; then exit 1; fi + else + echo -e "\033[32mTEST REJET OK\033[0m" + fi +} + +################################################################################ + +mkdir -p output +make + +echo -e "Votre compilateur : ${MYCOMPILO}" +if [ ! -f ${MYCOMPILO} ]; then + echo -e "\033[31mCompilateur introuvable" + echo -e "Modifiez la variable MYCOMPILO avant de lancer l'éval\033[0m" + exit 1 +fi + +################################################################################ + +echo -e "\033[1m\n>> 1) Tests connus OK\033[0m" + +test_fichier_ok affect +test_fichier_ok boucle +test_fichier_ok expression +test_fichier_ok max +test_fichier_ok tri + +################################################################################ + +echo -e "\033[1m\n>> 1) Tests connus FAIL\033[0m" + +test_fichier_fail affect-err + +################################################################################ + +echo -e "\033[1m\n>> 1) Tests nouveaux OK\033[0m" + +test_fichier_ok eval1 +test_fichier_ok eval2 +test_fichier_ok eval3 +test_fichier_ok eval4 +test_fichier_ok eval5 +test_fichier_ok eval6 +test_fichier_ok eval7 +test_fichier_ok eval8 + +# Decommenter +# test_fichier_ok test1 +# test_fichier_ok test2 +# test_fichier_ok test3 + +################################################################################ + +echo -e "\033[1m\n>> 1) Tests nouveaux FAIL\033[0m" + +test_fichier_fail eval1err +test_fichier_fail eval2err +test_fichier_fail eval3err +test_fichier_fail eval4err +test_fichier_fail eval5err + +# Decommenter +# test_fichier_fail test1err + +################################################################################ diff --git a/header/analyseur_syntaxyque.h b/header/analyseur_syntaxyque.h index c386614..c281509 100644 --- a/header/analyseur_syntaxyque.h +++ b/header/analyseur_syntaxyque.h @@ -37,6 +37,7 @@ void instructionTantque (void); void instructionAppel (void); void instructionRetour (void); void instructionEcriture (void); +void instructionPour (void); void instructionVide (void); void expression (void); void expressionBis (void); diff --git a/header/symboles.h b/header/symboles.h index e478bc1..2501b9a 100644 --- a/header/symboles.h +++ b/header/symboles.h @@ -2,7 +2,7 @@ #define EPSILON 0 -#define NB_NON_TERMINAUX 42 +#define NB_NON_TERMINAUX 43 #define _listeDecVariables_ 1 #define _listeDecFonctions_ 2 @@ -44,11 +44,12 @@ #define _expressionBis_ 39 #define _instructionFaire_ 40 #define _optListeDecVariables_ 41 +#define _instructionPour_ 42 /* symboles terminaux */ -#define NB_TERMINAUX 31 +#define NB_TERMINAUX 32 #define POINT_VIRGULE 1 #define PLUS 2 @@ -80,5 +81,4 @@ #define NOMBRE 28 #define FIN 29 #define VIRGULE 30 - - +#define POUR 31 \ No newline at end of file diff --git a/src/analyseur_lexical.c b/src/analyseur_lexical.c index 2812771..334860e 100644 --- a/src/analyseur_lexical.c +++ b/src/analyseur_lexical.c @@ -31,16 +31,16 @@ int codeSymbole[] = { }; char *tableMotsClefs[] = { - "si", "alors", "sinon", "tantque", "faire", "entier", "retour", "lire", "ecrire", '\0' + "si", "alors", "sinon", "tantque", "faire", "entier", "retour", "lire", "ecrire", "pour", '\0' }; int codeMotClefs[] = { - SI, ALORS, SINON, TANTQUE, FAIRE, ENTIER, RETOUR, LIRE, ECRIRE + SI, ALORS, SINON, TANTQUE, FAIRE, ENTIER, RETOUR, LIRE, ECRIRE, POUR }; char yytext[YYTEXT_MAX]; int yyleng; -int nbMotsClefs = 9; +int nbMotsClefs = 10; /* Compter les lignes pour afficher les messages d'erreur avec numero ligne */ int nb_ligne = 1; diff --git a/src/analyseur_syntaxyque.c b/src/analyseur_syntaxyque.c index 0b58dda..db72dc6 100644 --- a/src/analyseur_syntaxyque.c +++ b/src/analyseur_syntaxyque.c @@ -44,11 +44,11 @@ void syntaxErrorMsg( const char * msg ) void programme() { openSection( __func__ ); - if( est_premier( _optDecVariables_, uniteCourante ) || est_premier( _listeDecFonctions_, uniteCourante )) { + if( !est_premier( _optDecVariables_, uniteCourante ) && !est_premier( _listeDecFonctions_, uniteCourante ) && !est_suivant( _listeDecFonctions_, uniteCourante )) { + syntaxError(); + } else { optDecVariables(); listeDecFonctions(); - } else if ( !est_suivant( _listeDecFonctions_, uniteCourante ) ) { - syntaxError(); } closeSection( __func__ ); @@ -234,6 +234,8 @@ void instruction() { instructionRetour(); } else if( est_premier( _instructionEcriture_, uniteCourante ) ) { instructionEcriture(); + } else if( est_premier( _instructionPour_, uniteCourante ) ) { + instructionPour(); } else if( est_premier( _instructionVide_, uniteCourante ) ) { instructionVide(); } else { @@ -447,6 +449,42 @@ void instructionEcriture() { closeSection( __func__ ); } +void instructionPour() { + openSection( __func__ ); + + if( uniteCourante == POUR ) { + elementConsome(); + uniteCourante = yylex(); + + instructionAffect(); + expression(); + + if( uniteCourante == POINT_VIRGULE ) { + elementConsome(); + uniteCourante = yylex(); + + instructionAffect(); + + if( uniteCourante == FAIRE ) { + elementConsome(); + uniteCourante = yylex(); + + instructionBloc(); + + } else { + syntaxErrorMsg( "'faire' été attendu" ); + } + + } else { + syntaxErrorMsg( "';' été attendu" ); + } + } else { + syntaxErrorMsg( "'pour' été attendu" ); + } + + closeSection( __func__ ); +} + void instructionVide() { openSection( __func__ ); diff --git a/src/premiers.c b/src/premiers.c index e9b17ca..a9b7292 100644 --- a/src/premiers.c +++ b/src/premiers.c @@ -44,6 +44,7 @@ void initialise_premiers(void){ premiers[_instruction_][RETOUR] = 1; premiers[_instruction_][ECRIRE] = 1; premiers[_instruction_][POINT_VIRGULE] = 1; + premiers[_instruction_][POUR] = 1; premiers[_instructionAffect_][ID_VAR] = 1; @@ -58,6 +59,7 @@ void initialise_premiers(void){ premiers[_listeInstructions_][ECRIRE] = 1; premiers[_listeInstructions_][POINT_VIRGULE] = 1; premiers[_listeInstructions_][EPSILON] = 1; + premiers[_listeInstructions_][POUR] = 1; premiers[_instructionSi_][SI] = 1; @@ -72,6 +74,8 @@ void initialise_premiers(void){ premiers[_instructionEcriture_][ECRIRE] = 1; + premiers[_instructionPour_][POUR] = 1; + premiers[_instructionVide_][POINT_VIRGULE] = 1; premiers[_expression_][NON] = 1; diff --git a/src/suivants.c b/src/suivants.c index 60d1e2a..c158faa 100644 --- a/src/suivants.c +++ b/src/suivants.c @@ -48,6 +48,7 @@ void initialise_suivants(void){ suivants[_instruction_][RETOUR] = 1; suivants[_instruction_][ECRIRE] = 1; suivants[_instruction_][POINT_VIRGULE] = 1; + suivants[_instruction_][POUR] = 1; suivants[_instructionAffect_][ID_VAR] = 1; suivants[_instructionAffect_][ACCOLADE_FERMANTE] = 1; @@ -58,6 +59,7 @@ void initialise_suivants(void){ suivants[_instructionAffect_][RETOUR] = 1; suivants[_instructionAffect_][ECRIRE] = 1; suivants[_instructionAffect_][POINT_VIRGULE] = 1; + suivants[_instructionAffect_][POUR] = 1; suivants[_instructionBloc_][FIN] = 1; suivants[_instructionBloc_][ID_VAR] = 1; @@ -70,6 +72,7 @@ void initialise_suivants(void){ suivants[_instructionBloc_][ECRIRE] = 1; suivants[_instructionBloc_][POINT_VIRGULE] = 1; suivants[_instructionBloc_][SINON] = 1; + suivants[_instructionBloc_][POUR] = 1; suivants[_listeInstructions_][ACCOLADE_FERMANTE] = 1; @@ -82,6 +85,7 @@ void initialise_suivants(void){ suivants[_instructionSi_][RETOUR] = 1; suivants[_instructionSi_][ECRIRE] = 1; suivants[_instructionSi_][POINT_VIRGULE] = 1; + suivants[_instructionSi_][POUR] = 1; suivants[_optSinon_][ID_VAR] = 1; suivants[_optSinon_][ACCOLADE_OUVRANTE] = 1; @@ -92,6 +96,7 @@ void initialise_suivants(void){ suivants[_optSinon_][RETOUR] = 1; suivants[_optSinon_][ECRIRE] = 1; suivants[_optSinon_][POINT_VIRGULE] = 1; + suivants[_optSinon_][POUR] = 1; suivants[_instructionTantque_][ID_VAR] = 1; suivants[_instructionTantque_][ACCOLADE_OUVRANTE] = 1; @@ -102,6 +107,7 @@ void initialise_suivants(void){ suivants[_instructionTantque_][RETOUR] = 1; suivants[_instructionTantque_][ECRIRE] = 1; suivants[_instructionTantque_][POINT_VIRGULE] = 1; + suivants[_instructionTantque_][POUR] = 1; suivants[_instructionAppel_][ID_VAR] = 1; suivants[_instructionAppel_][ACCOLADE_OUVRANTE] = 1; @@ -112,6 +118,7 @@ void initialise_suivants(void){ suivants[_instructionAppel_][RETOUR] = 1; suivants[_instructionAppel_][ECRIRE] = 1; suivants[_instructionAppel_][POINT_VIRGULE] = 1; + suivants[_instructionAppel_][POUR] = 1; suivants[_instructionRetour_][ID_VAR] = 1; suivants[_instructionRetour_][ACCOLADE_OUVRANTE] = 1; @@ -122,6 +129,7 @@ void initialise_suivants(void){ suivants[_instructionRetour_][RETOUR] = 1; suivants[_instructionRetour_][ECRIRE] = 1; suivants[_instructionRetour_][POINT_VIRGULE] = 1; + suivants[_instructionRetour_][POUR] = 1; suivants[_instructionEcriture_][ID_VAR] = 1; suivants[_instructionEcriture_][ACCOLADE_OUVRANTE] = 1; @@ -132,6 +140,18 @@ void initialise_suivants(void){ suivants[_instructionEcriture_][RETOUR] = 1; suivants[_instructionEcriture_][ECRIRE] = 1; suivants[_instructionEcriture_][POINT_VIRGULE] = 1; + suivants[_instructionEcriture_][POUR] = 1; + + suivants[_instructionPour_][ID_VAR] = 1; + suivants[_instructionPour_][ACCOLADE_OUVRANTE] = 1; + suivants[_instructionPour_][ACCOLADE_FERMANTE] = 1; + suivants[_instructionPour_][SI] = 1; + suivants[_instructionPour_][TANTQUE] = 1; + suivants[_instructionPour_][ID_FCT] = 1; + suivants[_instructionPour_][RETOUR] = 1; + suivants[_instructionPour_][ECRIRE] = 1; + suivants[_instructionPour_][POINT_VIRGULE] = 1; + suivants[_instructionPour_][POUR] = 1; suivants[_instructionVide_][ID_VAR] = 1; suivants[_instructionVide_][ACCOLADE_OUVRANTE] = 1; @@ -142,6 +162,7 @@ void initialise_suivants(void){ suivants[_instructionVide_][RETOUR] = 1; suivants[_instructionVide_][ECRIRE] = 1; suivants[_instructionVide_][POINT_VIRGULE] = 1; + suivants[_instructionVide_][POUR] = 1; suivants[_expression_][POINT_VIRGULE] = 1; suivants[_expression_][ALORS] = 1;