Upload
anais-perrin
View
104
Download
2
Embed Size (px)
Citation preview
Groupe IHMGroupe IHM
Isabelle BONDOUX
Cédric CASTAGNE
Samy FOUILLEUX
Damien BARON
Maxime CHAMBREUIL
UV d’Algorithmique - ASI3 - Année 2001 / 2002
DéroulementDéroulement
Notre rôle et notre conception de l’IHMLexèmes fixés et génériquesLa grammaireLe LexLe Yacc
UV d’Algorithmique - ASI3 - Année 2001 / 2002
Notre rôle et notre conception Notre rôle et notre conception de l’IHMde 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ériquesLexèmes fixés et génériques
Def: ensemble de caractères formant une unité sémantique
Opérateurs de base : =,+,-,*,/,divOpérateurs sur les entiers : !, A , C
Chiffre: ‘0’, ‘1’, …, ‘9’NbeEntier: chiffre (chiffre)*
UV d’Algorithmique - ASI3 - Année 2001 / 2002
La grammaire 1/2La 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 / 2La grammaire 2 / 2Associativité
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 / 2Le 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 / 2Le 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 / 3Le 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 / 3Le 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 / 3Le 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 CompilationLa 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
ConclusionConclusionLes 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