Vous êtes sur la page 1sur 142

Chapitre 8 :

L’outil d’analyse syntaxique Bison

Prof. Abdelmajid Dargham


Faculté des Sciences, Oujda
Filière SMI - S4
Module Théorie des langages & Compilation

Université Mohamed Premier

Septembre, 2012
Sommaire du chapitre 8

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Sommaire du chapitre 8

Introduction

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Sommaire du chapitre 8

Introduction
Format d’un Fichier Bison

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Sommaire du chapitre 8

Introduction
Format d’un Fichier Bison
Règles

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Sommaire du chapitre 8

Introduction
Format d’un Fichier Bison
Règles
Déclarations et définitions

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Sommaire du chapitre 8

Introduction
Format d’un Fichier Bison
Règles
Déclarations et définitions
Association d’une valeur aux symboles

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Sommaire du chapitre 8

Introduction
Format d’un Fichier Bison
Règles
Déclarations et définitions
Association d’une valeur aux symboles
Interaction avec l’analyseur lexical

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Sommaire du chapitre 8

Introduction
Format d’un Fichier Bison
Règles
Déclarations et définitions
Association d’une valeur aux symboles
Interaction avec l’analyseur lexical
Actions

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Sommaire du chapitre 8

Introduction
Format d’un Fichier Bison
Règles
Déclarations et définitions
Association d’une valeur aux symboles
Interaction avec l’analyseur lexical
Actions
Exercices corrigés

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Introdutcion

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Introdutcion

Une fois l’analyse lexicale effectuée, l’analyse


syntaxique (parsing) permet de vérifier qu’un texte est
conforme à une grammaire G donnée.

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Introdutcion

Une fois l’analyse lexicale effectuée, l’analyse


syntaxique (parsing) permet de vérifier qu’un texte est
conforme à une grammaire G donnée.
L’analyse syntaxique construit l’arbre syntaxique
correspondant au texte analysé.

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Introdutcion

Une fois l’analyse lexicale effectuée, l’analyse


syntaxique (parsing) permet de vérifier qu’un texte est
conforme à une grammaire G donnée.
L’analyse syntaxique construit l’arbre syntaxique
correspondant au texte analysé.
Bison est un outil qui génère d’une manière
automatique, un analyseur syntaxique basée sur une
grammaire donnée.

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Introdutcion

Une fois l’analyse lexicale effectuée, l’analyse


syntaxique (parsing) permet de vérifier qu’un texte est
conforme à une grammaire G donnée.
L’analyse syntaxique construit l’arbre syntaxique
correspondant au texte analysé.
Bison est un outil qui génère d’une manière
automatique, un analyseur syntaxique basée sur une
grammaire donnée.
Un programme Bison est enregistré avec l’extension ”.y”.

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Introdutcion

Étapes pour la conception d’un analyseur syntaxique


avec Bison

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Introdutcion

Étapes pour la conception d’un analyseur syntaxique


avec Bison
Définir la grammaire de l’analyseur, puis l’écrire en
respectant le format de Bison.

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Introdutcion

Étapes pour la conception d’un analyseur syntaxique


avec Bison
Définir la grammaire de l’analyseur, puis l’écrire en
respectant le format de Bison.
Pour chaque règle de production de la grammaire, écrire
l’action (les instructions C) qui va être exécutée
lorsqu’une instance de cette règle est reconnue par
l’analyseur.

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Introdutcion

Étapes pour la conception d’un analyseur syntaxique


avec Bison
Définir la grammaire de l’analyseur, puis l’écrire en
respectant le format de Bison.
Pour chaque règle de production de la grammaire, écrire
l’action (les instructions C) qui va être exécutée
lorsqu’une instance de cette règle est reconnue par
l’analyseur.
Écrire un analyseur lexical qui va traiter le fichier source
et produira les lexèmes à l’analyseur syntaxique. celui-ci
peut être écrit à la main ou bien avec Flex.

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Introdutcion

Chaı̂ne de compilation

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Introdutcion

Chaı̂ne de compilation
On compile le fichier contenant le code Bison par :

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Introdutcion

Chaı̂ne de compilation
On compile le fichier contenant le code Bison par :
bison -d parser.y

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Introdutcion

Chaı̂ne de compilation
On compile le fichier contenant le code Bison par :
bison -d parser.y
On compile le fichier contenant le code Flex par :

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Introdutcion

Chaı̂ne de compilation
On compile le fichier contenant le code Bison par :
bison -d parser.y
On compile le fichier contenant le code Flex par :
flex scanner.flex

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Introdutcion

Chaı̂ne de compilation
On compile le fichier contenant le code Bison par :
bison -d parser.y
On compile le fichier contenant le code Flex par :
flex scanner.flex
On compile par gcc :

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Introdutcion

Chaı̂ne de compilation
On compile le fichier contenant le code Bison par :
bison -d parser.y
On compile le fichier contenant le code Flex par :
flex scanner.flex
On compile par gcc :
gcc -o parser parser.tab.c lex.yy.c -ly -lfl
Pour lancer l’analyseur ainsi crée :

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Introdutcion

Chaı̂ne de compilation
On compile le fichier contenant le code Bison par :
bison -d parser.y
On compile le fichier contenant le code Flex par :
flex scanner.flex
On compile par gcc :
gcc -o parser parser.tab.c lex.yy.c -ly -lfl
Pour lancer l’analyseur ainsi crée :
parser < source.txt > cible.txt

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Format d’un fichier Bison

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Format d’un fichier Bison

Déclarations

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Format d’un fichier Bison

Déclarations
%%

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Format d’un fichier Bison

Déclarations
%%
Règles

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Format d’un fichier Bison

Déclarations
%%
Règles
%%

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Format d’un fichier Bison

Déclarations
%%
Règles
%%
Code supplémentaire

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Règles

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Règles

Une règle est une règle de production de la grammaire,


enrichie d’actions.

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Règles

Une règle est une règle de production de la grammaire,


enrichie d’actions.
Une règle s’écrit :

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Règles

Une règle est une règle de production de la grammaire,


enrichie d’actions.
Une règle s’écrit :
A : Corps;

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Règles

Une règle est une règle de production de la grammaire,


enrichie d’actions.
Une règle s’écrit :
A : Corps;
où A est le nom (un identificateur) d’un non-terminal et
Corps est une suite (éventuellement vide) de noms (de
terminaux et non-terminaux) et de littéraux (caractères
entre guillemets).

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Règles

Une règle est une règle de production de la grammaire,


enrichie d’actions.
Une règle s’écrit :
A : Corps;
où A est le nom (un identificateur) d’un non-terminal et
Corps est une suite (éventuellement vide) de noms (de
terminaux et non-terminaux) et de littéraux (caractères
entre guillemets).
Lorqu’il existe plusieurs règles de production pour un
même non-terminal, l’opérateur ”|” peut être utilisé pour
séparer le corps de chaque règle.

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Règles

Une règle est une règle de production de la grammaire,


enrichie d’actions.
Une règle s’écrit :
A : Corps;
où A est le nom (un identificateur) d’un non-terminal et
Corps est une suite (éventuellement vide) de noms (de
terminaux et non-terminaux) et de littéraux (caractères
entre guillemets).
Lorqu’il existe plusieurs règles de production pour un
même non-terminal, l’opérateur ”|” peut être utilisé pour
séparer le corps de chaque règle.
On peut par exemple écrire :

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Règles

Une règle est une règle de production de la grammaire,


enrichie d’actions.
Une règle s’écrit :
A : Corps;
où A est le nom (un identificateur) d’un non-terminal et
Corps est une suite (éventuellement vide) de noms (de
terminaux et non-terminaux) et de littéraux (caractères
entre guillemets).
Lorqu’il existe plusieurs règles de production pour un
même non-terminal, l’opérateur ”|” peut être utilisé pour
séparer le corps de chaque règle.
On peut par exemple écrire :
exp : number | exp 0 +0 exp
Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison
Déclarations et définitions

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Déclarations et définitions

La partie déclarations et définitions contient les


déclarations C (entre les symboles %{ et %}), ainsi que
la déclaration des noms de tokens (lexèmes).

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Déclarations et définitions

La partie déclarations et définitions contient les


déclarations C (entre les symboles %{ et %}), ainsi que
la déclaration des noms de tokens (lexèmes).
La déclaration d’un token s’effectue via la directive
%token :

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Déclarations et définitions

La partie déclarations et définitions contient les


déclarations C (entre les symboles %{ et %}), ainsi que
la déclaration des noms de tokens (lexèmes).
La déclaration d’un token s’effectue via la directive
%token :
%token name1 name2 ...;

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Déclarations et définitions

La partie déclarations et définitions contient les


déclarations C (entre les symboles %{ et %}), ainsi que
la déclaration des noms de tokens (lexèmes).
La déclaration d’un token s’effectue via la directive
%token :
%token name1 name2 ...;
Les noms qui n’ont pas été déclarés en tant que ”nom de
token” sont considérés comme des non-terminaux.

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Déclarations et définitions

Cas des opérateurs

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Déclarations et définitions

Cas des opérateurs


Lorque les tokens correspondent à des opérateurs pour
lesuqles on souhaite spécifier une propriété d’associativité,
ou utilise left et right à la place de token.

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Déclarations et définitions

Cas des opérateurs


Lorque les tokens correspondent à des opérateurs pour
lesuqles on souhaite spécifier une propriété d’associativité,
ou utilise left et right à la place de token.
Par exemple, on écrira :

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Déclarations et définitions

Cas des opérateurs


Lorque les tokens correspondent à des opérateurs pour
lesuqles on souhaite spécifier une propriété d’associativité,
ou utilise left et right à la place de token.
Par exemple, on écrira :
%left 0 +0 0 −0

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Déclarations et définitions

Cas des opérateurs


Lorque les tokens correspondent à des opérateurs pour
lesuqles on souhaite spécifier une propriété d’associativité,
ou utilise left et right à la place de token.
Par exemple, on écrira :
%left 0 +0 0 −0
%right 0 b 0

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Déclarations et définitions

Cas des opérateurs


Lorque les tokens correspondent à des opérateurs pour
lesuqles on souhaite spécifier une propriété d’associativité,
ou utilise left et right à la place de token.
Par exemple, on écrira :
%left 0 +0 0 −0
%right 0 b 0
Si l’on souhaite de plus spécifier la précédence entre
opérateurs, on écrit la déclaration des tokens dans l’ordre
inverse des priorités.

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Déclarations et définitions

Cas des opérateurs


Lorque les tokens correspondent à des opérateurs pour
lesuqles on souhaite spécifier une propriété d’associativité,
ou utilise left et right à la place de token.
Par exemple, on écrira :
%left 0 +0 0 −0
%right 0 b 0
Si l’on souhaite de plus spécifier la précédence entre
opérateurs, on écrit la déclaration des tokens dans l’ordre
inverse des priorités.
Dans l’exemple ci-dessus, l’opérateur 0 b 0 a une priorité
plus grande que les opérateurs 0 +0 et 0 −0 (qui sont de
même priorité).
Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison
Déclarations et définitions

Cas des opérateurs

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Déclarations et définitions

Cas des opérateurs


Il est également possible de modifier la précédence d’un
opérateur dans une règle.

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Déclarations et définitions

Cas des opérateurs


Il est également possible de modifier la précédence d’un
opérateur dans une règle.
Par exemple, si l’on souhaite décrire le ”moins unaire”
aussi désigné par les symbole 0 −0 comme un opérateur
ayant même précédence qu’un token de nom NEG , on
écrira :

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Déclarations et définitions

Cas des opérateurs


Il est également possible de modifier la précédence d’un
opérateur dans une règle.
Par exemple, si l’on souhaite décrire le ”moins unaire”
aussi désigné par les symbole 0 −0 comme un opérateur
ayant même précédence qu’un token de nom NEG , on
écrira :
mexp : 0 −0 %prec NEG ...

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Déclarations et définitions

Cas des opérateurs


Il est également possible de modifier la précédence d’un
opérateur dans une règle.
Par exemple, si l’on souhaite décrire le ”moins unaire”
aussi désigné par les symbole 0 −0 comme un opérateur
ayant même précédence qu’un token de nom NEG , on
écrira :
mexp : 0 −0 %prec NEG ...
afin de ne pas associer au ”moins unaire” la même
précédence que le ”moins binaire”.

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Déclarations et définitions

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Déclarations et définitions

Chaque non-terminal doit apparaı̂tre au moins une fois


comme partie gauche d’une règles.

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Déclarations et définitions

Chaque non-terminal doit apparaı̂tre au moins une fois


comme partie gauche d’une règles.
L’axiome de la grammaire spécifiée peut être désigné
explicitement dans la partie des déclaration en utilisant la
directive %start. Par exemple :

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Déclarations et définitions

Chaque non-terminal doit apparaı̂tre au moins une fois


comme partie gauche d’une règles.
L’axiome de la grammaire spécifiée peut être désigné
explicitement dans la partie des déclaration en utilisant la
directive %start. Par exemple : %start axiome

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Déclarations et définitions

Chaque non-terminal doit apparaı̂tre au moins une fois


comme partie gauche d’une règles.
L’axiome de la grammaire spécifiée peut être désigné
explicitement dans la partie des déclaration en utilisant la
directive %start. Par exemple : %start axiome
A défaut, l’axiome de la grammaire sera le premier
non-terminal apparaissant dans la partie gauche de la
première règle.

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Déclarations et définitions

Chaque non-terminal doit apparaı̂tre au moins une fois


comme partie gauche d’une règles.
L’axiome de la grammaire spécifiée peut être désigné
explicitement dans la partie des déclaration en utilisant la
directive %start. Par exemple : %start axiome
A défaut, l’axiome de la grammaire sera le premier
non-terminal apparaissant dans la partie gauche de la
première règle.
Si la grammaire est ambiguë ou requière plus d’un
symbole de prévision, Bison sera confornter à des conflits
”shift/reduce” ou ”reduce/shift”.

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Association d’une valeur aux symboles

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Association d’une valeur aux symboles

On peut associer à chaque symbole (terminal ou


non-terminal) une valeur ”sémantique” (indépendante
de la correction syntaxique).

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Association d’une valeur aux symboles

On peut associer à chaque symbole (terminal ou


non-terminal) une valeur ”sémantique” (indépendante
de la correction syntaxique).
L’analyse s’effectue après l’analyse lexicale qui permet de
reconnaı̂tre les tokens via des valeurs numériques.

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Association d’une valeur aux symboles

On peut associer à chaque symbole (terminal ou


non-terminal) une valeur ”sémantique” (indépendante
de la correction syntaxique).
L’analyse s’effectue après l’analyse lexicale qui permet de
reconnaı̂tre les tokens via des valeurs numériques.
Si 0 est la valeur numérique retourneé, le token
correspond à la fin du fichier.

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Association d’une valeur aux symboles

On peut associer à chaque symbole (terminal ou


non-terminal) une valeur ”sémantique” (indépendante
de la correction syntaxique).
L’analyse s’effectue après l’analyse lexicale qui permet de
reconnaı̂tre les tokens via des valeurs numériques.
Si 0 est la valeur numérique retourneé, le token
correspond à la fin du fichier.
Bison fait appel à la fonction yylex() de Flex à chaque
fois qu’un token est nécessaire à la suite de l’analyse
syntaxique.

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Association d’une valeur aux symboles

On peut associer à chaque symbole (terminal ou


non-terminal) une valeur ”sémantique” (indépendante
de la correction syntaxique).
L’analyse s’effectue après l’analyse lexicale qui permet de
reconnaı̂tre les tokens via des valeurs numériques.
Si 0 est la valeur numérique retourneé, le token
correspond à la fin du fichier.
Bison fait appel à la fonction yylex() de Flex à chaque
fois qu’un token est nécessaire à la suite de l’analyse
syntaxique.
L’association d’une valeur à un token se fait via la
variable globale de Bison nommée yylval et qui est de
type YYSTYPE.
Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison
Association d’une valeur aux symboles

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Association d’une valeur aux symboles

Par défaut, YYSTYPE correspond au type int.

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Association d’une valeur aux symboles

Par défaut, YYSTYPE correspond au type int.


Il est possible de redéfinir le type YYSTYPE via la
macro ”#define”. La redéfinition s’effectue dans la
section des définitions.

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Association d’une valeur aux symboles

Par défaut, YYSTYPE correspond au type int.


Il est possible de redéfinir le type YYSTYPE via la
macro ”#define”. La redéfinition s’effectue dans la
section des définitions.
Il se peut que les valeurs des tokens aient des types
différents.

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Association d’une valeur aux symboles

Par défaut, YYSTYPE correspond au type int.


Il est possible de redéfinir le type YYSTYPE via la
macro ”#define”. La redéfinition s’effectue dans la
section des définitions.
Il se peut que les valeurs des tokens aient des types
différents.
Pour traiter ce cas, on peut définir une union des types
via la clause %union. Par exemple, si l’on veut associer
aux tokens des valeurs de type ”entier” et ”chaı̂ne de
caractères”, on écrira :

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Association d’une valeur aux symboles

Par défaut, YYSTYPE correspond au type int.


Il est possible de redéfinir le type YYSTYPE via la
macro ”#define”. La redéfinition s’effectue dans la
section des définitions.
Il se peut que les valeurs des tokens aient des types
différents.
Pour traiter ce cas, on peut définir une union des types
via la clause %union. Par exemple, si l’on veut associer
aux tokens des valeurs de type ”entier” et ”chaı̂ne de
caractères”, on écrira :
%union {

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Association d’une valeur aux symboles

Par défaut, YYSTYPE correspond au type int.


Il est possible de redéfinir le type YYSTYPE via la
macro ”#define”. La redéfinition s’effectue dans la
section des définitions.
Il se peut que les valeurs des tokens aient des types
différents.
Pour traiter ce cas, on peut définir une union des types
via la clause %union. Par exemple, si l’on veut associer
aux tokens des valeurs de type ”entier” et ”chaı̂ne de
caractères”, on écrira :
%union {
int ival;

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Association d’une valeur aux symboles

Par défaut, YYSTYPE correspond au type int.


Il est possible de redéfinir le type YYSTYPE via la
macro ”#define”. La redéfinition s’effectue dans la
section des définitions.
Il se peut que les valeurs des tokens aient des types
différents.
Pour traiter ce cas, on peut définir une union des types
via la clause %union. Par exemple, si l’on veut associer
aux tokens des valeurs de type ”entier” et ”chaı̂ne de
caractères”, on écrira :
%union {
int ival;
char ∗ str val }
Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison
Association d’une valeur aux symboles

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Association d’une valeur aux symboles

On peut aussi, de manière équivalente, redéfinir dans la


partie des déclarations, le type YYSTYPE comme suit :

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Association d’une valeur aux symboles

On peut aussi, de manière équivalente, redéfinir dans la


partie des déclarations, le type YYSTYPE comme suit :
%union {

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Association d’une valeur aux symboles

On peut aussi, de manière équivalente, redéfinir dans la


partie des déclarations, le type YYSTYPE comme suit :
%union {
int ival;

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Association d’une valeur aux symboles

On peut aussi, de manière équivalente, redéfinir dans la


partie des déclarations, le type YYSTYPE comme suit :
%union {
int ival;
char ∗ str val;

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Association d’une valeur aux symboles

On peut aussi, de manière équivalente, redéfinir dans la


partie des déclarations, le type YYSTYPE comme suit :
%union {
int ival;
char ∗ str val;
} YYSTYPE;

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Association d’une valeur aux symboles

On peut aussi, de manière équivalente, redéfinir dans la


partie des déclarations, le type YYSTYPE comme suit :
%union {
int ival;
char ∗ str val;
} YYSTYPE;
Une fois le type YYSYTPE spécifié, il faut indiquer quel
membre de l’union utiliser pour les divers tokens et
non-terminaux.

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Association d’une valeur aux symboles

On peut aussi, de manière équivalente, redéfinir dans la


partie des déclarations, le type YYSTYPE comme suit :
%union {
int ival;
char ∗ str val;
} YYSTYPE;
Une fois le type YYSYTPE spécifié, il faut indiquer quel
membre de l’union utiliser pour les divers tokens et
non-terminaux. Pour cale, on utilise la clause
< nom du type > dans la partie ”déclaration”.

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Association d’une valeur aux symboles

On peut aussi, de manière équivalente, redéfinir dans la


partie des déclarations, le type YYSTYPE comme suit :
%union {
int ival;
char ∗ str val;
} YYSTYPE;
Une fois le type YYSYTPE spécifié, il faut indiquer quel
membre de l’union utiliser pour les divers tokens et
non-terminaux. Pour cale, on utilise la clause
< nom du type > dans la partie ”déclaration”.
Par exemple, on écrira :

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Association d’une valeur aux symboles

On peut aussi, de manière équivalente, redéfinir dans la


partie des déclarations, le type YYSTYPE comme suit :
%union {
int ival;
char ∗ str val;
} YYSTYPE;
Une fois le type YYSYTPE spécifié, il faut indiquer quel
membre de l’union utiliser pour les divers tokens et
non-terminaux. Pour cale, on utilise la clause
< nom du type > dans la partie ”déclaration”.
Par exemple, on écrira :
%token < ival > NUMBER

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Association d’une valeur aux symboles

On peut aussi, de manière équivalente, redéfinir dans la


partie des déclarations, le type YYSTYPE comme suit :
%union {
int ival;
char ∗ str val;
} YYSTYPE;
Une fois le type YYSYTPE spécifié, il faut indiquer quel
membre de l’union utiliser pour les divers tokens et
non-terminaux. Pour cale, on utilise la clause
< nom du type > dans la partie ”déclaration”.
Par exemple, on écrira :
%token < ival > NUMBER
%token < str val > IDENT
Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison
Association d’une valeur aux symboles

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Association d’une valeur aux symboles

Pour les non-terminaux, on écrira :

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Association d’une valeur aux symboles

Pour les non-terminaux, on écrira :


%type < ival > exp

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Interaction avec l’analyseur lexical

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Interaction avec l’analyseur lexical

Puisque l’analyse syntaxique utilise le résultat de l’analyse


lexicale, il faut que le fichier Flex utilisé dispose de
certaines informations, notamment les noms de tokens
ainsi que les types des valeurs qui seront associées aux
tokens.

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Interaction avec l’analyseur lexical

Puisque l’analyse syntaxique utilise le résultat de l’analyse


lexicale, il faut que le fichier Flex utilisé dispose de
certaines informations, notamment les noms de tokens
ainsi que les types des valeurs qui seront associées aux
tokens.
Dans la partie ”déclarations” du fichier Flex, on écrira la
ligne :

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Interaction avec l’analyseur lexical

Puisque l’analyse syntaxique utilise le résultat de l’analyse


lexicale, il faut que le fichier Flex utilisé dispose de
certaines informations, notamment les noms de tokens
ainsi que les types des valeurs qui seront associées aux
tokens.
Dans la partie ”déclarations” du fichier Flex, on écrira la
ligne :
#include ”parser .tab.h”

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Interaction avec l’analyseur lexical

Puisque l’analyse syntaxique utilise le résultat de l’analyse


lexicale, il faut que le fichier Flex utilisé dispose de
certaines informations, notamment les noms de tokens
ainsi que les types des valeurs qui seront associées aux
tokens.
Dans la partie ”déclarations” du fichier Flex, on écrira la
ligne :
#include ”parser .tab.h”
où ”parser ” désigne le nom du fichier Bison.

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Interaction avec l’analyseur lexical

Puisque l’analyse syntaxique utilise le résultat de l’analyse


lexicale, il faut que le fichier Flex utilisé dispose de
certaines informations, notamment les noms de tokens
ainsi que les types des valeurs qui seront associées aux
tokens.
Dans la partie ”déclarations” du fichier Flex, on écrira la
ligne :
#include ”parser .tab.h”
où ”parser ” désigne le nom du fichier Bison.
Enfin, les règles d’analsye lexicale doivent être écrites de
manière à ce Bison dispose de l’information relative au
token reconnu et à sa valeur.
Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison
Interaction avec l’analyseur lexical

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Interaction avec l’analyseur lexical

Ainsi, on écrira par exemple :

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Interaction avec l’analyseur lexical

Ainsi, on écrira par exemple :


[0 − 9]+ {yylval.ival = atoi(yytext);
return NUMBER; }

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Interaction avec l’analyseur lexical

Ainsi, on écrira par exemple :


[0 − 9]+ {yylval.ival = atoi(yytext);
return NUMBER; }
[a − zA − Z ]+ {yylval.str val = strdup(yytext);
return IDENT ; }

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Actions

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Actions

A chaque règle peut être associée une action qui


correspond à un bloc d’instructions C et qui sera exécuté
lorsque l’analyseur syntaxique aura reconnu la structure
spécifiée par la règle.

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Actions

A chaque règle peut être associée une action qui


correspond à un bloc d’instructions C et qui sera exécuté
lorsque l’analyseur syntaxique aura reconnu la structure
spécifiée par la règle.
Ces actions peuvent retourner une valeur et utiliser les
valeurs retournées par les actions de l’analyseur lexical.

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Actions

A chaque règle peut être associée une action qui


correspond à un bloc d’instructions C et qui sera exécuté
lorsque l’analyseur syntaxique aura reconnu la structure
spécifiée par la règle.
Ces actions peuvent retourner une valeur et utiliser les
valeurs retournées par les actions de l’analyseur lexical.
Pour retourner une valeur, on utilise le symbole ”$$”.

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Actions

A chaque règle peut être associée une action qui


correspond à un bloc d’instructions C et qui sera exécuté
lorsque l’analyseur syntaxique aura reconnu la structure
spécifiée par la règle.
Ces actions peuvent retourner une valeur et utiliser les
valeurs retournées par les actions de l’analyseur lexical.
Pour retourner une valeur, on utilise le symbole ”$$”.
Par exemple, si on veut retourner la valeur 1, on écrira :

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Actions

A chaque règle peut être associée une action qui


correspond à un bloc d’instructions C et qui sera exécuté
lorsque l’analyseur syntaxique aura reconnu la structure
spécifiée par la règle.
Ces actions peuvent retourner une valeur et utiliser les
valeurs retournées par les actions de l’analyseur lexical.
Pour retourner une valeur, on utilise le symbole ”$$”.
Par exemple, si on veut retourner la valeur 1, on écrira :
{$$ = 1; }

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Actions

A chaque règle peut être associée une action qui


correspond à un bloc d’instructions C et qui sera exécuté
lorsque l’analyseur syntaxique aura reconnu la structure
spécifiée par la règle.
Ces actions peuvent retourner une valeur et utiliser les
valeurs retournées par les actions de l’analyseur lexical.
Pour retourner une valeur, on utilise le symbole ”$$”.
Par exemple, si on veut retourner la valeur 1, on écrira :
{$$ = 1; }
Pour utiliser les valeur retournées par les actions de
l’analyseur lexical, une action peut invoquer les
pseudo-variables $1, $2, ...etc.
Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison
Actions

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Actions

Ces variables correspondent aux valeurs retournées par les


actions correpondant aux éléments de la partie droite de
la règle.

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Actions

Ces variables correspondent aux valeurs retournées par les


actions correpondant aux éléments de la partie droite de
la règle.
Par exemple, étant donné la règle :

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Actions

Ces variables correspondent aux valeurs retournées par les


actions correpondant aux éléments de la partie droite de
la règle.
Par exemple, étant donné la règle :
A : B C D {f ($1, $2, $3); }

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Actions

Ces variables correspondent aux valeurs retournées par les


actions correpondant aux éléments de la partie droite de
la règle.
Par exemple, étant donné la règle :
A : B C D {f ($1, $2, $3); }
les valeurs $1, $2 et $3 correspondent aux valeurs
retournées par les actions spécifiées dans les règles
utilisées reconnaissant A, B et C .

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Actions

Ces variables correspondent aux valeurs retournées par les


actions correpondant aux éléments de la partie droite de
la règle.
Par exemple, étant donné la règle :
A : B C D {f ($1, $2, $3); }
les valeurs $1, $2 et $3 correspondent aux valeurs
retournées par les actions spécifiées dans les règles
utilisées reconnaissant A, B et C .
Voici un exemple plus concret :

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Actions

Ces variables correspondent aux valeurs retournées par les


actions correpondant aux éléments de la partie droite de
la règle.
Par exemple, étant donné la règle :
A : B C D {f ($1, $2, $3); }
les valeurs $1, $2 et $3 correspondent aux valeurs
retournées par les actions spécifiées dans les règles
utilisées reconnaissant A, B et C .
Voici un exemple plus concret :
exp : 0 (0 exp 0 )0 { $$ = $2; }

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Actions

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Actions

Par défaut, si aucune valeur n’est indiquée comme valeur


de retour de l’action, c’est $1 qui est retournée.

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Actions

Par défaut, si aucune valeur n’est indiquée comme valeur


de retour de l’action, c’est $1 qui est retournée.
Bison permet d’exécuter des actions avant la fin de
l’application d’une règle.

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Actions

Par défaut, si aucune valeur n’est indiquée comme valeur


de retour de l’action, c’est $1 qui est retournée.
Bison permet d’exécuter des actions avant la fin de
l’application d’une règle.
Il est donc possible d’indiquer une action entre deux
éléments de la partie droite d’une règle.

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Actions

Par défaut, si aucune valeur n’est indiquée comme valeur


de retour de l’action, c’est $1 qui est retournée.
Bison permet d’exécuter des actions avant la fin de
l’application d’une règle.
Il est donc possible d’indiquer une action entre deux
éléments de la partie droite d’une règle.
Par exemple, la règle :

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Actions

Par défaut, si aucune valeur n’est indiquée comme valeur


de retour de l’action, c’est $1 qui est retournée.
Bison permet d’exécuter des actions avant la fin de
l’application d’une règle.
Il est donc possible d’indiquer une action entre deux
éléments de la partie droite d’une règle.
Par exemple, la règle :
A : B { $$ = 1; }

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Actions

Par défaut, si aucune valeur n’est indiquée comme valeur


de retour de l’action, c’est $1 qui est retournée.
Bison permet d’exécuter des actions avant la fin de
l’application d’une règle.
Il est donc possible d’indiquer une action entre deux
éléments de la partie droite d’une règle.
Par exemple, la règle :
A : B { $$ = 1; }
C { x = $2; y = $3; };

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Actions

Par défaut, si aucune valeur n’est indiquée comme valeur


de retour de l’action, c’est $1 qui est retournée.
Bison permet d’exécuter des actions avant la fin de
l’application d’une règle.
Il est donc possible d’indiquer une action entre deux
éléments de la partie droite d’une règle.
Par exemple, la règle :
A : B { $$ = 1; }
C { x = $2; y = $3; };
aura pour effet d’affecter la valeur 1 à la variable x et la
valeur retournée par la règle utilisée pour reconnaı̂tre C à
la variable y .
Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison
Actions

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Actions

On peut spécifier le ”type d’une valeur” dans une règle.

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Actions

On peut spécifier le ”type d’une valeur” dans une règle.


Ce qui peut être utile par exemple lorsqu’un token
”mono-lettre” n’a pas été déclaré.

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Actions

On peut spécifier le ”type d’une valeur” dans une règle.


Ce qui peut être utile par exemple lorsqu’un token
”mono-lettre” n’a pas été déclaré.
Par exemple, on peut écrire :

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Actions

On peut spécifier le ”type d’une valeur” dans une règle.


Ce qui peut être utile par exemple lorsqu’un token
”mono-lettre” n’a pas été déclaré.
Par exemple, on peut écrire :
A : B C { f ($ < ival > 1); $ < str val > $ =
”merci”; };

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Actions

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Actions

Il est possible d’appeler implicitement la fonction qui


effectue l’analyse syntaxique en invoquant son nom
”yyparse”().

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Actions

Il est possible d’appeler implicitement la fonction qui


effectue l’analyse syntaxique en invoquant son nom
”yyparse”().
Lors de l’exécution de la fonction ”yyparse”(), si une
erreur de syntaxe est détectée, la fonction ”yyerror”()
est appelée afin qu’un message d’erreur s’affiche.

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Actions

Il est possible d’appeler implicitement la fonction qui


effectue l’analyse syntaxique en invoquant son nom
”yyparse”().
Lors de l’exécution de la fonction ”yyparse”(), si une
erreur de syntaxe est détectée, la fonction ”yyerror”()
est appelée afin qu’un message d’erreur s’affiche.
Par défaut, en cas d’une erreur de syntaxe, la fonction
”yyparse”() déclenche l’arrêt immédiat de l’analyse
syantique après l’exécution de la fonction ”yyperror”().

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Actions

Il est possible d’appeler implicitement la fonction qui


effectue l’analyse syntaxique en invoquant son nom
”yyparse”().
Lors de l’exécution de la fonction ”yyparse”(), si une
erreur de syntaxe est détectée, la fonction ”yyerror”()
est appelée afin qu’un message d’erreur s’affiche.
Par défaut, en cas d’une erreur de syntaxe, la fonction
”yyparse”() déclenche l’arrêt immédiat de l’analyse
syantique après l’exécution de la fonction ”yyperror”().
Celle-ci, affiche par défaut le message : ”syntax error”.

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Actions

Il est possible d’appeler implicitement la fonction qui


effectue l’analyse syntaxique en invoquant son nom
”yyparse”().
Lors de l’exécution de la fonction ”yyparse”(), si une
erreur de syntaxe est détectée, la fonction ”yyerror”()
est appelée afin qu’un message d’erreur s’affiche.
Par défaut, en cas d’une erreur de syntaxe, la fonction
”yyparse”() déclenche l’arrêt immédiat de l’analyse
syantique après l’exécution de la fonction ”yyperror”().
Celle-ci, affiche par défaut le message : ”syntax error”.
En cas d’erreur de syntaxe, la fonction ”yyparse”()
retourne une valeur non nulle.
Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison
Exercices corrigés

Énoncé 1.1

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Exercices corrigés

Énoncé 1.1
Écrire un interpréteur d’expressions arithmétiques sur les
”entiers” et n’utilisant que les opérateurs + ( additions)
et ∗ (multiplications).

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Exercices corrigés

Énoncé 1.1
Écrire un interpréteur d’expressions arithmétiques sur les
”entiers” et n’utilisant que les opérateurs + ( additions)
et ∗ (multiplications).
Modifier cet interpréteur pour qu’il puisse traiter les
”doubles”.

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Exercices corrigés

Code Flex

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Exercices corrigés

Code Bison

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Exercices corrigés

Code Flex

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison


Exercices corrigés

Code Bison

Prof. Abdelmajid Dargham Chapitre 8 : L’outil d’analyse syntaxique Bison

Vous aimerez peut-être aussi