[PDF] [PDF] Générer un analyseur avec Flex&Bison - ENIB

Analyse lexicale avec Flex Analyse syntaxique avec Bison Association de Flex et Bison Code sur une seule ligne ou bloc avec { sur la même ligne que l'ER ex : {integer} Le décalage par défaut est correct → on ne change rien



Previous PDF Next PDF





[PDF] Correction TD de Traduction no1 - IGM

Correction TD de Traduction no1 Transposer en flex les expressions réguli` eres du premier exercice rappel 2: bien sauver un programme flex avec des



[PDF] Travaux Pratiques Compilation no1 - IGM

Le sujet est long, mais plusieurs exercices (et leurs solutions ) sont très courts Compiler l'analyseur lexical avec flex tp1-ex1 l, ceci engendre un fichier



[PDF] Compilation: Lex & Yacc

2 8 Exercices Différence avec sed, perl, le traitement n'est pas réduit à une sub- stitution, le filtre lex/flex utilise la macro "YY_INPUT(buf,result,max_size)" pour lire Écrivez un analyseur syntaxique qui vérifie qu'un script est correct



[PDF] TP 3 – Flex TP 4 – Bison

Exercice 1 Ecrire un programme Flex qui remplace chaque occurrence du mot " bon" par en entrée est analysée avec succès Exercice 2 Modifier l'analyseur syntaxique de l'exercice 1 de façon qu'il affiche le nombre de lettres "a" et le 



[PDF] Thème 1 - Laure Gonnord

1 1 1 Analyse Lexicale avec flex Le but de Cahier d'exercices MIF12 – Automne 2015 FIGURE 1 1 – Expressions régulières en Flex, syntaxe et sémantique



[PDF] Fiche de TD-TP no 3

Proposez une correction Exercice 4 Considérez Modifiez le fichier lexeur lex de l'exercice 8 (TP 1) et intégrez-le avec un fichier parseur y qui fasse l'analyse 



[PDF] Générer un analyseur avec Flex&Bison - ENIB

Analyse lexicale avec Flex Analyse syntaxique avec Bison Association de Flex et Bison Code sur une seule ligne ou bloc avec { sur la même ligne que l'ER ex : {integer} Le décalage par défaut est correct → on ne change rien



[PDF] Travaux Dirigés et Pratiques dinterprétation et compilation - LIRMM

13 jan 2009 · Exercice 3 Ecrire un analyseur lexical reconnaissant l'ensemble des expressions régulières des exercices précédents à l'aide de flex L'action 



[PDF] tp et td

Exercice 2 : Analyse lexicale, syntaxique, traduction, évaluation et typage Exercice no 2 6 de le langage des mots avec un seul b, et au moins un a, – le langage des mots Exercice 8 : Prise en main de l'outil lex-flex Complétez le ficher 

[PDF] lex yacc exemple

[PDF] allocution bienvenue association

[PDF] fin de la démocratie athénienne

[PDF] l'apogée d'athènes

[PDF] fondation d'athènes

[PDF] apogée d'athènes date

[PDF] auteurs francophones connus

[PDF] liste des auteurs africains et leurs oeuvres pdf

[PDF] auteurs francophones contemporains

[PDF] littérature francophone est elle une littérature française

[PDF] auteurs francophones africains

[PDF] littérature francophone définition

[PDF] auteurs francophones les plus lus

[PDF] le jeu des acteurs au théâtre dissertation

[PDF] l avant scène théâtre

[PDF] Générer un analyseur avec Flex&Bison - ENIB %Techniques de compilation enib, F.H ... 1/44Generer un analyseur avecFlex&Bison

Generalites

Analyse lexicale avecFlex

Analyse syntaxique avecBison

Association deFlexetBisonFabriceHarrouet

Ecole Nationale d'Ingenieurs de Brest

harrouet@enib.fr http://www.enib.fr/~harrouet/ %Flex&Bisonenib, F.H ... 2/44Origine des outils.Lex&Yacc

Generateurs d'analyseurs lexicaux/syntaxiques enC

'annees 1970, laboratoiresBell

OutilsUNIX(Posix) standards

+ de nombreuses variantes (commerciales ou non) .Flex&Bison

VersionGNUdeLex&Yacc

Flex:\fastLex"Bison: jeu de mot surYacc

Beaucoup de possibilites supplementaires !

Disponible pour un tres grand nombre de plateformes .9de nombreux outils dierents ayant le m^eme propos

AntLR,Spirit...

On retrouve des choses issues deLex&Yacc

%Flex&Bisonenib, F.H ... 3/44Principe des outils .Lex/Flex:LEXical analyzer

Reconnaisseur de langages reguliers

Expressions rationnelles!codeCd'un analyseur lexical

Permet de reconna^tre lesmotsd'un langage

.Yacc/Bison:Yet Another Compiler Compiler

Reconnaisseur de langages non contextuels

Grammaire non contextuelle!codeCd'un analyseur syntaxique

Permet de reconna^tre lesphrasesd'un langage

%Flex&Bisonenib, F.H ... 4/44Principe des outilsBisonCompilation et

édition de liens

Fichier Flex

Fichier BisonFichier C

Fichier C

Fichiers CExécutable

Flex.Generation d'analyseurs statiques et non dynamiques Le codeCproduit est specique au langage a reconnaitre!ecacite Compilation du code genere comme le reste de l'application Modif du langage!regeneration du code des analyseurs %A. lexicale enFlexenib, F.H ... 5/44Structure d'un programmeFlex%{ %}Pré-code C

Définitions et options

Règles de production

Post-code CFichier FlexFichier C généré

Déclarations, macros

Tables d"analyse

Copie du pré-code C

Copie du post-code Cint yylex(void)

Copie du code C

Autres fonctions ....Pre/post-codeC:duCtout a fait classique .Options :%quelquechosepour parametrer le fonctionnement .Denitions :Expressions rationnelles auxquelles on attribue un nom .Regles de production :AssociationsER!codeCa executer %A. lexicale enFlexenib, F.H ... 6/44Expressions rationnelles enFlex.Comprend lesER POSIX

Voir le cours correspondant

.Quelques possibilites supplementaires

Unatomepeut ^etre une cha^neClitterale

ex :"ab"f3g !ababab

Les caracteres speciaux duCsont reconnus

ex :Hello\tWorld,Hello\123World,Hello\x2aWorld La notationf gpermet aussi de reutiliser uneERnommee ex :(fintegerg|frealg)?(integeretrealdenies avant)

L'atome<>represente la n de chier

Lesstart-conditions(voir plus loin)

%A. lexicale enFlexenib, F.H ... 7/44SyntaxeFlex.Denition desERnommees Un nomcolle a gauche, une ou plusieurs espaces, uneER ex :integer [1-9][0-9]*|0 ex :indent [a-zA-Z][0-9a-zA-Z]* .Regles de production UneERcollee a gauche, une ou plusieurs espaces, du codeC Code sur une seule ligne ou bloc avecfsur la m^eme ligne que l'ER ex :fintegergcerr << "INTEGER" << endl; ex :findentg f cerr << "IDENT" << endl; g Les commentairesne doivent pas^etre colles a gauche (!ER!) %A. lexicale enFlexenib, F.H ... 8/44L'analyseur genere.La fonctionint yylex(void)

Extrait des caracteres du

uxyyin(stdinpar defaut) Confronte les sequences auxERdes regles de production Test de haut en bas,la plus longuecorrespondance est retenue

Execute les actions semantiques (codeC) associees

Variableyytext: cha^ne de caracteres correspondant a l'ER

Variableyyleng: longueur deyytext

Ecrit lesnon-correspondancessuryyout(stdoutpar defaut) Jusqu'a la n de chier ou unreturndans les actionsC .La valeur de retour

0en cas de n de chier

Un code numerique (#define,enum) indiquant l'ERreconnue !Analyse lexicale %A. lexicale enFlexenib, F.H ... 9/44Compteur de lignes, mots et caracteres%{ int nbChar=0,nbWord=0,nbLine=0; $ %} $ flex -oprog.c prog.l $ gcc -oprog prog.c /* doesn't need yywrap() */ $ ./prog < prog.l %option noyywrap 24 39 347 endOfLine \n character [^ \t\n] {endOfLine} { ++nbChar; ++nbLine; } {character}+ { nbChar+=yyleng; ++nbWord; } . { ++nbChar; } int main(void) yylex(); fprintf(stderr,"%d\t%d\t%d\n",nbLine,nbWord,nbChar); return(0); %A. lexicale enFlexenib, F.H ... 10/44Un analyseur trivial%{ $ cat file.txt %} var1=123*45.67; %option noyywrap _attr+=var1; integer [0-9]+ $ ./prog < file.txt real [0-9]+\.[0-9]*|\.[0-9]+ IDENT [var1] ident [a-zA-Z_][0-9a-zA-Z_]* UNKNOWN [=] %% INTEGER [123] {real} { fprintf(stderr,"REAL [%s]\n",yytext); } UNKNOWN [*] {integer} { fprintf(stderr,"INTEGER [%s]\n",yytext); } REAL [45.67] {ident} { fprintf(stderr,"IDENT [%s]\n",yytext); } UNKNOWN [;] \n { fprintf(stderr,"NEW_LINE [%s]\n",yytext); } NEW_LINE [ . { fprintf(stderr,"UNKNOWN [%s]\n",yytext); } ] %% IDENT [_attr]

UNKNOWN [+]

int UNKNOWN [=] main(void) IDENT [var1] { UNKNOWN [;] yylex(); NEW_LINE [ return(0); ] %A. lexicale enFlexenib, F.H ... 11/44Un analyseur plus conventionnel | 1/2%{ $ cat file.txt #include var1=123*45.67; enum {INTEGER=1,REAL,IDENT,NEW_LINE,UNKNOWN}; _attr+=var1; char globalValue[0x100]; $ ./prog < file.txt %} IDENT [var1]

UNKNOWN [=]

%option noyywrap INTEGER [123]

UNKNOWN [*]

integer [0-9]+ REAL [45.67] real [0-9]+\.[0-9]*|\.[0-9]+ UNKNOWN [;] ident [a-zA-Z_][0-9a-zA-Z_]* NEW_LINE [ %% IDENT [_attr]

UNKNOWN [+]

{real} { strcpy(globalValue,yytext); return(REAL); } UNKNOWN [=] {integer} { strcpy(globalValue,yytext); return(INTEGER); } IDENT [var1] {ident} { strcpy(globalValue,yytext); return(IDENT); } UNKNOWN [;] \n { strcpy(globalValue,yytext); return(NEW_LINE); } NEW_LINE [ . { strcpy(globalValue,yytext); return(UNKNOWN); } ]

END_OF_FILE

%A. lexicale enFlexenib, F.H ... 12/44Un analyseur plus conventionnel | 2/2int main(void) int token; doquotesdbs_dbs2.pdfusesText_2