On demande de réaliser, à l'aide des outils Flex et Bison, un interpréteur d'expressions ensemblistes répondant aux spécifications suivantes (on considérera uniquement des ensembles d'entiers compris entre 1 et 32):
a..z A..Z identificateur mono-lettre (ident) non "case-sensitive" { } délimiteurs classiques des ensembles := affectation , séparateur d'éléments 1..32 seuls éléments possibles \n fin de ligne union UNION union ensembliste inter INTER intersection ensembliste comp COMP complémentaire dans {1..32} diff DIFF différence ensembliste
liste ::= <empty> // sortie de l'interpréteur | liste instruction '\n' // interprétation de // l'instruction instruction ::= ident ':=' expression // calcul de l'expression et // affectation | ident // affichage expression ::= operande // renvoie l'opérande | operande operateur2 operande // renvoie le résultat de | operateur1 operande // l'opération ensembliste operateur2 ::= 'UNION' | 'INTER' | 'DIFF' | 'union' | 'inter' | 'diff' operateur1 ::= 'COMP' | 'comp' operande ::= ident | ensemble ensemble ::= { } // ensemble vide | { liste-elements } // ensemble non vide liste-elements ::= élément | élément , liste-elements
A := { } met l'ensemble vide dans A a := { 1, 22 } met dans A l'ensemble { 1, 22 } b := a UNION { 3 } met dans B l'union de A et du singleton { 3 } B affiche l'ensemble B : { 1, 3, 22 } C := { 1, 3, 5 } met dans C l'ensemble { 1, 3, 5 } A := B inter C met dans A l'intersection de B et de C a affiche l'ensemble A : { 1, 3 }