Groupe IHM Isabelle BONDOUX Cédric CASTAGNE Samy FOUILLEUX Damien BARON Maxime CHAMBREUIL UV d’Algorithmique - ASI3 - Année 2001 / 2002
Déroulement Notre rôle et notre conception de l’IHM Lexèmes fixés et génériques La grammaire Le Lex Le Yacc UV d’Algorithmique - ASI3 - Année 2001 / 2002
Notre rôle et notre conception de l’IHM Ce que rentre l’utilisateur Ce que nous en faisons Ce que nous retournerons, un jour…avant le mois de juillet UV d’Algorithmique - ASI3 - Année 2001 / 2002
Lexèmes fixés et génériques Def: ensemble de caractères formant une unité sémantique Opérateurs de base : =,+,-,*,/,div Opérateurs sur les entiers : !, A , C Chiffre: ‘0’, ‘1’, …, ‘9’ NbeEntier: chiffre (chiffre)* UV d’Algorithmique - ASI3 - Année 2001 / 2002
La grammaire 1/2 Arbre de priorité Exemple: Facteur Terme | Facteur OpMaj Facteur | (Expr1) Terme NbeReel | NbeEntier | Constante | Matrice OpMaj * | / | div | mod | ^ | . Constante PI | e | PHI | EM UV d’Algorithmique - ASI3 - Année 2001 / 2002
La grammaire 2 / 2 Associativité Exemple : 4 * 3 * 2 = ( 4 * 3 ) * 2 à gauche 4 * 3 * 2 = 4 * ( 3 * 2 ) à droite UV d’Algorithmique - ASI3 - Année 2001 / 2002
Le Lex 1 / 2 Analyseur lexical = découpage de la chaîne de caractères Il reconnaît le type des expressions saisies Il envoie au Yacc la valeur et le type d’une expression reconnue UV d’Algorithmique - ASI3 - Année 2001 / 2002
Le Lex 2 / 2 %{#include<stdlib.h> %} chiffre [0-9] %% « div » {return DIV;} {chiffre}+ {return creerEntierInfiniAPartirDe(yytext);} [ \t\n] {yyerror (« Caractère inconnu »);} main() {yylex();} UV d’Algorithmique - ASI3 - Année 2001 / 2002
Le Yacc 1 / 3 Analyseur grammatical Il appelle les fonctions de calcul Il affiche le résultat et les erreurs du programme UV d’Algorithmique - ASI3 - Année 2001 / 2002
Le Yacc 2 / 3 %{#include « Matrice.h » typedef struct {…} typeRetourneParDollar; %} %union{ EntierInfini entier;}; %token <entier> NbeEntier %left ‘=‘, ‘+’,’’-’ %type <dollar> S Expr1 … Facteur Terme %start Program %% UV d’Algorithmique - ASI3 - Année 2001 / 2002
Le Yacc 3 / 3 %% Program:S’\n’ {afficher($1);} S:Variable’=‘Expr1 {$$=affecter($1,$3);} | Expr1 {$$=$1;} ; void yyerror(char* s) {printf(stdout, »%s\n », s);} int main (void) {yyparse(); return 0;} UV d’Algorithmique - ASI3 - Année 2001 / 2002
La Compilation bison –d virgule.y produit les fichiers virgule.tab.c et virgule.tab.h flex virgule.lex produit le fichier lex.yy.c gcc lex.yy.c virgule.tab.c UV d’Algorithmique - ASI3 - Année 2001 / 2002
Conclusion Les fichiers lex et yacc compilent !!! Reste à faire : récupérer les .o et débuguer Nous avons découvert : La compilation, Lex et Yacc, l’IHM Organisation du travail en groupe Motivés pour l’UV Libre ??? UV d’Algorithmique - ASI3 - Année 2001 / 2002