deuxième partie chapitre 1 : analyse lexicale€¦ · deuxi`eme partie chapitre 1 : analyse...

Post on 11-Sep-2020

23 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

top related