1 1 Un peu de cours 1 1 1 Analyse Lexicale avec flex Le but de l'analyse lexicale est de transformer une suite de symboles en terminaux (un terminal peut être
Previous PDF | Next PDF |
[PDF] Générer un analyseur avec Flex&Bison - ENIB
Générer un analyseur avec Flex&Bison Généralités Analyse lexicale avec Flex Analyse syntaxique avec Bison Association de Flex et Bison Fabrice Harrouet
[PDF] Chapitre 6 : Outil danalyse lexicale : Flex - Pr ABDELMAJID
Description de Flex Quelques exemples simples Format d'un fichier Flex Prof Abdelmajid Dargham Chapitre 6 : Analyse lexicale avec Flex
[PDF] Analyse lexicale
Outils automatiques: Flex Révision hiver 2018 p 7 Interface avec l'analyseur lexical entrée analyseur lexical (Lien avec l'horizon de l'analyseur lexical )
[PDF] L3 Informatique Compilation TP01 - ANALYSE LEXICALE 1 Objectif
L'objectif de ce TP est de programmer un analyseur lexical pour le langage L symboles h avec flex, vous pouvez inclure symboles h dans votre fichier flex
[PDF] Thème 1 Analyse Lexicale, Analyse Syntaxique - Laure Gonnord
1 1 Un peu de cours 1 1 1 Analyse Lexicale avec flex Le but de l'analyse lexicale est de transformer une suite de symboles en terminaux (un terminal peut être
[PDF] lex et yacc
lexicales, afin qu'elles puissent être partagées par l'analyseur syntaxique et l' analyseur lexical $ flex calc l produit le fichier : lex yy c qui contient le code en c de
[PDF] Travaux Pratiques Compilation no1 - IGM
Compiler l'analyseur lexical avec flex tp1-ex1 l, ceci engendre un fichier lex yy c — Compiler le fichier C obtenu avec gcc, puis tester l'exécutable a out obtenu
[PDF] Chapitre 1 Construction dun analyseur lexical : scanner - Free
Après l'analyse syntaxique, on récupère un ensemble de tokens Il s'agit de voir Type 1, grammaire context sensitive avec des règles de type uAv → uwv Reconnu Comment spécifier les tokens lorsqu'on les définit dans flex ? L'idée est
[PDF] Introduction à la compilation - Département dinformatique de l
La configuration de flex est décrite dans un fichier texte (extensions l ou lex) ➢ Flex traduit L'analyseur lexical le plus court recopie le flot d'entrée sur le flot de sortie : Cours de l'analyse reprend avec les autres expressions rationnelles
[PDF] analyseur syntaxique avec flex et bison
[PDF] exercice flex avec correction
[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
Thème 1
Analyse Lexicale, Analyse Syntaxique
1.1 Un peu de cours
1.1.1 Analyse Lexicale avec
fl exLe but de l'analyse lexicale est de transformer une suite de symboles en terminaux (un terminal peut être
par exemple un nombre, un signe '+', un identi fi cateur, etc...). Une fois cette transformation effectuée, la main est repassée à l'analyseur syntaxiq ue (voir ci-dessous). Le but de l'a nalyseur lexical est donc de "consommer" des symboles et de les fournir à l'analyseur syntaxique. Un fi chier de description pour Lex est for mé de trois parties, selon le schéma suivant : declarations définition des symboles code additionnel dans lequel aucune partie n'est obl igatoire. Cependant, le premier%%l'est, afin d'indiquer la séparation entre les déclarations et les productions.Les déclarations
Cette partie d'un
fi chier Lex peut contenir : - Du code écrit dans le lan gage cible, encadré par %{et%}, qui se retrouvera au début du fichier synthétisé par Lex. C'est ici que l'on va spéci fi er les fi chiers à inclure. Lex recopie tel quel tout ce qui est écrit entre ces deux signes, qui devront toujours être placés en début de ligne. - Des expressions régulières (d ont on donne une partie de la synt axe abondante dans la Figure 1.1) dé fi nis- sant des notions non terminales, telle s que lettre, chiffre et nombre. Ces spéci fi cations sont de la forme : notion expression_reguliereExemples :
blancs [\t\n ]+ lettre [A-Za-z] chiffre10 [0-9] chiffre16 [0-9A-Fa-f] entier10 {chiffre10}+Les dé
fi nitions des symboles Cette partie sert à indiquer à Lex ce qu'il devra faire lorsqu'il rencontrera tel ou tel symbole. Celle-ci peut contenir : - Desspéci fi deconsommerlesterminaux,etqui renvoie un entier. - Des productions de la forme : expression_reguliere actionSi l'action est absente, Lex recopiera les caractères tels quels sur la sortie standard. Si l'action est présente, elle
sera écrite en code du langage cible. Exemple, les deux règles su ivantes : [ \t]+$ ; [ \t] printf(" "); Erwan Guillou et Laure Gonnord et Nicolas Louvet3/13Université Lyon 1, FST, Dép
artement Informatique, M1 Cahier d'exercices MIF12 - Automne 2015FIGURE1.1 - Expressions régulières en
Flex, syntaxe et sémantique
permettent de supprimer tous les espac es inutiles dans un fi chier. Si l'action comporte plus d'une seule ins- truction ou ne peut tenir sur une seule ligne, elle devra être parenthésée par {et}. Il faut de plus savoir que les commentaires tels que /* ... */ne peuvent être présents dans la deuxième partie d'un fichier Lex ques'il sont placés dans les actions parenthésées. Dans le cas contraire, ceux-ci seraient considérés par Lex comme
des expressions régulières ou des actions, ce qui donnerait lieu à des messages d'erreur, ou, au mieux, à un comportement inattendu. A fi ndepouvoirutiliserdanslesactions lavaleurdel'expressionreco nnue,Lexfournitunevariableno mméeyytextqui désigne dans les actions les caractères acceptés par l'expression régulière à gauche de la règ
le. Il s'agit d'un tableau de caractèr es de longueur yyleng(donc défini commechar yytext[yyleng]).Le code additionnel
Cette section du
fi chier fl ex contient les implémentations C des fonctions nécessaires. Si aucune fonctionmainn'est écrite (et que le fichier n'est pas lié à un fichier bison qui y fait référence), le code
suivant sera automatiquement généré lors de la compilation : int main() { yylex();La compilation
La génération de l'exécutable se fera à l'aide des commandes suivantes : flex -o lexer.c lexer.l gcc -o lexer.o -c lexer.c gcc -o main lexer.o -lfl1.1.2 Analyse syntaxique avec bison
L'outil bison permet de générer des analyseurs syntaxiques. Un fi chier d'entrée décrit la gramma ire à analy- ser ainsi que les attributs et action s sémantiques associés. Un fi chier .cest généré à partir de cette description, celui-ci contient la mise en oeuvre de l'automate à pile pour une anal yse ascendante. L'appel de l'analys eur se fait par le biais de la fonction int yyparse ()créée par bison. Les fichiers de description de grammaire pour bison ont un formalisme similaire à ceux de Flex :Définitions
Erwan Guillou et Laure Gonnord et Nicolas Louvet4/13Université Lyon 1, FST, Dép
artement Informatique, M1 Cahier d'exercices MIF12 - Automne 2015Règles de production
Code C/C++
Les dé
fi nitions Cette section permet de décrire certaines parties de la gram maire (ensemble des symbolesterminaux, axiomes, attributs sémantiques...). Il est possible d'y inclure du code C en l'encadrant avec
%{et%}. Le mot-clé%startpermet de définir l'axiome de la grammaire. Le mot-clé%tokenpermet de définir les
éléments du vocabulaire terminal. Les mot-clés %left,%rightet%nonassocpermettent de définir la priorité (ordre de spéci fi cation des éléments) et l'associativité des opérateurs.
Les règles de production
Les règles de production sont don
nées sous la forme symbole : règle [action]; L'action est ici encore optionnelle. Dans le cas où un symbole accèp te plusieurs dérivations possibles, on utili- sera le caractère '|' pour différencier les règles. Exemples :A : a b c ... z
A : a b c
| d e fEXEMPLE1. Soit la grammaire des expr
essions arithmétiques (addition et multip lication) entières :E -> E + E | E * E | cste
Elle sera décrite par le
fi chier Bison suivant : %start E %token + %token * %token csteE : E + E
| E * E | cste int main ( int argc, char** argv ) { yyparse ();Le code C
La dernière section du
fi chier de description contient du code C (fonctions, variables globales...). Si aucune fonction mainn'est écrite, le code suivant sera automatiquement généré lors de la compilation : main() { yyparse();1.1.3 Faisons communiquer Flex et Bison
L'analyseur syntaxique fait appel à l'analyseur lexical pour connaître le prochain symbole dans la chaîne
à analyser. Pour Bison l'appe
l à l'analyseur lexical se fait pa r le biais de la fonction int yylex (). Dans la majeure partie des cas, cet analys eur lexical sera généré à l'a ide de Flex. La Figure 1.2 illu stre la communicationet la chaîne de compilation associée. La génération de l'exécutable se fera à l'aide des commandes suivantes :
Erwan Guillou et Laure Gonnord et Nicolas Louvet5/13Université Lyon 1, FST, Dép
artement Informatique, M1 Cahier d'exercices MIF12 - Automne 2015 flex -o lexer.c lexer.l bison -d -o parser.c parser.y gcc -o parser.o -c parser.c gcc -o lexer.o -c lexer.c gcc -o main parser.o lexer.o -lflFIGURE1.2 - Chaîne de compilation Flex/Bison
L'option
-dde bison permet de dire à ce dernier de générer un fichier.h(iciparser.h) contenant la dé-
fi nition des constantes associées aux différ ents symboles terminaux de la gramma ire. Ce fi chier est à inclure#include