[PDF] [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



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] flex et bison pdf

[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 ex

Le 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_reguliere

Exemples :

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 action

Si 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/13

Université Lyon 1, FST, Dép

artement Informatique, M1 Cahier d'exercices MIF12 - Automne 2015

FIGURE1.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 que

s'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ée

yytextqui 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 fonction

mainn'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 -lfl

1.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/13

Université Lyon 1, FST, Dép

artement Informatique, M1 Cahier d'exercices MIF12 - Automne 2015

Règles de production

Code C/C++

Les dé

fi nitions Cette section permet de décrire certaines parties de la gram maire (ensemble des symboles

terminaux, 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 f

EXEMPLE1. 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 cste

E : 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 communication

et 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/13

Université 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 -lfl

FIGURE1.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) dans le fichierlexer.lpour que l'analyseur lexical puisse renvoyer la valeur de ces

constantes en résultat. Dans les acti ons de l'analyseur lexical, on aura un return "symbole» où "symbo le» est l'une des valeurs dé fi nies dans les %token. E

XEMPLE2 (Le classique a

n b n , en fl ex+bison). Le fi chier Flex retourne des tokens : #include "parser.h" int yyerror (char*); %} a return TOKEN_A; b return TOKEN_B; (.|\n) yyerror ( "symbole non reconnu" ); int yyerror ( char* m ) { printf ( "%s\n", m ); return 1;

Ces tokens sont utilisés dans le

fi chier Bison (remarquez la déclaration) : %token TOKEN_A %token TOKEN_B %start E

E : TOKEN_A E TOKEN_B

| TOKEN_A TOKEN_B; int main ( int argc, char** argv ) { yyparse (); Erwan Guillou et Laure Gonnord et Nicolas Louvet6/13

Université Lyon 1, FST, Dép

artement Informatique, M1 Cahier d'exercices MIF12 - Automne 2015

1.2 Exercices

EXERCICE1.1� Reconnaissance de langages

On utilisera dans cet exercice la syntaxe

fl ex pour dé fi nir des macros Flex.

1. Écrire une dé

fi nition des identi fi cateurs (lettres, chiffres etquotesdbs_dbs13.pdfusesText_19