Caractérisation de la transparence lexicale, extension de ...
Deuxième partie Chapitre 1 : Analyse lexicale€¦ · Deuxi`eme partie Chapitre 1 : Analyse...
Transcript of Deuxième partie Chapitre 1 : Analyse lexicale€¦ · Deuxi`eme partie Chapitre 1 : Analyse...
Deuxieme partie
Chapitre 1 : Analyse lexicale
Prof. Abdelmajid DarghamFaculte des Sciences, Oujda
Filiere SMI - S5
Module Theorie des Langages & Compilation
Universite Mohamed Premier
Octobre, 2013
Sommaire du chapitre 1
Introduction a la compilation
Analyse lexicale
Flex : Fast Lexer
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Sommaire du chapitre 1
Introduction a la compilation
Analyse lexicale
Flex : Fast Lexer
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Sommaire du chapitre 1
Introduction a la compilation
Analyse lexicale
Flex : Fast Lexer
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Sommaire du chapitre 1
Introduction a la compilation
Analyse lexicale
Flex : Fast Lexer
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Qu’est ce qu’un compilateur ?
Un programme qui lit en entree un code source ecritdans un langage, le traduit et fournit en sortie un codecible ecrit dans un autre langage.
Au cours de ce processus de traduction, un role importantd’un compilateur est de signaler au programmeur lapresence d’erreurs dans le code source.
Un compilateur permet donc de s’afranchir de lamachine utilisee en favorisant une programmation dehaut niveau.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Qu’est ce qu’un compilateur ?
Un programme qui lit en entree un code source ecritdans un langage, le traduit et fournit en sortie un codecible ecrit dans un autre langage.
Au cours de ce processus de traduction, un role importantd’un compilateur est de signaler au programmeur lapresence d’erreurs dans le code source.
Un compilateur permet donc de s’afranchir de lamachine utilisee en favorisant une programmation dehaut niveau.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Qu’est ce qu’un compilateur ?
Un programme qui lit en entree un code source ecritdans un langage, le traduit et fournit en sortie un codecible ecrit dans un autre langage.
Au cours de ce processus de traduction, un role importantd’un compilateur est de signaler au programmeur lapresence d’erreurs dans le code source.
Un compilateur permet donc de s’afranchir de lamachine utilisee en favorisant une programmation dehaut niveau.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Qu’est ce qu’un compilateur ?
Un programme qui lit en entree un code source ecritdans un langage, le traduit et fournit en sortie un codecible ecrit dans un autre langage.
Au cours de ce processus de traduction, un role importantd’un compilateur est de signaler au programmeur lapresence d’erreurs dans le code source.
Un compilateur permet donc de s’afranchir de lamachine utilisee en favorisant une programmation dehaut niveau.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Figure: Schema simplifie d’un compilateur
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Figure: Schema simplifie d’un compilateur
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Qualites d’un bon compilateur
1 Le code produit est correct
2 Le code produit s’execute rapidement
3 Le processus de compilation est rapide
4 Possibilite de la compilation separee
5 Un bon diagnostic pour les erreurs de syntaxe
6 Le code produit est bien optimise
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Qualites d’un bon compilateur
1 Le code produit est correct
2 Le code produit s’execute rapidement
3 Le processus de compilation est rapide
4 Possibilite de la compilation separee
5 Un bon diagnostic pour les erreurs de syntaxe
6 Le code produit est bien optimise
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Qualites d’un bon compilateur
1 Le code produit est correct
2 Le code produit s’execute rapidement
3 Le processus de compilation est rapide
4 Possibilite de la compilation separee
5 Un bon diagnostic pour les erreurs de syntaxe
6 Le code produit est bien optimise
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Qualites d’un bon compilateur
1 Le code produit est correct
2 Le code produit s’execute rapidement
3 Le processus de compilation est rapide
4 Possibilite de la compilation separee
5 Un bon diagnostic pour les erreurs de syntaxe
6 Le code produit est bien optimise
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Qualites d’un bon compilateur
1 Le code produit est correct
2 Le code produit s’execute rapidement
3 Le processus de compilation est rapide
4 Possibilite de la compilation separee
5 Un bon diagnostic pour les erreurs de syntaxe
6 Le code produit est bien optimise
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Qualites d’un bon compilateur
1 Le code produit est correct
2 Le code produit s’execute rapidement
3 Le processus de compilation est rapide
4 Possibilite de la compilation separee
5 Un bon diagnostic pour les erreurs de syntaxe
6 Le code produit est bien optimise
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Qualites d’un bon compilateur
1 Le code produit est correct
2 Le code produit s’execute rapidement
3 Le processus de compilation est rapide
4 Possibilite de la compilation separee
5 Un bon diagnostic pour les erreurs de syntaxe
6 Le code produit est bien optimise
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Schema d’un compilateur traditionel
Figure: Schema d’un compilateur traditionnel en deux passes
La phase frontale (ou pahse d’analyse) traduit le codesource en une representation intermediaire (RI).
La phase arriere (ou phase de synthese) traduit la RIen un code cible.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Schema d’un compilateur traditionel
Figure: Schema d’un compilateur traditionnel en deux passes
La phase frontale (ou pahse d’analyse) traduit le codesource en une representation intermediaire (RI).
La phase arriere (ou phase de synthese) traduit la RIen un code cible.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Schema d’un compilateur traditionel
Figure: Schema d’un compilateur traditionnel en deux passes
La phase frontale (ou pahse d’analyse) traduit le codesource en une representation intermediaire (RI).
La phase arriere (ou phase de synthese) traduit la RIen un code cible.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Schema d’un compilateur traditionel
Figure: Schema d’un compilateur traditionnel en deux passes
La phase frontale (ou pahse d’analyse) traduit le codesource en une representation intermediaire (RI).
La phase arriere (ou phase de synthese) traduit la RIen un code cible.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Peut-on construire m × n compilateurs avec m + n pieces ?
Ecrire m parties frontales.
Ecrire n parties arrieres.
Tout cela en utilisant une seule RI.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Peut-on construire m × n compilateurs avec m + n pieces ?
Ecrire m parties frontales.
Ecrire n parties arrieres.
Tout cela en utilisant une seule RI.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Peut-on construire m × n compilateurs avec m + n pieces ?
Ecrire m parties frontales.
Ecrire n parties arrieres.
Tout cela en utilisant une seule RI.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Peut-on construire m × n compilateurs avec m + n pieces ?
Ecrire m parties frontales.
Ecrire n parties arrieres.
Tout cela en utilisant une seule RI.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Peut-on construire m × n compilateurs avec m + n pieces ?
Ecrire m parties frontales.
Ecrire n parties arrieres.
Tout cela en utilisant une seule RI.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Peut-on construire m × n compilateurs avec m + n pieces ?
Ecrire m parties frontales.
Ecrire n parties arrieres.
Tout cela en utilisant une seule RI.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Partrie frontale
Role de la partie frontale d’un compilateur :
1 Reconnaissance des elements du programme source.2 Detection des erreurs.3 Production de la RI.4 Preparation du code pour la partie arriere.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Partrie frontale
Role de la partie frontale d’un compilateur :
1 Reconnaissance des elements du programme source.2 Detection des erreurs.3 Production de la RI.4 Preparation du code pour la partie arriere.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Partrie frontale
Role de la partie frontale d’un compilateur :
1 Reconnaissance des elements du programme source.2 Detection des erreurs.3 Production de la RI.4 Preparation du code pour la partie arriere.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Partrie frontale
Role de la partie frontale d’un compilateur :
1 Reconnaissance des elements du programme source.
2 Detection des erreurs.3 Production de la RI.4 Preparation du code pour la partie arriere.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Partrie frontale
Role de la partie frontale d’un compilateur :
1 Reconnaissance des elements du programme source.2 Detection des erreurs.
3 Production de la RI.4 Preparation du code pour la partie arriere.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Partrie frontale
Role de la partie frontale d’un compilateur :
1 Reconnaissance des elements du programme source.2 Detection des erreurs.3 Production de la RI.
4 Preparation du code pour la partie arriere.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Partrie frontale
Role de la partie frontale d’un compilateur :
1 Reconnaissance des elements du programme source.2 Detection des erreurs.3 Production de la RI.4 Preparation du code pour la partie arriere.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Partrie frontale
Analyseur lexical (Scanner) :1 Role principal : delivrer les tokens a partir des flots de
caracteres (les unites de base de la syntaxe).x = x + y;devient :<id, x>=<id, x> + <id, y>;
2 Role secondaire : eliminer les elements inutiles(espaces, tabulations, commentaires).
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Partrie frontale
Analyseur lexical (Scanner) :1 Role principal : delivrer les tokens a partir des flots de
caracteres (les unites de base de la syntaxe).x = x + y;devient :<id, x>=<id, x> + <id, y>;
2 Role secondaire : eliminer les elements inutiles(espaces, tabulations, commentaires).
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Partrie frontale
Analyseur lexical (Scanner) :
1 Role principal : delivrer les tokens a partir des flots decaracteres (les unites de base de la syntaxe).x = x + y;devient :<id, x>=<id, x> + <id, y>;
2 Role secondaire : eliminer les elements inutiles(espaces, tabulations, commentaires).
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Partrie frontale
Analyseur lexical (Scanner) :1 Role principal : delivrer les tokens a partir des flots de
caracteres (les unites de base de la syntaxe).
x = x + y;devient :<id, x>=<id, x> + <id, y>;
2 Role secondaire : eliminer les elements inutiles(espaces, tabulations, commentaires).
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Partrie frontale
Analyseur lexical (Scanner) :1 Role principal : delivrer les tokens a partir des flots de
caracteres (les unites de base de la syntaxe).x = x + y;
devient :<id, x>=<id, x> + <id, y>;
2 Role secondaire : eliminer les elements inutiles(espaces, tabulations, commentaires).
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Partrie frontale
Analyseur lexical (Scanner) :1 Role principal : delivrer les tokens a partir des flots de
caracteres (les unites de base de la syntaxe).x = x + y;devient :
<id, x>=<id, x> + <id, y>;2 Role secondaire : eliminer les elements inutiles
(espaces, tabulations, commentaires).
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Partrie frontale
Analyseur lexical (Scanner) :1 Role principal : delivrer les tokens a partir des flots de
caracteres (les unites de base de la syntaxe).x = x + y;devient :<id, x>=<id, x> + <id, y>;
2 Role secondaire : eliminer les elements inutiles(espaces, tabulations, commentaires).
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Partrie frontale
Analyseur lexical (Scanner) :1 Role principal : delivrer les tokens a partir des flots de
caracteres (les unites de base de la syntaxe).x = x + y;devient :<id, x>=<id, x> + <id, y>;
2 Role secondaire : eliminer les elements inutiles(espaces, tabulations, commentaires).
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Partrie frontale
Role de l’analyseur syntaxique (Parser) :1 Reconnaıtre les unites syntaxiques.2 Guider l’analyse semantique (traduction dirigee par la
syntaxe).3 Construire la RI.4 Produire les messages d’erreurs adequats.5 Faciliter la correction des erreurs.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Partrie frontale
Role de l’analyseur syntaxique (Parser) :1 Reconnaıtre les unites syntaxiques.2 Guider l’analyse semantique (traduction dirigee par la
syntaxe).3 Construire la RI.4 Produire les messages d’erreurs adequats.5 Faciliter la correction des erreurs.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Partrie frontale
Role de l’analyseur syntaxique (Parser) :
1 Reconnaıtre les unites syntaxiques.2 Guider l’analyse semantique (traduction dirigee par la
syntaxe).3 Construire la RI.4 Produire les messages d’erreurs adequats.5 Faciliter la correction des erreurs.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Partrie frontale
Role de l’analyseur syntaxique (Parser) :1 Reconnaıtre les unites syntaxiques.
2 Guider l’analyse semantique (traduction dirigee par lasyntaxe).
3 Construire la RI.4 Produire les messages d’erreurs adequats.5 Faciliter la correction des erreurs.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Partrie frontale
Role de l’analyseur syntaxique (Parser) :1 Reconnaıtre les unites syntaxiques.2 Guider l’analyse semantique (traduction dirigee par la
syntaxe).
3 Construire la RI.4 Produire les messages d’erreurs adequats.5 Faciliter la correction des erreurs.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Partrie frontale
Role de l’analyseur syntaxique (Parser) :1 Reconnaıtre les unites syntaxiques.2 Guider l’analyse semantique (traduction dirigee par la
syntaxe).3 Construire la RI.
4 Produire les messages d’erreurs adequats.5 Faciliter la correction des erreurs.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Partrie frontale
Role de l’analyseur syntaxique (Parser) :1 Reconnaıtre les unites syntaxiques.2 Guider l’analyse semantique (traduction dirigee par la
syntaxe).3 Construire la RI.4 Produire les messages d’erreurs adequats.
5 Faciliter la correction des erreurs.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Partrie frontale
Role de l’analyseur syntaxique (Parser) :1 Reconnaıtre les unites syntaxiques.2 Guider l’analyse semantique (traduction dirigee par la
syntaxe).3 Construire la RI.4 Produire les messages d’erreurs adequats.5 Faciliter la correction des erreurs.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Partie frontale : Analyse semantique
L’analyseur semantique controle le code pour s’assurerqu’il est conforme aux specifications du langage.
Il controle :
1 le typage.2 le flot d’execution : branchements apres un break.3 unicite des objets, des etiquettes, ...etc.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Partie frontale : Analyse semantique
L’analyseur semantique controle le code pour s’assurerqu’il est conforme aux specifications du langage.
Il controle :
1 le typage.2 le flot d’execution : branchements apres un break.3 unicite des objets, des etiquettes, ...etc.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Partie frontale : Analyse semantique
L’analyseur semantique controle le code pour s’assurerqu’il est conforme aux specifications du langage.
Il controle :
1 le typage.2 le flot d’execution : branchements apres un break.3 unicite des objets, des etiquettes, ...etc.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Partie frontale : Analyse semantique
L’analyseur semantique controle le code pour s’assurerqu’il est conforme aux specifications du langage.
Il controle :
1 le typage.
2 le flot d’execution : branchements apres un break.3 unicite des objets, des etiquettes, ...etc.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Partie frontale : Analyse semantique
L’analyseur semantique controle le code pour s’assurerqu’il est conforme aux specifications du langage.
Il controle :
1 le typage.2 le flot d’execution : branchements apres un break.
3 unicite des objets, des etiquettes, ...etc.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Partie frontale : Analyse semantique
L’analyseur semantique controle le code pour s’assurerqu’il est conforme aux specifications du langage.
Il controle :
1 le typage.2 le flot d’execution : branchements apres un break.3 unicite des objets, des etiquettes, ...etc.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Partie arriere : Generation de code intermediaire
Le generateur de code intermediaire construitexplicitement une representation intermediaire duprogramme source.
Cette representation intermediaire doit etre facile aproduire et facile a traduire en langage cible.
Exemples de representations intermediaires :
Code a trois adresses.AST : (Abstract Syntax Tree) arbre de syntaxeabstrait.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Partie arriere : Generation de code intermediaire
Le generateur de code intermediaire construitexplicitement une representation intermediaire duprogramme source.
Cette representation intermediaire doit etre facile aproduire et facile a traduire en langage cible.
Exemples de representations intermediaires :
Code a trois adresses.AST : (Abstract Syntax Tree) arbre de syntaxeabstrait.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Partie arriere : Generation de code intermediaire
Le generateur de code intermediaire construitexplicitement une representation intermediaire duprogramme source.
Cette representation intermediaire doit etre facile aproduire et facile a traduire en langage cible.
Exemples de representations intermediaires :
Code a trois adresses.AST : (Abstract Syntax Tree) arbre de syntaxeabstrait.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Partie arriere : Generation de code intermediaire
Le generateur de code intermediaire construitexplicitement une representation intermediaire duprogramme source.
Cette representation intermediaire doit etre facile aproduire et facile a traduire en langage cible.
Exemples de representations intermediaires :
Code a trois adresses.AST : (Abstract Syntax Tree) arbre de syntaxeabstrait.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Partie arriere : Generation de code intermediaire
Le generateur de code intermediaire construitexplicitement une representation intermediaire duprogramme source.
Cette representation intermediaire doit etre facile aproduire et facile a traduire en langage cible.
Exemples de representations intermediaires :
Code a trois adresses.
AST : (Abstract Syntax Tree) arbre de syntaxeabstrait.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Partie arriere : Generation de code intermediaire
Le generateur de code intermediaire construitexplicitement une representation intermediaire duprogramme source.
Cette representation intermediaire doit etre facile aproduire et facile a traduire en langage cible.
Exemples de representations intermediaires :
Code a trois adresses.AST : (Abstract Syntax Tree) arbre de syntaxeabstrait.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Partie arriere
Optimisation de code intermediaire :
L’optimiseur de code intermediaire tente d’ameliorer lecode intermediaire de facon que le code machineresultant s’execute le plus rapidement possible.
Generation de code cible :
Le generateur de code cible produit le code cible,c’est-a-dire du code machine translatable ou du codeen langage d’assemblage.Les emplacements memoire pour chacune des variablesutilisees dans le programme sont selectionnees.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Partie arriere
Optimisation de code intermediaire :
L’optimiseur de code intermediaire tente d’ameliorer lecode intermediaire de facon que le code machineresultant s’execute le plus rapidement possible.
Generation de code cible :
Le generateur de code cible produit le code cible,c’est-a-dire du code machine translatable ou du codeen langage d’assemblage.Les emplacements memoire pour chacune des variablesutilisees dans le programme sont selectionnees.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Partie arriere
Optimisation de code intermediaire :
L’optimiseur de code intermediaire tente d’ameliorer lecode intermediaire de facon que le code machineresultant s’execute le plus rapidement possible.
Generation de code cible :
Le generateur de code cible produit le code cible,c’est-a-dire du code machine translatable ou du codeen langage d’assemblage.Les emplacements memoire pour chacune des variablesutilisees dans le programme sont selectionnees.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Partie arriere
Optimisation de code intermediaire :
L’optimiseur de code intermediaire tente d’ameliorer lecode intermediaire de facon que le code machineresultant s’execute le plus rapidement possible.
Generation de code cible :
Le generateur de code cible produit le code cible,c’est-a-dire du code machine translatable ou du codeen langage d’assemblage.Les emplacements memoire pour chacune des variablesutilisees dans le programme sont selectionnees.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Partie arriere
Optimisation de code intermediaire :
L’optimiseur de code intermediaire tente d’ameliorer lecode intermediaire de facon que le code machineresultant s’execute le plus rapidement possible.
Generation de code cible :
Le generateur de code cible produit le code cible,c’est-a-dire du code machine translatable ou du codeen langage d’assemblage.
Les emplacements memoire pour chacune des variablesutilisees dans le programme sont selectionnees.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Partie arriere
Optimisation de code intermediaire :
L’optimiseur de code intermediaire tente d’ameliorer lecode intermediaire de facon que le code machineresultant s’execute le plus rapidement possible.
Generation de code cible :
Le generateur de code cible produit le code cible,c’est-a-dire du code machine translatable ou du codeen langage d’assemblage.Les emplacements memoire pour chacune des variablesutilisees dans le programme sont selectionnees.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Schema global d’un compilateur
Le module de la table des symboles : une fonctionimportante d’un compilateur est d’enregistrer les uniteslexicales et de collecter les informations sur ces unites.
Le module de la gestion des erreurs : une fonctionessentielle d’un compilateur est de detercter et delivrer leserreurs de syntaxe trouvees dans le programme source.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Schema global d’un compilateur
Le module de la table des symboles : une fonctionimportante d’un compilateur est d’enregistrer les uniteslexicales et de collecter les informations sur ces unites.
Le module de la gestion des erreurs : une fonctionessentielle d’un compilateur est de detercter et delivrer leserreurs de syntaxe trouvees dans le programme source.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Schema global d’un compilateur
Le module de la table des symboles : une fonctionimportante d’un compilateur est d’enregistrer les uniteslexicales et de collecter les informations sur ces unites.
Le module de la gestion des erreurs : une fonctionessentielle d’un compilateur est de detercter et delivrer leserreurs de syntaxe trouvees dans le programme source.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Environnement d’un compilateur
Figure: Schema de l’environnement d’un compilateur
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Environnement d’un compilateur
Figure: Schema de l’environnement d’un compilateurProf. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Environnement d’un compilateur
Pre-processeur : module effectuant des transformationssur le code source avant compilation (Macro-expansion,inclusion de fichiers, ...etc).
Assembleur : module qui traduit un code en langaged’assemblage en un code machine translatable(directement passe au relieur-chargeur).
Relieur (ou editeur de liens) : module qui effectue lafusion de plusieurs fichiers contenetant du code machinetranslatable en un unique programme executable.
Chargeur : module qui permet de placer les instructionset les donnees du programme executable auxemplacements appropries.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Environnement d’un compilateur
Pre-processeur : module effectuant des transformationssur le code source avant compilation (Macro-expansion,inclusion de fichiers, ...etc).
Assembleur : module qui traduit un code en langaged’assemblage en un code machine translatable(directement passe au relieur-chargeur).
Relieur (ou editeur de liens) : module qui effectue lafusion de plusieurs fichiers contenetant du code machinetranslatable en un unique programme executable.
Chargeur : module qui permet de placer les instructionset les donnees du programme executable auxemplacements appropries.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Environnement d’un compilateur
Pre-processeur : module effectuant des transformationssur le code source avant compilation (Macro-expansion,inclusion de fichiers, ...etc).
Assembleur : module qui traduit un code en langaged’assemblage en un code machine translatable(directement passe au relieur-chargeur).
Relieur (ou editeur de liens) : module qui effectue lafusion de plusieurs fichiers contenetant du code machinetranslatable en un unique programme executable.
Chargeur : module qui permet de placer les instructionset les donnees du programme executable auxemplacements appropries.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Environnement d’un compilateur
Pre-processeur : module effectuant des transformationssur le code source avant compilation (Macro-expansion,inclusion de fichiers, ...etc).
Assembleur : module qui traduit un code en langaged’assemblage en un code machine translatable(directement passe au relieur-chargeur).
Relieur (ou editeur de liens) : module qui effectue lafusion de plusieurs fichiers contenetant du code machinetranslatable en un unique programme executable.
Chargeur : module qui permet de placer les instructionset les donnees du programme executable auxemplacements appropries.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Introduction a la compilation
Environnement d’un compilateur
Pre-processeur : module effectuant des transformationssur le code source avant compilation (Macro-expansion,inclusion de fichiers, ...etc).
Assembleur : module qui traduit un code en langaged’assemblage en un code machine translatable(directement passe au relieur-chargeur).
Relieur (ou editeur de liens) : module qui effectue lafusion de plusieurs fichiers contenetant du code machinetranslatable en un unique programme executable.
Chargeur : module qui permet de placer les instructionset les donnees du programme executable auxemplacements appropries.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Role de l’analyseur lexical
L’analyseur lexical (scanner) constitue la premiere etapedans la phase d’analyse d’un compilateur.
Sa tache principale est de lire les caracteres d’entree et deproduire comme resultat une suite d’unites lexicales quel’analyseur syntaxique va utiliser.
Cette interaction est couramment implantee en faisant del’analyseur lexical un sous-programme ou une coroutinede l’analyseur syntaxique.
A la reception d’une commande ”prochaine unite lexicale”lancee de l’analyseur syntaxique, l’analyseur lexical lit lescaracteres d’entree jusqu’a ce qu’il puisse identifier laprochaine unite lexicale.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Role de l’analyseur lexical
L’analyseur lexical (scanner) constitue la premiere etapedans la phase d’analyse d’un compilateur.
Sa tache principale est de lire les caracteres d’entree et deproduire comme resultat une suite d’unites lexicales quel’analyseur syntaxique va utiliser.
Cette interaction est couramment implantee en faisant del’analyseur lexical un sous-programme ou une coroutinede l’analyseur syntaxique.
A la reception d’une commande ”prochaine unite lexicale”lancee de l’analyseur syntaxique, l’analyseur lexical lit lescaracteres d’entree jusqu’a ce qu’il puisse identifier laprochaine unite lexicale.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Role de l’analyseur lexical
L’analyseur lexical (scanner) constitue la premiere etapedans la phase d’analyse d’un compilateur.
Sa tache principale est de lire les caracteres d’entree et deproduire comme resultat une suite d’unites lexicales quel’analyseur syntaxique va utiliser.
Cette interaction est couramment implantee en faisant del’analyseur lexical un sous-programme ou une coroutinede l’analyseur syntaxique.
A la reception d’une commande ”prochaine unite lexicale”lancee de l’analyseur syntaxique, l’analyseur lexical lit lescaracteres d’entree jusqu’a ce qu’il puisse identifier laprochaine unite lexicale.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Role de l’analyseur lexical
L’analyseur lexical (scanner) constitue la premiere etapedans la phase d’analyse d’un compilateur.
Sa tache principale est de lire les caracteres d’entree et deproduire comme resultat une suite d’unites lexicales quel’analyseur syntaxique va utiliser.
Cette interaction est couramment implantee en faisant del’analyseur lexical un sous-programme ou une coroutinede l’analyseur syntaxique.
A la reception d’une commande ”prochaine unite lexicale”lancee de l’analyseur syntaxique, l’analyseur lexical lit lescaracteres d’entree jusqu’a ce qu’il puisse identifier laprochaine unite lexicale.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Role de l’analyseur lexical
L’analyseur lexical (scanner) constitue la premiere etapedans la phase d’analyse d’un compilateur.
Sa tache principale est de lire les caracteres d’entree et deproduire comme resultat une suite d’unites lexicales quel’analyseur syntaxique va utiliser.
Cette interaction est couramment implantee en faisant del’analyseur lexical un sous-programme ou une coroutinede l’analyseur syntaxique.
A la reception d’une commande ”prochaine unite lexicale”lancee de l’analyseur syntaxique, l’analyseur lexical lit lescaracteres d’entree jusqu’a ce qu’il puisse identifier laprochaine unite lexicale.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Figure: Schema simplifie d’un analyseur lexical
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Figure: Schema simplifie d’un analyseur lexical
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Modele
Definition 1.1
En general la meme unitee lexicale peut etre produite ensortie par plusieurs chaınes d’entree.
L’ensemble de ces chaınes est decrit par une regle appeleemodele, associee a l’unite lexicale en question.
On dit que le modele filtre chaque chaıne de l’ensemble.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Modele
Definition 1.1
En general la meme unitee lexicale peut etre produite ensortie par plusieurs chaınes d’entree.
L’ensemble de ces chaınes est decrit par une regle appeleemodele, associee a l’unite lexicale en question.
On dit que le modele filtre chaque chaıne de l’ensemble.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Modele
Definition 1.1
En general la meme unitee lexicale peut etre produite ensortie par plusieurs chaınes d’entree.
L’ensemble de ces chaınes est decrit par une regle appeleemodele, associee a l’unite lexicale en question.
On dit que le modele filtre chaque chaıne de l’ensemble.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Modele
Definition 1.1
En general la meme unitee lexicale peut etre produite ensortie par plusieurs chaınes d’entree.
L’ensemble de ces chaınes est decrit par une regle appeleemodele, associee a l’unite lexicale en question.
On dit que le modele filtre chaque chaıne de l’ensemble.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Modele
Definition 1.1
En general la meme unitee lexicale peut etre produite ensortie par plusieurs chaınes d’entree.
L’ensemble de ces chaınes est decrit par une regle appeleemodele, associee a l’unite lexicale en question.
On dit que le modele filtre chaque chaıne de l’ensemble.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Lexeme
Definition 1.2
Un lexeme est une suite de caracteres du programmesource qui concorde avec le modele d’une unite lexicale.
Exemples 1.3
Soit la declaration C suivante : int age = 21;
La chaıne ”age” est un lexeme de l’unite lexicale”identificateur”.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Lexeme
Definition 1.2
Un lexeme est une suite de caracteres du programmesource qui concorde avec le modele d’une unite lexicale.
Exemples 1.3
Soit la declaration C suivante : int age = 21;
La chaıne ”age” est un lexeme de l’unite lexicale”identificateur”.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Lexeme
Definition 1.2
Un lexeme est une suite de caracteres du programmesource qui concorde avec le modele d’une unite lexicale.
Exemples 1.3
Soit la declaration C suivante : int age = 21;
La chaıne ”age” est un lexeme de l’unite lexicale”identificateur”.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Lexeme
Definition 1.2
Un lexeme est une suite de caracteres du programmesource qui concorde avec le modele d’une unite lexicale.
Exemples 1.3
Soit la declaration C suivante : int age = 21;
La chaıne ”age” est un lexeme de l’unite lexicale”identificateur”.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Lexeme
Definition 1.2
Un lexeme est une suite de caracteres du programmesource qui concorde avec le modele d’une unite lexicale.
Exemples 1.3
Soit la declaration C suivante : int age = 21;
La chaıne ”age” est un lexeme de l’unite lexicale”identificateur”.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Unites lexicales courantes
1 Mots cles.
2 Identificateurs.
3 Operateurs.
4 Nombres.
5 Chaınes litterales.
6 Symboles speciaux.
7 Delimiteurs.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Unites lexicales courantes
1 Mots cles.
2 Identificateurs.
3 Operateurs.
4 Nombres.
5 Chaınes litterales.
6 Symboles speciaux.
7 Delimiteurs.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Unites lexicales courantes
1 Mots cles.
2 Identificateurs.
3 Operateurs.
4 Nombres.
5 Chaınes litterales.
6 Symboles speciaux.
7 Delimiteurs.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Unites lexicales courantes
1 Mots cles.
2 Identificateurs.
3 Operateurs.
4 Nombres.
5 Chaınes litterales.
6 Symboles speciaux.
7 Delimiteurs.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Unites lexicales courantes
1 Mots cles.
2 Identificateurs.
3 Operateurs.
4 Nombres.
5 Chaınes litterales.
6 Symboles speciaux.
7 Delimiteurs.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Unites lexicales courantes
1 Mots cles.
2 Identificateurs.
3 Operateurs.
4 Nombres.
5 Chaınes litterales.
6 Symboles speciaux.
7 Delimiteurs.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Unites lexicales courantes
1 Mots cles.
2 Identificateurs.
3 Operateurs.
4 Nombres.
5 Chaınes litterales.
6 Symboles speciaux.
7 Delimiteurs.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Unites lexicales courantes
1 Mots cles.
2 Identificateurs.
3 Operateurs.
4 Nombres.
5 Chaınes litterales.
6 Symboles speciaux.
7 Delimiteurs.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Exemple d’un modele
Exemples 1.4
En langage C, un identificateur est defini par les reglessuivantes :
1 Un identificateur est une chaıne de caracteres formee pardes lettres (majuscules et minuscules), des chiffres et/oudes caracteres soulignes ” ”.
2 Un identificateur doit commencer par une lettre ou parun caractere souligne ” ”.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Exemple d’un modele
Exemples 1.4
En langage C, un identificateur est defini par les reglessuivantes :
1 Un identificateur est une chaıne de caracteres formee pardes lettres (majuscules et minuscules), des chiffres et/oudes caracteres soulignes ” ”.
2 Un identificateur doit commencer par une lettre ou parun caractere souligne ” ”.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Exemple d’un modele
Exemples 1.4
En langage C, un identificateur est defini par les reglessuivantes :
1 Un identificateur est une chaıne de caracteres formee pardes lettres (majuscules et minuscules), des chiffres et/oudes caracteres soulignes ” ”.
2 Un identificateur doit commencer par une lettre ou parun caractere souligne ” ”.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Exemple d’un modele
Exemples 1.4
En langage C, un identificateur est defini par les reglessuivantes :
1 Un identificateur est une chaıne de caracteres formee pardes lettres (majuscules et minuscules), des chiffres et/oudes caracteres soulignes ” ”.
2 Un identificateur doit commencer par une lettre ou parun caractere souligne ” ”.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Exemple d’un modele
Exemples 1.4
En langage C, un identificateur est defini par les reglessuivantes :
1 Un identificateur est une chaıne de caracteres formee pardes lettres (majuscules et minuscules), des chiffres et/oudes caracteres soulignes ” ”.
2 Un identificateur doit commencer par une lettre ou parun caractere souligne ” ”.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Attributs des unites lexicales
Le compilateur n’a pas besoin uniquement de connaıtre aquelle classe appartient un lexeme, mais il a egalementbesoion de connaıtre certaines informations concernant celexeme : valeur intiale, type de l’identificateur, ...etc.L’analyseur lexical reunit les informations sur les uniteslexicales dans les attributs qui leur sont associes.Les unites lexicales influent sur les decisions d’analysesyntaxique, mais les attributs influent sur la traductiondes unites lexicales.En pratique, une unite lexicale a en general un seulattribut : un pointeur vers l’entree de la table desymboles dans laquelle l’information sur l’unite lexicaleest conservee.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Attributs des unites lexicalesLe compilateur n’a pas besoin uniquement de connaıtre aquelle classe appartient un lexeme, mais il a egalementbesoion de connaıtre certaines informations concernant celexeme : valeur intiale, type de l’identificateur, ...etc.
L’analyseur lexical reunit les informations sur les uniteslexicales dans les attributs qui leur sont associes.Les unites lexicales influent sur les decisions d’analysesyntaxique, mais les attributs influent sur la traductiondes unites lexicales.En pratique, une unite lexicale a en general un seulattribut : un pointeur vers l’entree de la table desymboles dans laquelle l’information sur l’unite lexicaleest conservee.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Attributs des unites lexicalesLe compilateur n’a pas besoin uniquement de connaıtre aquelle classe appartient un lexeme, mais il a egalementbesoion de connaıtre certaines informations concernant celexeme : valeur intiale, type de l’identificateur, ...etc.L’analyseur lexical reunit les informations sur les uniteslexicales dans les attributs qui leur sont associes.
Les unites lexicales influent sur les decisions d’analysesyntaxique, mais les attributs influent sur la traductiondes unites lexicales.En pratique, une unite lexicale a en general un seulattribut : un pointeur vers l’entree de la table desymboles dans laquelle l’information sur l’unite lexicaleest conservee.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Attributs des unites lexicalesLe compilateur n’a pas besoin uniquement de connaıtre aquelle classe appartient un lexeme, mais il a egalementbesoion de connaıtre certaines informations concernant celexeme : valeur intiale, type de l’identificateur, ...etc.L’analyseur lexical reunit les informations sur les uniteslexicales dans les attributs qui leur sont associes.Les unites lexicales influent sur les decisions d’analysesyntaxique, mais les attributs influent sur la traductiondes unites lexicales.
En pratique, une unite lexicale a en general un seulattribut : un pointeur vers l’entree de la table desymboles dans laquelle l’information sur l’unite lexicaleest conservee.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Attributs des unites lexicalesLe compilateur n’a pas besoin uniquement de connaıtre aquelle classe appartient un lexeme, mais il a egalementbesoion de connaıtre certaines informations concernant celexeme : valeur intiale, type de l’identificateur, ...etc.L’analyseur lexical reunit les informations sur les uniteslexicales dans les attributs qui leur sont associes.Les unites lexicales influent sur les decisions d’analysesyntaxique, mais les attributs influent sur la traductiondes unites lexicales.En pratique, une unite lexicale a en general un seulattribut : un pointeur vers l’entree de la table desymboles dans laquelle l’information sur l’unite lexicaleest conservee.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Erreurs lexicales
Un compilateur peut detecter toutes les erreurs lexicalespendant l’etape de l’analyse lexicale.
Mais, comme l’analyseur lexical n’a qu’une vision localedu programme, ce dernier ne peut indiquer avecexactitude la nature de l’erreur lexicale.
Exemples 1.5
Prenons l’exemple du code C suivant :fi(a == 7);
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Erreurs lexicales
Un compilateur peut detecter toutes les erreurs lexicalespendant l’etape de l’analyse lexicale.
Mais, comme l’analyseur lexical n’a qu’une vision localedu programme, ce dernier ne peut indiquer avecexactitude la nature de l’erreur lexicale.
Exemples 1.5
Prenons l’exemple du code C suivant :fi(a == 7);
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Erreurs lexicales
Un compilateur peut detecter toutes les erreurs lexicalespendant l’etape de l’analyse lexicale.
Mais, comme l’analyseur lexical n’a qu’une vision localedu programme, ce dernier ne peut indiquer avecexactitude la nature de l’erreur lexicale.
Exemples 1.5
Prenons l’exemple du code C suivant :fi(a == 7);
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Erreurs lexicales
Un compilateur peut detecter toutes les erreurs lexicalespendant l’etape de l’analyse lexicale.
Mais, comme l’analyseur lexical n’a qu’une vision localedu programme, ce dernier ne peut indiquer avecexactitude la nature de l’erreur lexicale.
Exemples 1.5
Prenons l’exemple du code C suivant :
fi(a == 7);
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Erreurs lexicales
Un compilateur peut detecter toutes les erreurs lexicalespendant l’etape de l’analyse lexicale.
Mais, comme l’analyseur lexical n’a qu’une vision localedu programme, ce dernier ne peut indiquer avecexactitude la nature de l’erreur lexicale.
Exemples 1.5
Prenons l’exemple du code C suivant :fi(a == 7);
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Erreurs lexicales
Dans l’exemple precedent, l’analyseur lexical ne peut pasdire s’il s’agit du mot cle ”if ” mal orthographie, ou d’unidentificateur de fonction non declaree.
Comme ”fi” est un identificateur valide, l’analyseurlexical doit retourner l’unite lexicale d’un identificateur etlaisser une autre etape de l’analyse du compilateur traitercette erreur eventuelle.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Erreurs lexicales
Dans l’exemple precedent, l’analyseur lexical ne peut pasdire s’il s’agit du mot cle ”if ” mal orthographie, ou d’unidentificateur de fonction non declaree.
Comme ”fi” est un identificateur valide, l’analyseurlexical doit retourner l’unite lexicale d’un identificateur etlaisser une autre etape de l’analyse du compilateur traitercette erreur eventuelle.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Erreurs lexicales
Dans l’exemple precedent, l’analyseur lexical ne peut pasdire s’il s’agit du mot cle ”if ” mal orthographie, ou d’unidentificateur de fonction non declaree.
Comme ”fi” est un identificateur valide, l’analyseurlexical doit retourner l’unite lexicale d’un identificateur etlaisser une autre etape de l’analyse du compilateur traitercette erreur eventuelle.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Specification des unites lexicales
Il y a deux outils pour specifier les unites lexicales d’unlangage de programmation :
1 Les expressions regulieres.2 Les automates finis.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Specification des unites lexicales
Il y a deux outils pour specifier les unites lexicales d’unlangage de programmation :
1 Les expressions regulieres.2 Les automates finis.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Specification des unites lexicales
Il y a deux outils pour specifier les unites lexicales d’unlangage de programmation :
1 Les expressions regulieres.
2 Les automates finis.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Specification des unites lexicales
Il y a deux outils pour specifier les unites lexicales d’unlangage de programmation :
1 Les expressions regulieres.2 Les automates finis.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Specification par expressions regulieres (etendues)
Exemples 1.6
Identificateurs C :( |[a − zA − Z ])( |[a − zA − Z ]|[0 − 9])∗
Nombres entiers :(+|−)?[0 − 9]+
Nombres reels :(+|−)?[0 − 9]∗.[0 − 9]+
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Specification par expressions regulieres (etendues)
Exemples 1.6
Identificateurs C :( |[a − zA − Z ])( |[a − zA − Z ]|[0 − 9])∗
Nombres entiers :(+|−)?[0 − 9]+
Nombres reels :(+|−)?[0 − 9]∗.[0 − 9]+
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Specification par expressions regulieres (etendues)
Exemples 1.6
Identificateurs C :( |[a − zA − Z ])( |[a − zA − Z ]|[0 − 9])∗
Nombres entiers :(+|−)?[0 − 9]+
Nombres reels :(+|−)?[0 − 9]∗.[0 − 9]+
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Specification par expressions regulieres (etendues)
Exemples 1.6
Identificateurs C :( |[a − zA − Z ])( |[a − zA − Z ]|[0 − 9])∗
Nombres entiers :(+|−)?[0 − 9]+
Nombres reels :(+|−)?[0 − 9]∗.[0 − 9]+
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Specification par expressions regulieres (etendues)
Exemples 1.6
Identificateurs C :( |[a − zA − Z ])( |[a − zA − Z ]|[0 − 9])∗
Nombres entiers :(+|−)?[0 − 9]+
Nombres reels :(+|−)?[0 − 9]∗.[0 − 9]+
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Specification par automates finis (enrichis par desactions)
Figure: Automate fini pour les operateurs de comparaison dulangage Pascal
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Specification par automates finis (enrichis par desactions)
Figure: Automate fini pour les operateurs de comparaison dulangage Pascal
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Ecriture d’un analyseur lexical
Il y a 3 methodes pour developper un analyseur lexical :
1 Methode manuelle : on ecrit a la main un analyseurlexical comme un programme en utilisant un langage deprogrammation evolue comme C , C + + ou Java.
2 Methode par automate : on construit un automatefini deterministe qui represente le lexique du langagesource, puis on le muni d’actions d’analyse lexicale.
3 Methode automatique : on ecrit une specification d’unanalsyeur lexical a l’aide d’un programme qui genereautomatiquement l’analyseur lexical specifie. Cettespecification est faite par un ensemble d’expressionsregulieres enrichies par des actions d’analyse lexicale.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Ecriture d’un analyseur lexical
Il y a 3 methodes pour developper un analyseur lexical :
1 Methode manuelle : on ecrit a la main un analyseurlexical comme un programme en utilisant un langage deprogrammation evolue comme C , C + + ou Java.
2 Methode par automate : on construit un automatefini deterministe qui represente le lexique du langagesource, puis on le muni d’actions d’analyse lexicale.
3 Methode automatique : on ecrit une specification d’unanalsyeur lexical a l’aide d’un programme qui genereautomatiquement l’analyseur lexical specifie. Cettespecification est faite par un ensemble d’expressionsregulieres enrichies par des actions d’analyse lexicale.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Ecriture d’un analyseur lexical
Il y a 3 methodes pour developper un analyseur lexical :
1 Methode manuelle : on ecrit a la main un analyseurlexical comme un programme en utilisant un langage deprogrammation evolue comme C , C + + ou Java.
2 Methode par automate : on construit un automatefini deterministe qui represente le lexique du langagesource, puis on le muni d’actions d’analyse lexicale.
3 Methode automatique : on ecrit une specification d’unanalsyeur lexical a l’aide d’un programme qui genereautomatiquement l’analyseur lexical specifie. Cettespecification est faite par un ensemble d’expressionsregulieres enrichies par des actions d’analyse lexicale.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Ecriture d’un analyseur lexical
Il y a 3 methodes pour developper un analyseur lexical :
1 Methode manuelle : on ecrit a la main un analyseurlexical comme un programme en utilisant un langage deprogrammation evolue comme C , C + + ou Java.
2 Methode par automate : on construit un automatefini deterministe qui represente le lexique du langagesource, puis on le muni d’actions d’analyse lexicale.
3 Methode automatique : on ecrit une specification d’unanalsyeur lexical a l’aide d’un programme qui genereautomatiquement l’analyseur lexical specifie. Cettespecification est faite par un ensemble d’expressionsregulieres enrichies par des actions d’analyse lexicale.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Analyse lexicale
Ecriture d’un analyseur lexical
Il y a 3 methodes pour developper un analyseur lexical :
1 Methode manuelle : on ecrit a la main un analyseurlexical comme un programme en utilisant un langage deprogrammation evolue comme C , C + + ou Java.
2 Methode par automate : on construit un automatefini deterministe qui represente le lexique du langagesource, puis on le muni d’actions d’analyse lexicale.
3 Methode automatique : on ecrit une specification d’unanalsyeur lexical a l’aide d’un programme qui genereautomatiquement l’analyseur lexical specifie. Cettespecification est faite par un ensemble d’expressionsregulieres enrichies par des actions d’analyse lexicale.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Flex est un outil de generation automatiqued’analyseurs lexicaux.
Un fichier Flex contient la description d’un analyseurlexiacl a generer.
Cette description est donnee sous la forme d’expressionsregulieres etendeus et du code ecrit en langage C (ouC + +).
Flex genere comme resultat un fichier contenant le codeC du future analyseur lexical.
Ce fichier est nomme lex.yy.c.
La compilation de ce fichier par un compilateur C , generefinalement le code executable de l’analyseur lexical enquestion.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Flex est un outil de generation automatiqued’analyseurs lexicaux.
Un fichier Flex contient la description d’un analyseurlexiacl a generer.
Cette description est donnee sous la forme d’expressionsregulieres etendeus et du code ecrit en langage C (ouC + +).
Flex genere comme resultat un fichier contenant le codeC du future analyseur lexical.
Ce fichier est nomme lex.yy.c.
La compilation de ce fichier par un compilateur C , generefinalement le code executable de l’analyseur lexical enquestion.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Flex est un outil de generation automatiqued’analyseurs lexicaux.
Un fichier Flex contient la description d’un analyseurlexiacl a generer.
Cette description est donnee sous la forme d’expressionsregulieres etendeus et du code ecrit en langage C (ouC + +).
Flex genere comme resultat un fichier contenant le codeC du future analyseur lexical.
Ce fichier est nomme lex.yy.c.
La compilation de ce fichier par un compilateur C , generefinalement le code executable de l’analyseur lexical enquestion.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Flex est un outil de generation automatiqued’analyseurs lexicaux.
Un fichier Flex contient la description d’un analyseurlexiacl a generer.
Cette description est donnee sous la forme d’expressionsregulieres etendeus et du code ecrit en langage C (ouC + +).
Flex genere comme resultat un fichier contenant le codeC du future analyseur lexical.
Ce fichier est nomme lex.yy.c.
La compilation de ce fichier par un compilateur C , generefinalement le code executable de l’analyseur lexical enquestion.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Flex est un outil de generation automatiqued’analyseurs lexicaux.
Un fichier Flex contient la description d’un analyseurlexiacl a generer.
Cette description est donnee sous la forme d’expressionsregulieres etendeus et du code ecrit en langage C (ouC + +).
Flex genere comme resultat un fichier contenant le codeC du future analyseur lexical.
Ce fichier est nomme lex.yy.c.
La compilation de ce fichier par un compilateur C , generefinalement le code executable de l’analyseur lexical enquestion.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Flex est un outil de generation automatiqued’analyseurs lexicaux.
Un fichier Flex contient la description d’un analyseurlexiacl a generer.
Cette description est donnee sous la forme d’expressionsregulieres etendeus et du code ecrit en langage C (ouC + +).
Flex genere comme resultat un fichier contenant le codeC du future analyseur lexical.
Ce fichier est nomme lex.yy.c.
La compilation de ce fichier par un compilateur C , generefinalement le code executable de l’analyseur lexical enquestion.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Flex est un outil de generation automatiqued’analyseurs lexicaux.
Un fichier Flex contient la description d’un analyseurlexiacl a generer.
Cette description est donnee sous la forme d’expressionsregulieres etendeus et du code ecrit en langage C (ouC + +).
Flex genere comme resultat un fichier contenant le codeC du future analyseur lexical.
Ce fichier est nomme lex.yy.c.
La compilation de ce fichier par un compilateur C , generefinalement le code executable de l’analyseur lexical enquestion.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Figure: Processus de creation d’un analyseur lexcical avec Flex
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Figure: Processus de creation d’un analyseur lexcical avec Flex
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Figure: Utilisation d’un analyseur lexcical genere avec Flex
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Figure: Utilisation d’un analyseur lexcical genere avec Flex
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Lorsque l’executable est mis en œuvre, il analyse le fichiersource pour chercher les occurrences d’expressionsregulieres.
Lorsqu’une chaıne est reconnue par une expressionreguliere, il execute le code C correspondant.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Lorsque l’executable est mis en œuvre, il analyse le fichiersource pour chercher les occurrences d’expressionsregulieres.
Lorsqu’une chaıne est reconnue par une expressionreguliere, il execute le code C correspondant.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Lorsque l’executable est mis en œuvre, il analyse le fichiersource pour chercher les occurrences d’expressionsregulieres.
Lorsqu’une chaıne est reconnue par une expressionreguliere, il execute le code C correspondant.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Voici les etpaes a suivre pour obtenir un analyseur avecFlex :
1 Ecrire, puis enregister votre analyseur dans un fichierportant une extension ”.flex” ou ”.lex”. Par exemple,”scan.flex”.
2 Compiler votre analyseur par la commende flex :flex scan.flex
3 Compiler le fichier par la commande gcc le fichierlex.yy.c produit par l’etape precedente :gcc −o lex.yy.c scan −lfl
4 Lancer l’analyseur en utilisant le nom de celui-ci :scan
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Voici les etpaes a suivre pour obtenir un analyseur avecFlex :
1 Ecrire, puis enregister votre analyseur dans un fichierportant une extension ”.flex” ou ”.lex”. Par exemple,”scan.flex”.
2 Compiler votre analyseur par la commende flex :flex scan.flex
3 Compiler le fichier par la commande gcc le fichierlex.yy.c produit par l’etape precedente :gcc −o lex.yy.c scan −lfl
4 Lancer l’analyseur en utilisant le nom de celui-ci :scan
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Voici les etpaes a suivre pour obtenir un analyseur avecFlex :
1 Ecrire, puis enregister votre analyseur dans un fichierportant une extension ”.flex” ou ”.lex”. Par exemple,”scan.flex”.
2 Compiler votre analyseur par la commende flex :flex scan.flex
3 Compiler le fichier par la commande gcc le fichierlex.yy.c produit par l’etape precedente :gcc −o lex.yy.c scan −lfl
4 Lancer l’analyseur en utilisant le nom de celui-ci :scan
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Voici les etpaes a suivre pour obtenir un analyseur avecFlex :
1 Ecrire, puis enregister votre analyseur dans un fichierportant une extension ”.flex” ou ”.lex”. Par exemple,”scan.flex”.
2 Compiler votre analyseur par la commende flex :flex scan.flex
3 Compiler le fichier par la commande gcc le fichierlex.yy.c produit par l’etape precedente :gcc −o lex.yy.c scan −lfl
4 Lancer l’analyseur en utilisant le nom de celui-ci :scan
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Voici les etpaes a suivre pour obtenir un analyseur avecFlex :
1 Ecrire, puis enregister votre analyseur dans un fichierportant une extension ”.flex” ou ”.lex”. Par exemple,”scan.flex”.
2 Compiler votre analyseur par la commende flex :flex scan.flex
3 Compiler le fichier par la commande gcc le fichierlex.yy.c produit par l’etape precedente :gcc −o lex.yy.c scan −lfl
4 Lancer l’analyseur en utilisant le nom de celui-ci :scan
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Voici les etpaes a suivre pour obtenir un analyseur avecFlex :
1 Ecrire, puis enregister votre analyseur dans un fichierportant une extension ”.flex” ou ”.lex”. Par exemple,”scan.flex”.
2 Compiler votre analyseur par la commende flex :flex scan.flex
3 Compiler le fichier par la commande gcc le fichierlex.yy.c produit par l’etape precedente :gcc −o lex.yy.c scan −lfl
4 Lancer l’analyseur en utilisant le nom de celui-ci :scan
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Par defaut, le texte a analyser est lu a partir de l’entreestandard (le clavier) et le resultat de l’analyse lexical estaffiche sur la sortie standard (l’ecran).
On peut indiquer au compilateur le fichier source aanalyser :scan < input.txt
On peut indiquer au compilateur d’afficher le resultat del’anayse dans un fichier :scan > output.txt
Bien sur, on peut melanger les deux :scan < input.txt > output.txt
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Par defaut, le texte a analyser est lu a partir de l’entreestandard (le clavier) et le resultat de l’analyse lexical estaffiche sur la sortie standard (l’ecran).
On peut indiquer au compilateur le fichier source aanalyser :scan < input.txt
On peut indiquer au compilateur d’afficher le resultat del’anayse dans un fichier :scan > output.txt
Bien sur, on peut melanger les deux :scan < input.txt > output.txt
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Par defaut, le texte a analyser est lu a partir de l’entreestandard (le clavier) et le resultat de l’analyse lexical estaffiche sur la sortie standard (l’ecran).
On peut indiquer au compilateur le fichier source aanalyser :scan < input.txt
On peut indiquer au compilateur d’afficher le resultat del’anayse dans un fichier :scan > output.txt
Bien sur, on peut melanger les deux :scan < input.txt > output.txt
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Par defaut, le texte a analyser est lu a partir de l’entreestandard (le clavier) et le resultat de l’analyse lexical estaffiche sur la sortie standard (l’ecran).
On peut indiquer au compilateur le fichier source aanalyser :scan < input.txt
On peut indiquer au compilateur d’afficher le resultat del’anayse dans un fichier :scan > output.txt
Bien sur, on peut melanger les deux :scan < input.txt > output.txt
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Par defaut, le texte a analyser est lu a partir de l’entreestandard (le clavier) et le resultat de l’analyse lexical estaffiche sur la sortie standard (l’ecran).
On peut indiquer au compilateur le fichier source aanalyser :scan < input.txt
On peut indiquer au compilateur d’afficher le resultat del’anayse dans un fichier :scan > output.txt
Bien sur, on peut melanger les deux :scan < input.txt > output.txt
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Exemples 1.7
Ecrire un analyseur lexical qui remplace toute occurrence delettre ”a” par une lettre ”z”, et inversement.
Solution :
%%”a” printf(”z”);”z” printf(”a”);
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Exemples 1.7
Ecrire un analyseur lexical qui remplace toute occurrence delettre ”a” par une lettre ”z”, et inversement.
Solution :
%%”a” printf(”z”);”z” printf(”a”);
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Exemples 1.7
Ecrire un analyseur lexical qui remplace toute occurrence delettre ”a” par une lettre ”z”, et inversement.
Solution :
%%”a” printf(”z”);”z” printf(”a”);
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Exemples 1.7
Ecrire un analyseur lexical qui remplace toute occurrence delettre ”a” par une lettre ”z”, et inversement.
Solution :
%%
”a” printf(”z”);”z” printf(”a”);
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Exemples 1.7
Ecrire un analyseur lexical qui remplace toute occurrence delettre ”a” par une lettre ”z”, et inversement.
Solution :
%%”a” printf(”z”);
”z” printf(”a”);
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Exemples 1.7
Ecrire un analyseur lexical qui remplace toute occurrence delettre ”a” par une lettre ”z”, et inversement.
Solution :
%%”a” printf(”z”);”z” printf(”a”);
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Fonctionnement
Les deux symboles %% marquent le debut de la sectiondes regles. Ils doivent etre ecrits en premiere colonne.
Le code :”a” printf(”z”)est une regle.
Chaque regle contient deux elements :
1 une expression reguliere;2 et du code C .
Dans le code precedent, l’expression reguliere est ”a” et lecode C est l’instruction printf(”z”).
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Fonctionnement
Les deux symboles %% marquent le debut de la sectiondes regles. Ils doivent etre ecrits en premiere colonne.
Le code :”a” printf(”z”)est une regle.
Chaque regle contient deux elements :
1 une expression reguliere;2 et du code C .
Dans le code precedent, l’expression reguliere est ”a” et lecode C est l’instruction printf(”z”).
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Fonctionnement
Les deux symboles %% marquent le debut de la sectiondes regles. Ils doivent etre ecrits en premiere colonne.
Le code :
”a” printf(”z”)est une regle.
Chaque regle contient deux elements :
1 une expression reguliere;2 et du code C .
Dans le code precedent, l’expression reguliere est ”a” et lecode C est l’instruction printf(”z”).
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Fonctionnement
Les deux symboles %% marquent le debut de la sectiondes regles. Ils doivent etre ecrits en premiere colonne.
Le code :”a” printf(”z”)
est une regle.
Chaque regle contient deux elements :
1 une expression reguliere;2 et du code C .
Dans le code precedent, l’expression reguliere est ”a” et lecode C est l’instruction printf(”z”).
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Fonctionnement
Les deux symboles %% marquent le debut de la sectiondes regles. Ils doivent etre ecrits en premiere colonne.
Le code :”a” printf(”z”)est une regle.
Chaque regle contient deux elements :
1 une expression reguliere;2 et du code C .
Dans le code precedent, l’expression reguliere est ”a” et lecode C est l’instruction printf(”z”).
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Fonctionnement
Les deux symboles %% marquent le debut de la sectiondes regles. Ils doivent etre ecrits en premiere colonne.
Le code :”a” printf(”z”)est une regle.
Chaque regle contient deux elements :
1 une expression reguliere;2 et du code C .
Dans le code precedent, l’expression reguliere est ”a” et lecode C est l’instruction printf(”z”).
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Fonctionnement
Les deux symboles %% marquent le debut de la sectiondes regles. Ils doivent etre ecrits en premiere colonne.
Le code :”a” printf(”z”)est une regle.
Chaque regle contient deux elements :
1 une expression reguliere;
2 et du code C .
Dans le code precedent, l’expression reguliere est ”a” et lecode C est l’instruction printf(”z”).
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Fonctionnement
Les deux symboles %% marquent le debut de la sectiondes regles. Ils doivent etre ecrits en premiere colonne.
Le code :”a” printf(”z”)est une regle.
Chaque regle contient deux elements :
1 une expression reguliere;2 et du code C .
Dans le code precedent, l’expression reguliere est ”a” et lecode C est l’instruction printf(”z”).
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Fonctionnement
Les deux symboles %% marquent le debut de la sectiondes regles. Ils doivent etre ecrits en premiere colonne.
Le code :”a” printf(”z”)est une regle.
Chaque regle contient deux elements :
1 une expression reguliere;2 et du code C .
Dans le code precedent, l’expression reguliere est ”a” et lecode C est l’instruction printf(”z”).
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Fonctionnement
Signification du code : lorsque l’analsyeur renconnaıt unelettre ”a” dans le fichier source, il va la remplacer par unelettre ”z”.
On a un resultat similaire avec la seconde regle :”z” printf(”a”)par laquelle l’analyseur remplacera chaque lettre ”z” parune lettre ”a”.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Fonctionnement
Signification du code : lorsque l’analsyeur renconnaıt unelettre ”a” dans le fichier source, il va la remplacer par unelettre ”z”.
On a un resultat similaire avec la seconde regle :”z” printf(”a”)par laquelle l’analyseur remplacera chaque lettre ”z” parune lettre ”a”.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Fonctionnement
Signification du code : lorsque l’analsyeur renconnaıt unelettre ”a” dans le fichier source, il va la remplacer par unelettre ”z”.
On a un resultat similaire avec la seconde regle :
”z” printf(”a”)par laquelle l’analyseur remplacera chaque lettre ”z” parune lettre ”a”.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Fonctionnement
Signification du code : lorsque l’analsyeur renconnaıt unelettre ”a” dans le fichier source, il va la remplacer par unelettre ”z”.
On a un resultat similaire avec la seconde regle :”z” printf(”a”)
par laquelle l’analyseur remplacera chaque lettre ”z” parune lettre ”a”.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Fonctionnement
Signification du code : lorsque l’analsyeur renconnaıt unelettre ”a” dans le fichier source, il va la remplacer par unelettre ”z”.
On a un resultat similaire avec la seconde regle :”z” printf(”a”)par laquelle l’analyseur remplacera chaque lettre ”z” parune lettre ”a”.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Remarques 1.8
Une expression reguliere doit toujours commencer enpremiere colonne.
Il faut laisser au moins un caracteres blanc (espace outabulation) entre l’expression reguliere et le code Cassocie.
Le code C peut contenir plusieurs instructions. Lesacollades { et } doivent etre utilisees si c’est le cas.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Remarques 1.8
Une expression reguliere doit toujours commencer enpremiere colonne.
Il faut laisser au moins un caracteres blanc (espace outabulation) entre l’expression reguliere et le code Cassocie.
Le code C peut contenir plusieurs instructions. Lesacollades { et } doivent etre utilisees si c’est le cas.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Remarques 1.8
Une expression reguliere doit toujours commencer enpremiere colonne.
Il faut laisser au moins un caracteres blanc (espace outabulation) entre l’expression reguliere et le code Cassocie.
Le code C peut contenir plusieurs instructions. Lesacollades { et } doivent etre utilisees si c’est le cas.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Remarques 1.8
Une expression reguliere doit toujours commencer enpremiere colonne.
Il faut laisser au moins un caracteres blanc (espace outabulation) entre l’expression reguliere et le code Cassocie.
Le code C peut contenir plusieurs instructions. Lesacollades { et } doivent etre utilisees si c’est le cas.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Remarques 1.8
Une expression reguliere doit toujours commencer enpremiere colonne.
Il faut laisser au moins un caracteres blanc (espace outabulation) entre l’expression reguliere et le code Cassocie.
Le code C peut contenir plusieurs instructions. Lesacollades { et } doivent etre utilisees si c’est le cas.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Exemples 1.9
Ecrire un analyseur lexical qui calcule le nombre de lignescontenu dans le fichier source.
%{int nb lignes = 0;
%}%%\n nb lignes++;%%main() {
yylex();printf(”nombre de lignes : %d”, nb lignes); }
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Exemples 1.9
Ecrire un analyseur lexical qui calcule le nombre de lignescontenu dans le fichier source.
%{int nb lignes = 0;
%}%%\n nb lignes++;%%main() {
yylex();printf(”nombre de lignes : %d”, nb lignes); }
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Exemples 1.9
Ecrire un analyseur lexical qui calcule le nombre de lignescontenu dans le fichier source.
%{
int nb lignes = 0;%}%%\n nb lignes++;%%main() {
yylex();printf(”nombre de lignes : %d”, nb lignes); }
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Exemples 1.9
Ecrire un analyseur lexical qui calcule le nombre de lignescontenu dans le fichier source.
%{int nb lignes = 0;
%}%%\n nb lignes++;%%main() {
yylex();printf(”nombre de lignes : %d”, nb lignes); }
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Exemples 1.9
Ecrire un analyseur lexical qui calcule le nombre de lignescontenu dans le fichier source.
%{int nb lignes = 0;
%}
%%\n nb lignes++;%%main() {
yylex();printf(”nombre de lignes : %d”, nb lignes); }
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Exemples 1.9
Ecrire un analyseur lexical qui calcule le nombre de lignescontenu dans le fichier source.
%{int nb lignes = 0;
%}%%
\n nb lignes++;%%main() {
yylex();printf(”nombre de lignes : %d”, nb lignes); }
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Exemples 1.9
Ecrire un analyseur lexical qui calcule le nombre de lignescontenu dans le fichier source.
%{int nb lignes = 0;
%}%%\n nb lignes++;
%%main() {
yylex();printf(”nombre de lignes : %d”, nb lignes); }
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Exemples 1.9
Ecrire un analyseur lexical qui calcule le nombre de lignescontenu dans le fichier source.
%{int nb lignes = 0;
%}%%\n nb lignes++;%%
main() {yylex();printf(”nombre de lignes : %d”, nb lignes); }
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Exemples 1.9
Ecrire un analyseur lexical qui calcule le nombre de lignescontenu dans le fichier source.
%{int nb lignes = 0;
%}%%\n nb lignes++;%%main() {
yylex();printf(”nombre de lignes : %d”, nb lignes); }
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Exemples 1.9
Ecrire un analyseur lexical qui calcule le nombre de lignescontenu dans le fichier source.
%{int nb lignes = 0;
%}%%\n nb lignes++;%%main() {
yylex();
printf(”nombre de lignes : %d”, nb lignes); }
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Exemples 1.9
Ecrire un analyseur lexical qui calcule le nombre de lignescontenu dans le fichier source.
%{int nb lignes = 0;
%}%%\n nb lignes++;%%main() {
yylex();printf(”nombre de lignes : %d”, nb lignes); }
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Fonctionnement
La zone entre les symboles %{ et %} represente lasection des declarations.Dans cette section, on peut :
declarer des variables globales.declarer des fonctions globales.inclure des fichiers.
Apres le deuxieme %%, c’est la section du codeutilisateur : la fonction main et les autres fonctions.La regle :\n nb lignes++;signifie : a la rencontre d’un caractere de saut de ligne”\n” dans le fichier source, incrementer la variablenb lignes.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
FonctionnementLa zone entre les symboles %{ et %} represente lasection des declarations.
Dans cette section, on peut :declarer des variables globales.declarer des fonctions globales.inclure des fichiers.
Apres le deuxieme %%, c’est la section du codeutilisateur : la fonction main et les autres fonctions.La regle :\n nb lignes++;signifie : a la rencontre d’un caractere de saut de ligne”\n” dans le fichier source, incrementer la variablenb lignes.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
FonctionnementLa zone entre les symboles %{ et %} represente lasection des declarations.Dans cette section, on peut :
declarer des variables globales.declarer des fonctions globales.inclure des fichiers.
Apres le deuxieme %%, c’est la section du codeutilisateur : la fonction main et les autres fonctions.La regle :\n nb lignes++;signifie : a la rencontre d’un caractere de saut de ligne”\n” dans le fichier source, incrementer la variablenb lignes.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
FonctionnementLa zone entre les symboles %{ et %} represente lasection des declarations.Dans cette section, on peut :
declarer des variables globales.
declarer des fonctions globales.inclure des fichiers.
Apres le deuxieme %%, c’est la section du codeutilisateur : la fonction main et les autres fonctions.La regle :\n nb lignes++;signifie : a la rencontre d’un caractere de saut de ligne”\n” dans le fichier source, incrementer la variablenb lignes.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
FonctionnementLa zone entre les symboles %{ et %} represente lasection des declarations.Dans cette section, on peut :
declarer des variables globales.declarer des fonctions globales.
inclure des fichiers.
Apres le deuxieme %%, c’est la section du codeutilisateur : la fonction main et les autres fonctions.La regle :\n nb lignes++;signifie : a la rencontre d’un caractere de saut de ligne”\n” dans le fichier source, incrementer la variablenb lignes.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
FonctionnementLa zone entre les symboles %{ et %} represente lasection des declarations.Dans cette section, on peut :
declarer des variables globales.declarer des fonctions globales.inclure des fichiers.
Apres le deuxieme %%, c’est la section du codeutilisateur : la fonction main et les autres fonctions.La regle :\n nb lignes++;signifie : a la rencontre d’un caractere de saut de ligne”\n” dans le fichier source, incrementer la variablenb lignes.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
FonctionnementLa zone entre les symboles %{ et %} represente lasection des declarations.Dans cette section, on peut :
declarer des variables globales.declarer des fonctions globales.inclure des fichiers.
Apres le deuxieme %%, c’est la section du codeutilisateur : la fonction main et les autres fonctions.
La regle :\n nb lignes++;signifie : a la rencontre d’un caractere de saut de ligne”\n” dans le fichier source, incrementer la variablenb lignes.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
FonctionnementLa zone entre les symboles %{ et %} represente lasection des declarations.Dans cette section, on peut :
declarer des variables globales.declarer des fonctions globales.inclure des fichiers.
Apres le deuxieme %%, c’est la section du codeutilisateur : la fonction main et les autres fonctions.La regle :
\n nb lignes++;signifie : a la rencontre d’un caractere de saut de ligne”\n” dans le fichier source, incrementer la variablenb lignes.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
FonctionnementLa zone entre les symboles %{ et %} represente lasection des declarations.Dans cette section, on peut :
declarer des variables globales.declarer des fonctions globales.inclure des fichiers.
Apres le deuxieme %%, c’est la section du codeutilisateur : la fonction main et les autres fonctions.La regle :\n nb lignes++;
signifie : a la rencontre d’un caractere de saut de ligne”\n” dans le fichier source, incrementer la variablenb lignes.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
FonctionnementLa zone entre les symboles %{ et %} represente lasection des declarations.Dans cette section, on peut :
declarer des variables globales.declarer des fonctions globales.inclure des fichiers.
Apres le deuxieme %%, c’est la section du codeutilisateur : la fonction main et les autres fonctions.La regle :\n nb lignes++;signifie : a la rencontre d’un caractere de saut de ligne”\n” dans le fichier source, incrementer la variablenb lignes.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Fonctionnement
La fonction ”main” contient deux instructions :
yylex : c’est une routine qui effectue l’appel explicite del’analyseur lexical.une instruction printf par laquelle on affiche le nombrede lignes calcule.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Fonctionnement
La fonction ”main” contient deux instructions :
yylex : c’est une routine qui effectue l’appel explicite del’analyseur lexical.une instruction printf par laquelle on affiche le nombrede lignes calcule.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Fonctionnement
La fonction ”main” contient deux instructions :
yylex : c’est une routine qui effectue l’appel explicite del’analyseur lexical.
une instruction printf par laquelle on affiche le nombrede lignes calcule.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Fonctionnement
La fonction ”main” contient deux instructions :
yylex : c’est une routine qui effectue l’appel explicite del’analyseur lexical.une instruction printf par laquelle on affiche le nombrede lignes calcule.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Format d’un fichier Flex
Un fichier Flex contient trois sections :
1 La section des declarations et des definitions.2 La section des regles.3 La section du code utilisateur.
Chaque section est separee de la suivante par une lignecontenant juste les deux symboles %%.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Format d’un fichier Flex
Un fichier Flex contient trois sections :
1 La section des declarations et des definitions.2 La section des regles.3 La section du code utilisateur.
Chaque section est separee de la suivante par une lignecontenant juste les deux symboles %%.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Format d’un fichier Flex
Un fichier Flex contient trois sections :
1 La section des declarations et des definitions.
2 La section des regles.3 La section du code utilisateur.
Chaque section est separee de la suivante par une lignecontenant juste les deux symboles %%.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Format d’un fichier Flex
Un fichier Flex contient trois sections :
1 La section des declarations et des definitions.2 La section des regles.
3 La section du code utilisateur.
Chaque section est separee de la suivante par une lignecontenant juste les deux symboles %%.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Format d’un fichier Flex
Un fichier Flex contient trois sections :
1 La section des declarations et des definitions.2 La section des regles.3 La section du code utilisateur.
Chaque section est separee de la suivante par une lignecontenant juste les deux symboles %%.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Format d’un fichier Flex
Un fichier Flex contient trois sections :
1 La section des declarations et des definitions.2 La section des regles.3 La section du code utilisateur.
Chaque section est separee de la suivante par une lignecontenant juste les deux symboles %%.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Format d’un fichier Flex
Voici comment se presente un fichier Flex :
%{/∗ Declarations ∗/%}/∗ Definitions ∗/%%/∗ Regles ∗/%%/∗ Code utilisateur ∗/
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Format d’un fichier Flex
Voici comment se presente un fichier Flex :
%{/∗ Declarations ∗/%}/∗ Definitions ∗/%%/∗ Regles ∗/%%/∗ Code utilisateur ∗/
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Format d’un fichier Flex
Voici comment se presente un fichier Flex :
%{
/∗ Declarations ∗/%}/∗ Definitions ∗/%%/∗ Regles ∗/%%/∗ Code utilisateur ∗/
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Format d’un fichier Flex
Voici comment se presente un fichier Flex :
%{/∗ Declarations ∗/
%}/∗ Definitions ∗/%%/∗ Regles ∗/%%/∗ Code utilisateur ∗/
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Format d’un fichier Flex
Voici comment se presente un fichier Flex :
%{/∗ Declarations ∗/%}
/∗ Definitions ∗/%%/∗ Regles ∗/%%/∗ Code utilisateur ∗/
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Format d’un fichier Flex
Voici comment se presente un fichier Flex :
%{/∗ Declarations ∗/%}/∗ Definitions ∗/%%
/∗ Regles ∗/%%/∗ Code utilisateur ∗/
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Format d’un fichier Flex
Voici comment se presente un fichier Flex :
%{/∗ Declarations ∗/%}/∗ Definitions ∗/%%/∗ Regles ∗/
%%/∗ Code utilisateur ∗/
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Format d’un fichier Flex
Voici comment se presente un fichier Flex :
%{/∗ Declarations ∗/%}/∗ Definitions ∗/%%/∗ Regles ∗/%%
/∗ Code utilisateur ∗/
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Format d’un fichier Flex
Voici comment se presente un fichier Flex :
%{/∗ Declarations ∗/%}/∗ Definitions ∗/%%/∗ Regles ∗/%%/∗ Code utilisateur ∗/
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Format d’un fichier Flex
Une definition permet de nommer une expressionreguliere.
Une definition est un couple forme d’un identificateur etd’une expression reguliere, separee par au moins uncaractere espace (ou tabulation).
Une expression reguliere peut contenir une reference aun identificateur deja defini. Dans ce cas, l’identificateurdoit etre ecrit entre les symboles ”{” et ”}”.
Une definition doit etre ecrite sur une seule ligne.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Format d’un fichier Flex
Une definition permet de nommer une expressionreguliere.
Une definition est un couple forme d’un identificateur etd’une expression reguliere, separee par au moins uncaractere espace (ou tabulation).
Une expression reguliere peut contenir une reference aun identificateur deja defini. Dans ce cas, l’identificateurdoit etre ecrit entre les symboles ”{” et ”}”.
Une definition doit etre ecrite sur une seule ligne.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Format d’un fichier Flex
Une definition permet de nommer une expressionreguliere.
Une definition est un couple forme d’un identificateur etd’une expression reguliere, separee par au moins uncaractere espace (ou tabulation).
Une expression reguliere peut contenir une reference aun identificateur deja defini. Dans ce cas, l’identificateurdoit etre ecrit entre les symboles ”{” et ”}”.
Une definition doit etre ecrite sur une seule ligne.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Format d’un fichier Flex
Une definition permet de nommer une expressionreguliere.
Une definition est un couple forme d’un identificateur etd’une expression reguliere, separee par au moins uncaractere espace (ou tabulation).
Une expression reguliere peut contenir une reference aun identificateur deja defini. Dans ce cas, l’identificateurdoit etre ecrit entre les symboles ”{” et ”}”.
Une definition doit etre ecrite sur une seule ligne.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Format d’un fichier Flex
Une definition permet de nommer une expressionreguliere.
Une definition est un couple forme d’un identificateur etd’une expression reguliere, separee par au moins uncaractere espace (ou tabulation).
Une expression reguliere peut contenir une reference aun identificateur deja defini. Dans ce cas, l’identificateurdoit etre ecrit entre les symboles ”{” et ”}”.
Une definition doit etre ecrite sur une seule ligne.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Exemples 1.10
CHIFFRE [0 − 9]
ENTIER (+|−)? {CHIFFRE}+
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Exemples 1.10
CHIFFRE [0 − 9]
ENTIER (+|−)? {CHIFFRE}+
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Exemples 1.10
CHIFFRE [0 − 9]
ENTIER (+|−)? {CHIFFRE}+
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Les regles
Definition 1.11
Une regle Flex est la donnee :
1 d’une expression reguliere e.2 et d’une action (celle qui sera executee lorsqu’une
sequence d’entree est reconnue par e).
Exemples 1.12
”int” {printf (”Mot cle int”); }A chaque fois que la chaıne de caracteres ”int” serareconnue, le message ”Mot cle int” sera affiche sur lasortie standard.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Les regles
Definition 1.11
Une regle Flex est la donnee :
1 d’une expression reguliere e.2 et d’une action (celle qui sera executee lorsqu’une
sequence d’entree est reconnue par e).
Exemples 1.12
”int” {printf (”Mot cle int”); }A chaque fois que la chaıne de caracteres ”int” serareconnue, le message ”Mot cle int” sera affiche sur lasortie standard.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Les regles
Definition 1.11
Une regle Flex est la donnee :
1 d’une expression reguliere e.2 et d’une action (celle qui sera executee lorsqu’une
sequence d’entree est reconnue par e).
Exemples 1.12
”int” {printf (”Mot cle int”); }A chaque fois que la chaıne de caracteres ”int” serareconnue, le message ”Mot cle int” sera affiche sur lasortie standard.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Les regles
Definition 1.11
Une regle Flex est la donnee :
1 d’une expression reguliere e.
2 et d’une action (celle qui sera executee lorsqu’unesequence d’entree est reconnue par e).
Exemples 1.12
”int” {printf (”Mot cle int”); }A chaque fois que la chaıne de caracteres ”int” serareconnue, le message ”Mot cle int” sera affiche sur lasortie standard.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Les regles
Definition 1.11
Une regle Flex est la donnee :
1 d’une expression reguliere e.2 et d’une action (celle qui sera executee lorsqu’une
sequence d’entree est reconnue par e).
Exemples 1.12
”int” {printf (”Mot cle int”); }A chaque fois que la chaıne de caracteres ”int” serareconnue, le message ”Mot cle int” sera affiche sur lasortie standard.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Les regles
Definition 1.11
Une regle Flex est la donnee :
1 d’une expression reguliere e.2 et d’une action (celle qui sera executee lorsqu’une
sequence d’entree est reconnue par e).
Exemples 1.12
”int” {printf (”Mot cle int”); }A chaque fois que la chaıne de caracteres ”int” serareconnue, le message ”Mot cle int” sera affiche sur lasortie standard.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Les regles
Definition 1.11
Une regle Flex est la donnee :
1 d’une expression reguliere e.2 et d’une action (celle qui sera executee lorsqu’une
sequence d’entree est reconnue par e).
Exemples 1.12
”int” {printf (”Mot cle int”); }
A chaque fois que la chaıne de caracteres ”int” serareconnue, le message ”Mot cle int” sera affiche sur lasortie standard.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Les regles
Definition 1.11
Une regle Flex est la donnee :
1 d’une expression reguliere e.2 et d’une action (celle qui sera executee lorsqu’une
sequence d’entree est reconnue par e).
Exemples 1.12
”int” {printf (”Mot cle int”); }A chaque fois que la chaıne de caracteres ”int” serareconnue, le message ”Mot cle int” sera affiche sur lasortie standard.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Les regles
Une expression reguliere specifie une unite lexicale dulangage source.Flex utilise les expressions regulieres etendues.Dans Flex , les expressions regulieres sont construites apartir des caracteres et d’operateurs.Les operateurs de Flex sont :” \ [ ] − ? . ∗ + | ( ) $ / { } % < >Pour utiliser ces operateurs comme caracteres ordinaires,il faut les proteger en les placant dans une chaıneentouree de double-quotes (”) ou en les placant apres uncaractere \.Par exemple, \n, \t et \b correspondent comme en C ausaut de ligne, a la tabulation et au retour en arriere.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Les reglesUne expression reguliere specifie une unite lexicale dulangage source.
Flex utilise les expressions regulieres etendues.Dans Flex , les expressions regulieres sont construites apartir des caracteres et d’operateurs.Les operateurs de Flex sont :” \ [ ] − ? . ∗ + | ( ) $ / { } % < >Pour utiliser ces operateurs comme caracteres ordinaires,il faut les proteger en les placant dans une chaıneentouree de double-quotes (”) ou en les placant apres uncaractere \.Par exemple, \n, \t et \b correspondent comme en C ausaut de ligne, a la tabulation et au retour en arriere.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Les reglesUne expression reguliere specifie une unite lexicale dulangage source.Flex utilise les expressions regulieres etendues.
Dans Flex , les expressions regulieres sont construites apartir des caracteres et d’operateurs.Les operateurs de Flex sont :” \ [ ] − ? . ∗ + | ( ) $ / { } % < >Pour utiliser ces operateurs comme caracteres ordinaires,il faut les proteger en les placant dans une chaıneentouree de double-quotes (”) ou en les placant apres uncaractere \.Par exemple, \n, \t et \b correspondent comme en C ausaut de ligne, a la tabulation et au retour en arriere.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Les reglesUne expression reguliere specifie une unite lexicale dulangage source.Flex utilise les expressions regulieres etendues.Dans Flex , les expressions regulieres sont construites apartir des caracteres et d’operateurs.
Les operateurs de Flex sont :” \ [ ] − ? . ∗ + | ( ) $ / { } % < >Pour utiliser ces operateurs comme caracteres ordinaires,il faut les proteger en les placant dans une chaıneentouree de double-quotes (”) ou en les placant apres uncaractere \.Par exemple, \n, \t et \b correspondent comme en C ausaut de ligne, a la tabulation et au retour en arriere.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Les reglesUne expression reguliere specifie une unite lexicale dulangage source.Flex utilise les expressions regulieres etendues.Dans Flex , les expressions regulieres sont construites apartir des caracteres et d’operateurs.Les operateurs de Flex sont :
” \ [ ] − ? . ∗ + | ( ) $ / { } % < >Pour utiliser ces operateurs comme caracteres ordinaires,il faut les proteger en les placant dans une chaıneentouree de double-quotes (”) ou en les placant apres uncaractere \.Par exemple, \n, \t et \b correspondent comme en C ausaut de ligne, a la tabulation et au retour en arriere.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Les reglesUne expression reguliere specifie une unite lexicale dulangage source.Flex utilise les expressions regulieres etendues.Dans Flex , les expressions regulieres sont construites apartir des caracteres et d’operateurs.Les operateurs de Flex sont :” \ [ ] − ? . ∗ + | ( ) $ / { } % < >
Pour utiliser ces operateurs comme caracteres ordinaires,il faut les proteger en les placant dans une chaıneentouree de double-quotes (”) ou en les placant apres uncaractere \.Par exemple, \n, \t et \b correspondent comme en C ausaut de ligne, a la tabulation et au retour en arriere.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Les reglesUne expression reguliere specifie une unite lexicale dulangage source.Flex utilise les expressions regulieres etendues.Dans Flex , les expressions regulieres sont construites apartir des caracteres et d’operateurs.Les operateurs de Flex sont :” \ [ ] − ? . ∗ + | ( ) $ / { } % < >Pour utiliser ces operateurs comme caracteres ordinaires,il faut les proteger en les placant dans une chaıneentouree de double-quotes (”) ou en les placant apres uncaractere \.
Par exemple, \n, \t et \b correspondent comme en C ausaut de ligne, a la tabulation et au retour en arriere.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Les reglesUne expression reguliere specifie une unite lexicale dulangage source.Flex utilise les expressions regulieres etendues.Dans Flex , les expressions regulieres sont construites apartir des caracteres et d’operateurs.Les operateurs de Flex sont :” \ [ ] − ? . ∗ + | ( ) $ / { } % < >Pour utiliser ces operateurs comme caracteres ordinaires,il faut les proteger en les placant dans une chaıneentouree de double-quotes (”) ou en les placant apres uncaractere \.Par exemple, \n, \t et \b correspondent comme en C ausaut de ligne, a la tabulation et au retour en arriere.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Specification d’expressions regulieres avec Flex
” : la chaıne elle-meme.”abc” : specifie la chaıne abc
[ ] : un des elements de l’ensemble.[abc] : a, b ou c[a − z ] : toutes les lettres minuscules
. : tout caractere sauf \n.
| : l’alternance (l’union).(ab|bc) : la chaıne ab ou la chaıne bc.
∗ : zero ou plusieurs fois (l’etoile).(x |y)∗ : 0 ou plusieurs caracteres x ou y .
+ : un ou plusieurs fois (l’etoile positive).[a − z ]+ : 1 ou plusieurs lettres minuscules.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Specification d’expressions regulieres avec Flex
” : la chaıne elle-meme.
”abc” : specifie la chaıne abc
[ ] : un des elements de l’ensemble.[abc] : a, b ou c[a − z ] : toutes les lettres minuscules
. : tout caractere sauf \n.
| : l’alternance (l’union).(ab|bc) : la chaıne ab ou la chaıne bc.
∗ : zero ou plusieurs fois (l’etoile).(x |y)∗ : 0 ou plusieurs caracteres x ou y .
+ : un ou plusieurs fois (l’etoile positive).[a − z ]+ : 1 ou plusieurs lettres minuscules.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Specification d’expressions regulieres avec Flex
” : la chaıne elle-meme.”abc” : specifie la chaıne abc
[ ] : un des elements de l’ensemble.[abc] : a, b ou c[a − z ] : toutes les lettres minuscules
. : tout caractere sauf \n.
| : l’alternance (l’union).(ab|bc) : la chaıne ab ou la chaıne bc.
∗ : zero ou plusieurs fois (l’etoile).(x |y)∗ : 0 ou plusieurs caracteres x ou y .
+ : un ou plusieurs fois (l’etoile positive).[a − z ]+ : 1 ou plusieurs lettres minuscules.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Specification d’expressions regulieres avec Flex
” : la chaıne elle-meme.”abc” : specifie la chaıne abc
[ ] : un des elements de l’ensemble.
[abc] : a, b ou c[a − z ] : toutes les lettres minuscules
. : tout caractere sauf \n.
| : l’alternance (l’union).(ab|bc) : la chaıne ab ou la chaıne bc.
∗ : zero ou plusieurs fois (l’etoile).(x |y)∗ : 0 ou plusieurs caracteres x ou y .
+ : un ou plusieurs fois (l’etoile positive).[a − z ]+ : 1 ou plusieurs lettres minuscules.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Specification d’expressions regulieres avec Flex
” : la chaıne elle-meme.”abc” : specifie la chaıne abc
[ ] : un des elements de l’ensemble.[abc] : a, b ou c
[a − z ] : toutes les lettres minuscules
. : tout caractere sauf \n.
| : l’alternance (l’union).(ab|bc) : la chaıne ab ou la chaıne bc.
∗ : zero ou plusieurs fois (l’etoile).(x |y)∗ : 0 ou plusieurs caracteres x ou y .
+ : un ou plusieurs fois (l’etoile positive).[a − z ]+ : 1 ou plusieurs lettres minuscules.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Specification d’expressions regulieres avec Flex
” : la chaıne elle-meme.”abc” : specifie la chaıne abc
[ ] : un des elements de l’ensemble.[abc] : a, b ou c[a − z ] : toutes les lettres minuscules
. : tout caractere sauf \n.
| : l’alternance (l’union).(ab|bc) : la chaıne ab ou la chaıne bc.
∗ : zero ou plusieurs fois (l’etoile).(x |y)∗ : 0 ou plusieurs caracteres x ou y .
+ : un ou plusieurs fois (l’etoile positive).[a − z ]+ : 1 ou plusieurs lettres minuscules.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Specification d’expressions regulieres avec Flex
” : la chaıne elle-meme.”abc” : specifie la chaıne abc
[ ] : un des elements de l’ensemble.[abc] : a, b ou c[a − z ] : toutes les lettres minuscules
. : tout caractere sauf \n.
| : l’alternance (l’union).(ab|bc) : la chaıne ab ou la chaıne bc.
∗ : zero ou plusieurs fois (l’etoile).(x |y)∗ : 0 ou plusieurs caracteres x ou y .
+ : un ou plusieurs fois (l’etoile positive).[a − z ]+ : 1 ou plusieurs lettres minuscules.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Specification d’expressions regulieres avec Flex
” : la chaıne elle-meme.”abc” : specifie la chaıne abc
[ ] : un des elements de l’ensemble.[abc] : a, b ou c[a − z ] : toutes les lettres minuscules
. : tout caractere sauf \n.
| : l’alternance (l’union).
(ab|bc) : la chaıne ab ou la chaıne bc.
∗ : zero ou plusieurs fois (l’etoile).(x |y)∗ : 0 ou plusieurs caracteres x ou y .
+ : un ou plusieurs fois (l’etoile positive).[a − z ]+ : 1 ou plusieurs lettres minuscules.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Specification d’expressions regulieres avec Flex
” : la chaıne elle-meme.”abc” : specifie la chaıne abc
[ ] : un des elements de l’ensemble.[abc] : a, b ou c[a − z ] : toutes les lettres minuscules
. : tout caractere sauf \n.
| : l’alternance (l’union).(ab|bc) : la chaıne ab ou la chaıne bc.
∗ : zero ou plusieurs fois (l’etoile).(x |y)∗ : 0 ou plusieurs caracteres x ou y .
+ : un ou plusieurs fois (l’etoile positive).[a − z ]+ : 1 ou plusieurs lettres minuscules.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Specification d’expressions regulieres avec Flex
” : la chaıne elle-meme.”abc” : specifie la chaıne abc
[ ] : un des elements de l’ensemble.[abc] : a, b ou c[a − z ] : toutes les lettres minuscules
. : tout caractere sauf \n.
| : l’alternance (l’union).(ab|bc) : la chaıne ab ou la chaıne bc.
∗ : zero ou plusieurs fois (l’etoile).
(x |y)∗ : 0 ou plusieurs caracteres x ou y .
+ : un ou plusieurs fois (l’etoile positive).[a − z ]+ : 1 ou plusieurs lettres minuscules.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Specification d’expressions regulieres avec Flex
” : la chaıne elle-meme.”abc” : specifie la chaıne abc
[ ] : un des elements de l’ensemble.[abc] : a, b ou c[a − z ] : toutes les lettres minuscules
. : tout caractere sauf \n.
| : l’alternance (l’union).(ab|bc) : la chaıne ab ou la chaıne bc.
∗ : zero ou plusieurs fois (l’etoile).(x |y)∗ : 0 ou plusieurs caracteres x ou y .
+ : un ou plusieurs fois (l’etoile positive).[a − z ]+ : 1 ou plusieurs lettres minuscules.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Specification d’expressions regulieres avec Flex
” : la chaıne elle-meme.”abc” : specifie la chaıne abc
[ ] : un des elements de l’ensemble.[abc] : a, b ou c[a − z ] : toutes les lettres minuscules
. : tout caractere sauf \n.
| : l’alternance (l’union).(ab|bc) : la chaıne ab ou la chaıne bc.
∗ : zero ou plusieurs fois (l’etoile).(x |y)∗ : 0 ou plusieurs caracteres x ou y .
+ : un ou plusieurs fois (l’etoile positive).
[a − z ]+ : 1 ou plusieurs lettres minuscules.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Specification d’expressions regulieres avec Flex
” : la chaıne elle-meme.”abc” : specifie la chaıne abc
[ ] : un des elements de l’ensemble.[abc] : a, b ou c[a − z ] : toutes les lettres minuscules
. : tout caractere sauf \n.
| : l’alternance (l’union).(ab|bc) : la chaıne ab ou la chaıne bc.
∗ : zero ou plusieurs fois (l’etoile).(x |y)∗ : 0 ou plusieurs caracteres x ou y .
+ : un ou plusieurs fois (l’etoile positive).[a − z ]+ : 1 ou plusieurs lettres minuscules.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Specification d’expressions regulieres avec Flex
? : operateur d’occurrence 0 ou 1 fois.ab?c : la chaıne abc ou ac.
/ : condition de reconnaissance.ab/cd : la chaıne ab seulement si elle est suivie de lachaıne cd.
$ : reconnaissance en fin de ligne.ab$ : la chaıne ab seulement si elle est en fin de ligne. : reconnaissance en debut de ligne.ab : la chaıne ab seulement si elle est en debut de ligne.
{ } : repetition bornee.a{1, 5} : les chaınes a, aa, aaa, aaaa ou aaaaa.a{2, } : les chaınes aa, aaa, aaa, ...etc.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Specification d’expressions regulieres avec Flex
? : operateur d’occurrence 0 ou 1 fois.
ab?c : la chaıne abc ou ac.
/ : condition de reconnaissance.ab/cd : la chaıne ab seulement si elle est suivie de lachaıne cd.
$ : reconnaissance en fin de ligne.ab$ : la chaıne ab seulement si elle est en fin de ligne. : reconnaissance en debut de ligne.ab : la chaıne ab seulement si elle est en debut de ligne.
{ } : repetition bornee.a{1, 5} : les chaınes a, aa, aaa, aaaa ou aaaaa.a{2, } : les chaınes aa, aaa, aaa, ...etc.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Specification d’expressions regulieres avec Flex
? : operateur d’occurrence 0 ou 1 fois.ab?c : la chaıne abc ou ac.
/ : condition de reconnaissance.ab/cd : la chaıne ab seulement si elle est suivie de lachaıne cd.
$ : reconnaissance en fin de ligne.ab$ : la chaıne ab seulement si elle est en fin de ligne. : reconnaissance en debut de ligne.ab : la chaıne ab seulement si elle est en debut de ligne.
{ } : repetition bornee.a{1, 5} : les chaınes a, aa, aaa, aaaa ou aaaaa.a{2, } : les chaınes aa, aaa, aaa, ...etc.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Specification d’expressions regulieres avec Flex
? : operateur d’occurrence 0 ou 1 fois.ab?c : la chaıne abc ou ac.
/ : condition de reconnaissance.
ab/cd : la chaıne ab seulement si elle est suivie de lachaıne cd.
$ : reconnaissance en fin de ligne.ab$ : la chaıne ab seulement si elle est en fin de ligne. : reconnaissance en debut de ligne.ab : la chaıne ab seulement si elle est en debut de ligne.
{ } : repetition bornee.a{1, 5} : les chaınes a, aa, aaa, aaaa ou aaaaa.a{2, } : les chaınes aa, aaa, aaa, ...etc.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Specification d’expressions regulieres avec Flex
? : operateur d’occurrence 0 ou 1 fois.ab?c : la chaıne abc ou ac.
/ : condition de reconnaissance.ab/cd : la chaıne ab seulement si elle est suivie de lachaıne cd.
$ : reconnaissance en fin de ligne.ab$ : la chaıne ab seulement si elle est en fin de ligne. : reconnaissance en debut de ligne.ab : la chaıne ab seulement si elle est en debut de ligne.
{ } : repetition bornee.a{1, 5} : les chaınes a, aa, aaa, aaaa ou aaaaa.a{2, } : les chaınes aa, aaa, aaa, ...etc.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Specification d’expressions regulieres avec Flex
? : operateur d’occurrence 0 ou 1 fois.ab?c : la chaıne abc ou ac.
/ : condition de reconnaissance.ab/cd : la chaıne ab seulement si elle est suivie de lachaıne cd.
$ : reconnaissance en fin de ligne.
ab$ : la chaıne ab seulement si elle est en fin de ligne. : reconnaissance en debut de ligne.ab : la chaıne ab seulement si elle est en debut de ligne.
{ } : repetition bornee.a{1, 5} : les chaınes a, aa, aaa, aaaa ou aaaaa.a{2, } : les chaınes aa, aaa, aaa, ...etc.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Specification d’expressions regulieres avec Flex
? : operateur d’occurrence 0 ou 1 fois.ab?c : la chaıne abc ou ac.
/ : condition de reconnaissance.ab/cd : la chaıne ab seulement si elle est suivie de lachaıne cd.
$ : reconnaissance en fin de ligne.ab$ : la chaıne ab seulement si elle est en fin de ligne.
: reconnaissance en debut de ligne.ab : la chaıne ab seulement si elle est en debut de ligne.
{ } : repetition bornee.a{1, 5} : les chaınes a, aa, aaa, aaaa ou aaaaa.a{2, } : les chaınes aa, aaa, aaa, ...etc.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Specification d’expressions regulieres avec Flex
? : operateur d’occurrence 0 ou 1 fois.ab?c : la chaıne abc ou ac.
/ : condition de reconnaissance.ab/cd : la chaıne ab seulement si elle est suivie de lachaıne cd.
$ : reconnaissance en fin de ligne.ab$ : la chaıne ab seulement si elle est en fin de ligne. : reconnaissance en debut de ligne.
ab : la chaıne ab seulement si elle est en debut de ligne.
{ } : repetition bornee.a{1, 5} : les chaınes a, aa, aaa, aaaa ou aaaaa.a{2, } : les chaınes aa, aaa, aaa, ...etc.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Specification d’expressions regulieres avec Flex
? : operateur d’occurrence 0 ou 1 fois.ab?c : la chaıne abc ou ac.
/ : condition de reconnaissance.ab/cd : la chaıne ab seulement si elle est suivie de lachaıne cd.
$ : reconnaissance en fin de ligne.ab$ : la chaıne ab seulement si elle est en fin de ligne. : reconnaissance en debut de ligne.ab : la chaıne ab seulement si elle est en debut de ligne.
{ } : repetition bornee.a{1, 5} : les chaınes a, aa, aaa, aaaa ou aaaaa.a{2, } : les chaınes aa, aaa, aaa, ...etc.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Specification d’expressions regulieres avec Flex
? : operateur d’occurrence 0 ou 1 fois.ab?c : la chaıne abc ou ac.
/ : condition de reconnaissance.ab/cd : la chaıne ab seulement si elle est suivie de lachaıne cd.
$ : reconnaissance en fin de ligne.ab$ : la chaıne ab seulement si elle est en fin de ligne. : reconnaissance en debut de ligne.ab : la chaıne ab seulement si elle est en debut de ligne.
{ } : repetition bornee.
a{1, 5} : les chaınes a, aa, aaa, aaaa ou aaaaa.a{2, } : les chaınes aa, aaa, aaa, ...etc.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Specification d’expressions regulieres avec Flex
? : operateur d’occurrence 0 ou 1 fois.ab?c : la chaıne abc ou ac.
/ : condition de reconnaissance.ab/cd : la chaıne ab seulement si elle est suivie de lachaıne cd.
$ : reconnaissance en fin de ligne.ab$ : la chaıne ab seulement si elle est en fin de ligne. : reconnaissance en debut de ligne.ab : la chaıne ab seulement si elle est en debut de ligne.
{ } : repetition bornee.a{1, 5} : les chaınes a, aa, aaa, aaaa ou aaaaa.
a{2, } : les chaınes aa, aaa, aaa, ...etc.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Specification d’expressions regulieres avec Flex
? : operateur d’occurrence 0 ou 1 fois.ab?c : la chaıne abc ou ac.
/ : condition de reconnaissance.ab/cd : la chaıne ab seulement si elle est suivie de lachaıne cd.
$ : reconnaissance en fin de ligne.ab$ : la chaıne ab seulement si elle est en fin de ligne. : reconnaissance en debut de ligne.ab : la chaıne ab seulement si elle est en debut de ligne.
{ } : repetition bornee.a{1, 5} : les chaınes a, aa, aaa, aaaa ou aaaaa.a{2, } : les chaınes aa, aaa, aaa, ...etc.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Resolution des conflits
En cas de conflit, Flex choisit toujours la regle qui produitle plus long lexeme.
Exemples 1.13
”prog” action1
”program” action2
La deuxieme regle sera choisie en cas de conflit.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Resolution des conflits
En cas de conflit, Flex choisit toujours la regle qui produitle plus long lexeme.
Exemples 1.13
”prog” action1
”program” action2
La deuxieme regle sera choisie en cas de conflit.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Resolution des conflits
En cas de conflit, Flex choisit toujours la regle qui produitle plus long lexeme.
Exemples 1.13
”prog” action1
”program” action2
La deuxieme regle sera choisie en cas de conflit.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Resolution des conflits
En cas de conflit, Flex choisit toujours la regle qui produitle plus long lexeme.
Exemples 1.13
”prog” action1
”program” action2
La deuxieme regle sera choisie en cas de conflit.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Resolution des conflits
En cas de conflit, Flex choisit toujours la regle qui produitle plus long lexeme.
Exemples 1.13
”prog” action1
”program” action2
La deuxieme regle sera choisie en cas de conflit.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Resolution des conflits
En cas de conflit, Flex choisit toujours la regle qui produitle plus long lexeme.
Exemples 1.13
”prog” action1
”program” action2
La deuxieme regle sera choisie en cas de conflit.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Resolution des conflits
Si plusieurs regles donnent des lexemes de memeslongueurs, Flex choisit la premiere.
Exemples 1.14
”prog” action1
[a − z ]+ action2
La premiere regle sera choisie en cas de conflit de lexemesayant memes longueurs.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Resolution des conflits
Si plusieurs regles donnent des lexemes de memeslongueurs, Flex choisit la premiere.
Exemples 1.14
”prog” action1
[a − z ]+ action2
La premiere regle sera choisie en cas de conflit de lexemesayant memes longueurs.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Resolution des conflits
Si plusieurs regles donnent des lexemes de memeslongueurs, Flex choisit la premiere.
Exemples 1.14
”prog” action1
[a − z ]+ action2
La premiere regle sera choisie en cas de conflit de lexemesayant memes longueurs.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Resolution des conflits
Si plusieurs regles donnent des lexemes de memeslongueurs, Flex choisit la premiere.
Exemples 1.14
”prog” action1
[a − z ]+ action2
La premiere regle sera choisie en cas de conflit de lexemesayant memes longueurs.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Resolution des conflits
Si plusieurs regles donnent des lexemes de memeslongueurs, Flex choisit la premiere.
Exemples 1.14
”prog” action1
[a − z ]+ action2
La premiere regle sera choisie en cas de conflit de lexemesayant memes longueurs.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Resolution des conflits
Si plusieurs regles donnent des lexemes de memeslongueurs, Flex choisit la premiere.
Exemples 1.14
”prog” action1
[a − z ]+ action2
La premiere regle sera choisie en cas de conflit de lexemesayant memes longueurs.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Resolution des conflits
Si aucune regle ne correpond au flot d’entree, Flex choisitsa regle par defaut implicite :
.|\n {ECHO}
Cette regle par defaut, recopie le flot d’entree sur le flotde sortie.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Resolution des conflits
Si aucune regle ne correpond au flot d’entree, Flex choisitsa regle par defaut implicite :
.|\n {ECHO}
Cette regle par defaut, recopie le flot d’entree sur le flotde sortie.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Resolution des conflits
Si aucune regle ne correpond au flot d’entree, Flex choisitsa regle par defaut implicite :
.|\n {ECHO}
Cette regle par defaut, recopie le flot d’entree sur le flotde sortie.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Resolution des conflits
Si aucune regle ne correpond au flot d’entree, Flex choisitsa regle par defaut implicite :
.|\n {ECHO}
Cette regle par defaut, recopie le flot d’entree sur le flotde sortie.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Les actions
Definition 1.15
Une action est un bloc d’instructions qui est executeelorsque la chaıne de caracteres lue correspond a la chaınespecifiee avant l’action.
Flex dispose de quelques variables et actionspredefinies.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Les actions
Definition 1.15
Une action est un bloc d’instructions qui est executeelorsque la chaıne de caracteres lue correspond a la chaınespecifiee avant l’action.
Flex dispose de quelques variables et actionspredefinies.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Les actions
Definition 1.15
Une action est un bloc d’instructions qui est executeelorsque la chaıne de caracteres lue correspond a la chaınespecifiee avant l’action.
Flex dispose de quelques variables et actionspredefinies.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Les actions
Definition 1.15
Une action est un bloc d’instructions qui est executeelorsque la chaıne de caracteres lue correspond a la chaınespecifiee avant l’action.
Flex dispose de quelques variables et actionspredefinies.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Quelques variables de Flex
yytext : la chaıne reconnue par l’expression reguliere (lelexeme courant).
yyleng : la longueur de yytext.
yyin : le fichier d’entree (c’est un FILE*).
yyout : le fichier de sortie (c’est un FILE*).
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Quelques variables de Flex
yytext : la chaıne reconnue par l’expression reguliere (lelexeme courant).
yyleng : la longueur de yytext.
yyin : le fichier d’entree (c’est un FILE*).
yyout : le fichier de sortie (c’est un FILE*).
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Quelques variables de Flex
yytext : la chaıne reconnue par l’expression reguliere (lelexeme courant).
yyleng : la longueur de yytext.
yyin : le fichier d’entree (c’est un FILE*).
yyout : le fichier de sortie (c’est un FILE*).
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Quelques variables de Flex
yytext : la chaıne reconnue par l’expression reguliere (lelexeme courant).
yyleng : la longueur de yytext.
yyin : le fichier d’entree (c’est un FILE*).
yyout : le fichier de sortie (c’est un FILE*).
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Quelques variables de Flex
yytext : la chaıne reconnue par l’expression reguliere (lelexeme courant).
yyleng : la longueur de yytext.
yyin : le fichier d’entree (c’est un FILE*).
yyout : le fichier de sortie (c’est un FILE*).
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Quelques macros de Flex
ECHO : recopie le lexeme courant.[a − z ]+ ECHO;ce qui equivaut a {printf(”%s”, yytext); }REJECT : permet d’envisager la ”deuxieme meilleure”regle pour laquelle le flot d’entree (ou un de ses prefixes)est reconnu.foo {f (); REJECT; }[ \t\n]+ {++word count; }ce qui permet de compter le nombre totatl des caractereset executer la fonction f () chaque fois que la cahıne fooest rencontree.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Quelques macros de Flex
ECHO : recopie le lexeme courant.
[a − z ]+ ECHO;ce qui equivaut a {printf(”%s”, yytext); }REJECT : permet d’envisager la ”deuxieme meilleure”regle pour laquelle le flot d’entree (ou un de ses prefixes)est reconnu.foo {f (); REJECT; }[ \t\n]+ {++word count; }ce qui permet de compter le nombre totatl des caractereset executer la fonction f () chaque fois que la cahıne fooest rencontree.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Quelques macros de Flex
ECHO : recopie le lexeme courant.[a − z ]+ ECHO;
ce qui equivaut a {printf(”%s”, yytext); }REJECT : permet d’envisager la ”deuxieme meilleure”regle pour laquelle le flot d’entree (ou un de ses prefixes)est reconnu.foo {f (); REJECT; }[ \t\n]+ {++word count; }ce qui permet de compter le nombre totatl des caractereset executer la fonction f () chaque fois que la cahıne fooest rencontree.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Quelques macros de Flex
ECHO : recopie le lexeme courant.[a − z ]+ ECHO;ce qui equivaut a {printf(”%s”, yytext); }
REJECT : permet d’envisager la ”deuxieme meilleure”regle pour laquelle le flot d’entree (ou un de ses prefixes)est reconnu.foo {f (); REJECT; }[ \t\n]+ {++word count; }ce qui permet de compter le nombre totatl des caractereset executer la fonction f () chaque fois que la cahıne fooest rencontree.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Quelques macros de Flex
ECHO : recopie le lexeme courant.[a − z ]+ ECHO;ce qui equivaut a {printf(”%s”, yytext); }REJECT : permet d’envisager la ”deuxieme meilleure”regle pour laquelle le flot d’entree (ou un de ses prefixes)est reconnu.
foo {f (); REJECT; }[ \t\n]+ {++word count; }ce qui permet de compter le nombre totatl des caractereset executer la fonction f () chaque fois que la cahıne fooest rencontree.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Quelques macros de Flex
ECHO : recopie le lexeme courant.[a − z ]+ ECHO;ce qui equivaut a {printf(”%s”, yytext); }REJECT : permet d’envisager la ”deuxieme meilleure”regle pour laquelle le flot d’entree (ou un de ses prefixes)est reconnu.foo {f (); REJECT; }
[ \t\n]+ {++word count; }ce qui permet de compter le nombre totatl des caractereset executer la fonction f () chaque fois que la cahıne fooest rencontree.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Quelques macros de Flex
ECHO : recopie le lexeme courant.[a − z ]+ ECHO;ce qui equivaut a {printf(”%s”, yytext); }REJECT : permet d’envisager la ”deuxieme meilleure”regle pour laquelle le flot d’entree (ou un de ses prefixes)est reconnu.foo {f (); REJECT; }[ \t\n]+ {++word count; }
ce qui permet de compter le nombre totatl des caractereset executer la fonction f () chaque fois que la cahıne fooest rencontree.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Quelques macros de Flex
ECHO : recopie le lexeme courant.[a − z ]+ ECHO;ce qui equivaut a {printf(”%s”, yytext); }REJECT : permet d’envisager la ”deuxieme meilleure”regle pour laquelle le flot d’entree (ou un de ses prefixes)est reconnu.foo {f (); REJECT; }[ \t\n]+ {++word count; }ce qui permet de compter le nombre totatl des caractereset executer la fonction f () chaque fois que la cahıne fooest rencontree.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Quelques directives de Flex
yymore() : indique que lors de la prochaıne applicationd’une regle, la chaıne reconnue doit etre cancatenee ayytext qui ne doit donc pas ecraser yytext.
Exemples 1.16
mega- { ECHO; yymore(); }octets ECHO;
Pour l’entree mega-octets, l’analyseur fourniramega-mega-octets.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Quelques directives de Flex
yymore() : indique que lors de la prochaıne applicationd’une regle, la chaıne reconnue doit etre cancatenee ayytext qui ne doit donc pas ecraser yytext.
Exemples 1.16
mega- { ECHO; yymore(); }octets ECHO;
Pour l’entree mega-octets, l’analyseur fourniramega-mega-octets.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Quelques directives de Flex
yymore() : indique que lors de la prochaıne applicationd’une regle, la chaıne reconnue doit etre cancatenee ayytext qui ne doit donc pas ecraser yytext.
Exemples 1.16
mega- { ECHO; yymore(); }octets ECHO;
Pour l’entree mega-octets, l’analyseur fourniramega-mega-octets.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Quelques directives de Flex
yymore() : indique que lors de la prochaıne applicationd’une regle, la chaıne reconnue doit etre cancatenee ayytext qui ne doit donc pas ecraser yytext.
Exemples 1.16
mega- { ECHO; yymore(); }
octets ECHO;
Pour l’entree mega-octets, l’analyseur fourniramega-mega-octets.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Quelques directives de Flex
yymore() : indique que lors de la prochaıne applicationd’une regle, la chaıne reconnue doit etre cancatenee ayytext qui ne doit donc pas ecraser yytext.
Exemples 1.16
mega- { ECHO; yymore(); }octets ECHO;
Pour l’entree mega-octets, l’analyseur fourniramega-mega-octets.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Quelques directives de Flex
yymore() : indique que lors de la prochaıne applicationd’une regle, la chaıne reconnue doit etre cancatenee ayytext qui ne doit donc pas ecraser yytext.
Exemples 1.16
mega- { ECHO; yymore(); }octets ECHO;
Pour l’entree mega-octets, l’analyseur fourniramega-mega-octets.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Quelques directives de Flex
yyless(n) : indique que les n premiers carateres de yytextdoivent etre pris en compte lors de la prochaıneapplication d’une regle.
Exemples 1.17
foobar { ECHO; yyles(3); }[a − z ]+ ECHO;
Pour l’entree foobar, l’analyseur fournira foobarbar.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Quelques directives de Flex
yyless(n) : indique que les n premiers carateres de yytextdoivent etre pris en compte lors de la prochaıneapplication d’une regle.
Exemples 1.17
foobar { ECHO; yyles(3); }[a − z ]+ ECHO;
Pour l’entree foobar, l’analyseur fournira foobarbar.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Quelques directives de Flex
yyless(n) : indique que les n premiers carateres de yytextdoivent etre pris en compte lors de la prochaıneapplication d’une regle.
Exemples 1.17
foobar { ECHO; yyles(3); }[a − z ]+ ECHO;
Pour l’entree foobar, l’analyseur fournira foobarbar.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Quelques directives de Flex
yyless(n) : indique que les n premiers carateres de yytextdoivent etre pris en compte lors de la prochaıneapplication d’une regle.
Exemples 1.17
foobar { ECHO; yyles(3); }
[a − z ]+ ECHO;
Pour l’entree foobar, l’analyseur fournira foobarbar.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Quelques directives de Flex
yyless(n) : indique que les n premiers carateres de yytextdoivent etre pris en compte lors de la prochaıneapplication d’une regle.
Exemples 1.17
foobar { ECHO; yyles(3); }[a − z ]+ ECHO;
Pour l’entree foobar, l’analyseur fournira foobarbar.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation
Flex : Fast Lexer
Quelques directives de Flex
yyless(n) : indique que les n premiers carateres de yytextdoivent etre pris en compte lors de la prochaıneapplication d’une regle.
Exemples 1.17
foobar { ECHO; yyles(3); }[a − z ]+ ECHO;
Pour l’entree foobar, l’analyseur fournira foobarbar.
Prof. Abdelmajid Dargham Chapitre 4 : Introduction a la compilation