bison et yacc
Bison est un générateur d'analyse syntaxique, en remplacement de YACC. YACC signifie Encore un Autre Compilateur de Compilateurs (Yet Another Compiler Compiler). Qu'est-ce que Bison alors ? C'est un programme qui génère un programme qui analyse la structure d'un fichier texte. Au lieu d'écrire le programme, l'utilisateur spécifie comment les choses doivent être reliées et, avec ces règles, un programme est construit pour analyser le fichier texte.
Il y a de nombreux exemples où une structuration est nécessaire, l'un d'eux est une calculatrice.
Soit la chaine :
1 + 2 * 3
Un humain peut facilement arriver au résultat de 7. Pourquoi ? A cause de la structure. Notre cerveau sait comment interpréter la chaîne. L'ordinateur ne le sait pas, et Bison est un outil pour l'aider à comprendre cela, en présentant la chaîne sous la forme suivante au compilateur :
+
/ \
* 1
/ \
2 3
En commençant en bas de l'arbre, et en arrivant aux nombres 2 et 3, qui sont liés par un symbole de multiplication, l'ordinateur multiplie 2 par 3. Le résultat de cette multiplication est mémorisé et la chose suivante que l'ordinateur voit est le résultat de 2*3 et le nombre 1 qui sont reliés par le symbole d'addition. L'ajout de 1 au résultat précédent donne 7. En calcul, les opérations les plus complexes peuvent être exprimées sous ce format d'arbre, et l'ordinateur commence simplement en bas, et travaille en cheminant vers le haut, pour arriver à la réponse correcte. Bien entendu, Bison n'est pas utilisé uniquement pour les calculatrices.
Nous créons un script yacc qui appelle bison avec l'option -y. Ceci est fait pour des raisons de compatibilté avec des programmes qui utilisent yacc au lieu de bison.
Bison-1.31 nécessite que les programmes suivants soient installés:
bash: sh
binutils: ar, as, ld, ranlib
diffutils: cmp
fileutils: chmod, cp, install, ln, ls, mkdir, mv, rm, rmdir
gcc: cc, cc1, collect2, cpp0, gcc
grep: egrep, fgrep, grep
make: make
sed: sed
sh-utils: basename, dirname, echo, expr, hostname, sleep, uname
texinfo: install-info
textutils: cat, head, tr, uniq