Flex et bison

leroiloup Messages postés 4 Date d'inscription vendredi 14 mars 2008 Statut Membre Dernière intervention 19 avril 2009 - 19 avril 2009 à 18:28
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 22 avril 2009 à 16:45
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):





<hr width= "100%" />

Vocabulaire


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





<hr width= "100%" />

Grammaire


liste :: = // 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





<hr width="100%" />

Exemple d'exécution


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 }






<hr width="100%" />


Indication: grâce à
un codage des ensembles sur des entiers longs (32 bits),
on pourra réaliser
simplement les opérations ensemblistes avec les opérateurs
"bitwise" du C/C++

( & | ~ )

1 réponse

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
22 avril 2009 à 16:45
C'est une blague, tu crois que tu va poster ton énoncé et qu'on va te le résoudre comme cela ? On n'est pas là pour te faire tes devoirs. Si tu bloques sur un morceau de code, tu peux demander, mais tu rêves vraiment si tu crois que tout va te tomber tout cuit dans la bouche.
0
Rejoignez-nous