Chapitre 8 : L'outil d'analyse syntaxique Bison · 2019-10-16 · peut ˆetre ´ecrit `a la main ou...

142
Chapitre 8 : L’outil d’analyse syntaxique Bison Prof. Abdelmajid Dargham Facult´ e des Sciences, Oujda Fili` ere SMI - S4 Module Th´ eorie des langages & Compilation Universit´ e Mohamed Premier Septembre, 2012

Transcript of Chapitre 8 : L'outil d'analyse syntaxique Bison · 2019-10-16 · peut ˆetre ´ecrit `a la main ou...

Chapitre 8 :

L’outil d’analyse syntaxique Bison

Prof. Abdelmajid DarghamFaculte des Sciences, Oujda

Filiere SMI - S4

Module Theorie des langages & Compilation

Universite Mohamed Premier

Septembre, 2012

Sommaire du chapitre 8

Introduction

Format d’un Fichier Bison

Regles

Declarations et definitions

Association d’une valeur aux symboles

Interaction avec l’analyseur lexical

Actions

Exercices corriges

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

Sommaire du chapitre 8

Introduction

Format d’un Fichier Bison

Regles

Declarations et definitions

Association d’une valeur aux symboles

Interaction avec l’analyseur lexical

Actions

Exercices corriges

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

Sommaire du chapitre 8

Introduction

Format d’un Fichier Bison

Regles

Declarations et definitions

Association d’une valeur aux symboles

Interaction avec l’analyseur lexical

Actions

Exercices corriges

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

Sommaire du chapitre 8

Introduction

Format d’un Fichier Bison

Regles

Declarations et definitions

Association d’une valeur aux symboles

Interaction avec l’analyseur lexical

Actions

Exercices corriges

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

Sommaire du chapitre 8

Introduction

Format d’un Fichier Bison

Regles

Declarations et definitions

Association d’une valeur aux symboles

Interaction avec l’analyseur lexical

Actions

Exercices corriges

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

Sommaire du chapitre 8

Introduction

Format d’un Fichier Bison

Regles

Declarations et definitions

Association d’une valeur aux symboles

Interaction avec l’analyseur lexical

Actions

Exercices corriges

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

Sommaire du chapitre 8

Introduction

Format d’un Fichier Bison

Regles

Declarations et definitions

Association d’une valeur aux symboles

Interaction avec l’analyseur lexical

Actions

Exercices corriges

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

Sommaire du chapitre 8

Introduction

Format d’un Fichier Bison

Regles

Declarations et definitions

Association d’une valeur aux symboles

Interaction avec l’analyseur lexical

Actions

Exercices corriges

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

Sommaire du chapitre 8

Introduction

Format d’un Fichier Bison

Regles

Declarations et definitions

Association d’une valeur aux symboles

Interaction avec l’analyseur lexical

Actions

Exercices corriges

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

Introdutcion

Une fois l’analyse lexicale effectuee, l’analysesyntaxique (parsing) permet de verifier qu’un texte estconforme a une grammaire G donnee.

L’analyse syntaxique construit l’arbre syntaxiquecorrespondant au texte analyse.

Bison est un outil qui genere d’une maniereautomatique, un analyseur syntaxique basee sur unegrammaire donnee.

Un programme Bison est enregistre avec l’extension ”.y”.

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

Introdutcion

Une fois l’analyse lexicale effectuee, l’analysesyntaxique (parsing) permet de verifier qu’un texte estconforme a une grammaire G donnee.

L’analyse syntaxique construit l’arbre syntaxiquecorrespondant au texte analyse.

Bison est un outil qui genere d’une maniereautomatique, un analyseur syntaxique basee sur unegrammaire donnee.

Un programme Bison est enregistre avec l’extension ”.y”.

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

Introdutcion

Une fois l’analyse lexicale effectuee, l’analysesyntaxique (parsing) permet de verifier qu’un texte estconforme a une grammaire G donnee.

L’analyse syntaxique construit l’arbre syntaxiquecorrespondant au texte analyse.

Bison est un outil qui genere d’une maniereautomatique, un analyseur syntaxique basee sur unegrammaire donnee.

Un programme Bison est enregistre avec l’extension ”.y”.

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

Introdutcion

Une fois l’analyse lexicale effectuee, l’analysesyntaxique (parsing) permet de verifier qu’un texte estconforme a une grammaire G donnee.

L’analyse syntaxique construit l’arbre syntaxiquecorrespondant au texte analyse.

Bison est un outil qui genere d’une maniereautomatique, un analyseur syntaxique basee sur unegrammaire donnee.

Un programme Bison est enregistre avec l’extension ”.y”.

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

Introdutcion

Une fois l’analyse lexicale effectuee, l’analysesyntaxique (parsing) permet de verifier qu’un texte estconforme a une grammaire G donnee.

L’analyse syntaxique construit l’arbre syntaxiquecorrespondant au texte analyse.

Bison est un outil qui genere d’une maniereautomatique, un analyseur syntaxique basee sur unegrammaire donnee.

Un programme Bison est enregistre avec l’extension ”.y”.

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

Introdutcion

Etapes pour la conception d’un analyseur syntaxiqueavec Bison

Definir la grammaire de l’analyseur, puis l’ecrire enrespectant le format de Bison.

Pour chaque regle de production de la grammaire, ecrirel’action (les instructions C) qui va etre executeelorsqu’une instance de cette regle est reconnue parl’analyseur.

Ecrire un analyseur lexical qui va traiter le fichier sourceet produira les lexemes a l’analyseur syntaxique. celui-cipeut etre ecrit a la main ou bien avec Flex .

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

Introdutcion

Etapes pour la conception d’un analyseur syntaxiqueavec Bison

Definir la grammaire de l’analyseur, puis l’ecrire enrespectant le format de Bison.

Pour chaque regle de production de la grammaire, ecrirel’action (les instructions C) qui va etre executeelorsqu’une instance de cette regle est reconnue parl’analyseur.

Ecrire un analyseur lexical qui va traiter le fichier sourceet produira les lexemes a l’analyseur syntaxique. celui-cipeut etre ecrit a la main ou bien avec Flex .

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

Introdutcion

Etapes pour la conception d’un analyseur syntaxiqueavec Bison

Definir la grammaire de l’analyseur, puis l’ecrire enrespectant le format de Bison.

Pour chaque regle de production de la grammaire, ecrirel’action (les instructions C) qui va etre executeelorsqu’une instance de cette regle est reconnue parl’analyseur.

Ecrire un analyseur lexical qui va traiter le fichier sourceet produira les lexemes a l’analyseur syntaxique. celui-cipeut etre ecrit a la main ou bien avec Flex .

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

Introdutcion

Etapes pour la conception d’un analyseur syntaxiqueavec Bison

Definir la grammaire de l’analyseur, puis l’ecrire enrespectant le format de Bison.

Pour chaque regle de production de la grammaire, ecrirel’action (les instructions C) qui va etre executeelorsqu’une instance de cette regle est reconnue parl’analyseur.

Ecrire un analyseur lexical qui va traiter le fichier sourceet produira les lexemes a l’analyseur syntaxique. celui-cipeut etre ecrit a la main ou bien avec 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 :gcc -o parser parser.tab.c lex.yy.c -ly -lfl

Pour lancer l’analyseur ainsi cree :parser < source.txt > cible.txt

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 cree :parser < source.txt > cible.txt

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 cree :parser < source.txt > cible.txt

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 cree :parser < source.txt > cible.txt

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 cree :parser < source.txt > cible.txt

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 cree :parser < source.txt > cible.txt

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 cree :

parser < source.txt > cible.txt

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 cree :parser < source.txt > cible.txt

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

Format d’un fichier Bison

Declarations%%Regles%%Code supplementaire

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

Format d’un fichier Bison

Declarations

%%Regles%%Code supplementaire

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

Format d’un fichier Bison

Declarations%%

Regles%%Code supplementaire

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

Format d’un fichier Bison

Declarations%%Regles

%%Code supplementaire

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

Format d’un fichier Bison

Declarations%%Regles%%

Code supplementaire

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

Format d’un fichier Bison

Declarations%%Regles%%Code supplementaire

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

Regles

Une regle est une regle de production de la grammaire,enrichie d’actions.

Une regle s’ecrit :A : Corps;

ou A est le nom (un identificateur) d’un non-terminal etCorps est une suite (eventuellement vide) de noms (determinaux et non-terminaux) et de litteraux (caracteresentre guillemets).

Lorqu’il existe plusieurs regles de production pour unmeme non-terminal, l’operateur ”|” peut etre utilise pourseparer le corps de chaque regle.

On peut par exemple ecrire :exp : number | exp ′ +′ exp

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

Regles

Une regle est une regle de production de la grammaire,enrichie d’actions.

Une regle s’ecrit :A : Corps;

ou A est le nom (un identificateur) d’un non-terminal etCorps est une suite (eventuellement vide) de noms (determinaux et non-terminaux) et de litteraux (caracteresentre guillemets).

Lorqu’il existe plusieurs regles de production pour unmeme non-terminal, l’operateur ”|” peut etre utilise pourseparer le corps de chaque regle.

On peut par exemple ecrire :exp : number | exp ′ +′ exp

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

Regles

Une regle est une regle de production de la grammaire,enrichie d’actions.

Une regle s’ecrit :

A : Corps;

ou A est le nom (un identificateur) d’un non-terminal etCorps est une suite (eventuellement vide) de noms (determinaux et non-terminaux) et de litteraux (caracteresentre guillemets).

Lorqu’il existe plusieurs regles de production pour unmeme non-terminal, l’operateur ”|” peut etre utilise pourseparer le corps de chaque regle.

On peut par exemple ecrire :exp : number | exp ′ +′ exp

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

Regles

Une regle est une regle de production de la grammaire,enrichie d’actions.

Une regle s’ecrit :A : Corps;

ou A est le nom (un identificateur) d’un non-terminal etCorps est une suite (eventuellement vide) de noms (determinaux et non-terminaux) et de litteraux (caracteresentre guillemets).

Lorqu’il existe plusieurs regles de production pour unmeme non-terminal, l’operateur ”|” peut etre utilise pourseparer le corps de chaque regle.

On peut par exemple ecrire :exp : number | exp ′ +′ exp

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

Regles

Une regle est une regle de production de la grammaire,enrichie d’actions.

Une regle s’ecrit :A : Corps;

ou A est le nom (un identificateur) d’un non-terminal etCorps est une suite (eventuellement vide) de noms (determinaux et non-terminaux) et de litteraux (caracteresentre guillemets).

Lorqu’il existe plusieurs regles de production pour unmeme non-terminal, l’operateur ”|” peut etre utilise pourseparer le corps de chaque regle.

On peut par exemple ecrire :exp : number | exp ′ +′ exp

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

Regles

Une regle est une regle de production de la grammaire,enrichie d’actions.

Une regle s’ecrit :A : Corps;

ou A est le nom (un identificateur) d’un non-terminal etCorps est une suite (eventuellement vide) de noms (determinaux et non-terminaux) et de litteraux (caracteresentre guillemets).

Lorqu’il existe plusieurs regles de production pour unmeme non-terminal, l’operateur ”|” peut etre utilise pourseparer le corps de chaque regle.

On peut par exemple ecrire :exp : number | exp ′ +′ exp

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

Regles

Une regle est une regle de production de la grammaire,enrichie d’actions.

Une regle s’ecrit :A : Corps;

ou A est le nom (un identificateur) d’un non-terminal etCorps est une suite (eventuellement vide) de noms (determinaux et non-terminaux) et de litteraux (caracteresentre guillemets).

Lorqu’il existe plusieurs regles de production pour unmeme non-terminal, l’operateur ”|” peut etre utilise pourseparer le corps de chaque regle.

On peut par exemple ecrire :

exp : number | exp ′ +′ exp

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

Regles

Une regle est une regle de production de la grammaire,enrichie d’actions.

Une regle s’ecrit :A : Corps;

ou A est le nom (un identificateur) d’un non-terminal etCorps est une suite (eventuellement vide) de noms (determinaux et non-terminaux) et de litteraux (caracteresentre guillemets).

Lorqu’il existe plusieurs regles de production pour unmeme non-terminal, l’operateur ”|” peut etre utilise pourseparer le corps de chaque regle.

On peut par exemple ecrire :exp : number | exp ′ +′ exp

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

Declarations et definitions

La partie declarations et definitions contient lesdeclarations C (entre les symboles %{ et %}), ainsi quela declaration des noms de tokens (lexemes).

La declaration d’un token s’effectue via la directive%token :%token name1 name2 ...;

Les noms qui n’ont pas ete declares en tant que ”nom detoken” sont consideres comme des non-terminaux.

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

Declarations et definitions

La partie declarations et definitions contient lesdeclarations C (entre les symboles %{ et %}), ainsi quela declaration des noms de tokens (lexemes).

La declaration d’un token s’effectue via la directive%token :%token name1 name2 ...;

Les noms qui n’ont pas ete declares en tant que ”nom detoken” sont consideres comme des non-terminaux.

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

Declarations et definitions

La partie declarations et definitions contient lesdeclarations C (entre les symboles %{ et %}), ainsi quela declaration des noms de tokens (lexemes).

La declaration d’un token s’effectue via la directive%token :

%token name1 name2 ...;

Les noms qui n’ont pas ete declares en tant que ”nom detoken” sont consideres comme des non-terminaux.

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

Declarations et definitions

La partie declarations et definitions contient lesdeclarations C (entre les symboles %{ et %}), ainsi quela declaration des noms de tokens (lexemes).

La declaration d’un token s’effectue via la directive%token :%token name1 name2 ...;

Les noms qui n’ont pas ete declares en tant que ”nom detoken” sont consideres comme des non-terminaux.

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

Declarations et definitions

La partie declarations et definitions contient lesdeclarations C (entre les symboles %{ et %}), ainsi quela declaration des noms de tokens (lexemes).

La declaration d’un token s’effectue via la directive%token :%token name1 name2 ...;

Les noms qui n’ont pas ete declares en tant que ”nom detoken” sont consideres comme des non-terminaux.

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

Declarations et definitions

Cas des operateurs

Lorque les tokens correspondent a des operateurs pourlesuqles on souhaite specifier une propriete d’associativite,ou utilise left et right a la place de token.

Par exemple, on ecrira :%left ′ +′ ′−′

%right ′′

Si l’on souhaite de plus specifier la precedence entreoperateurs, on ecrit la declaration des tokens dans l’ordreinverse des priorites.

Dans l’exemple ci-dessus, l’operateur ′ ′ a une prioriteplus grande que les operateurs ′+′ et ′−′ (qui sont dememe priorite).

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

Declarations et definitions

Cas des operateurs

Lorque les tokens correspondent a des operateurs pourlesuqles on souhaite specifier une propriete d’associativite,ou utilise left et right a la place de token.

Par exemple, on ecrira :%left ′ +′ ′−′

%right ′′

Si l’on souhaite de plus specifier la precedence entreoperateurs, on ecrit la declaration des tokens dans l’ordreinverse des priorites.

Dans l’exemple ci-dessus, l’operateur ′ ′ a une prioriteplus grande que les operateurs ′+′ et ′−′ (qui sont dememe priorite).

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

Declarations et definitions

Cas des operateurs

Lorque les tokens correspondent a des operateurs pourlesuqles on souhaite specifier une propriete d’associativite,ou utilise left et right a la place de token.

Par exemple, on ecrira :

%left ′ +′ ′−′

%right ′′

Si l’on souhaite de plus specifier la precedence entreoperateurs, on ecrit la declaration des tokens dans l’ordreinverse des priorites.

Dans l’exemple ci-dessus, l’operateur ′ ′ a une prioriteplus grande que les operateurs ′+′ et ′−′ (qui sont dememe priorite).

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

Declarations et definitions

Cas des operateurs

Lorque les tokens correspondent a des operateurs pourlesuqles on souhaite specifier une propriete d’associativite,ou utilise left et right a la place de token.

Par exemple, on ecrira :%left ′ +′ ′−′

%right ′′

Si l’on souhaite de plus specifier la precedence entreoperateurs, on ecrit la declaration des tokens dans l’ordreinverse des priorites.

Dans l’exemple ci-dessus, l’operateur ′ ′ a une prioriteplus grande que les operateurs ′+′ et ′−′ (qui sont dememe priorite).

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

Declarations et definitions

Cas des operateurs

Lorque les tokens correspondent a des operateurs pourlesuqles on souhaite specifier une propriete d’associativite,ou utilise left et right a la place de token.

Par exemple, on ecrira :%left ′ +′ ′−′

%right ′′

Si l’on souhaite de plus specifier la precedence entreoperateurs, on ecrit la declaration des tokens dans l’ordreinverse des priorites.

Dans l’exemple ci-dessus, l’operateur ′ ′ a une prioriteplus grande que les operateurs ′+′ et ′−′ (qui sont dememe priorite).

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

Declarations et definitions

Cas des operateurs

Lorque les tokens correspondent a des operateurs pourlesuqles on souhaite specifier une propriete d’associativite,ou utilise left et right a la place de token.

Par exemple, on ecrira :%left ′ +′ ′−′

%right ′′

Si l’on souhaite de plus specifier la precedence entreoperateurs, on ecrit la declaration des tokens dans l’ordreinverse des priorites.

Dans l’exemple ci-dessus, l’operateur ′ ′ a une prioriteplus grande que les operateurs ′+′ et ′−′ (qui sont dememe priorite).

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

Declarations et definitions

Cas des operateurs

Lorque les tokens correspondent a des operateurs pourlesuqles on souhaite specifier une propriete d’associativite,ou utilise left et right a la place de token.

Par exemple, on ecrira :%left ′ +′ ′−′

%right ′′

Si l’on souhaite de plus specifier la precedence entreoperateurs, on ecrit la declaration des tokens dans l’ordreinverse des priorites.

Dans l’exemple ci-dessus, l’operateur ′ ′ a une prioriteplus grande que les operateurs ′+′ et ′−′ (qui sont dememe priorite).

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

Declarations et definitions

Cas des operateurs

Il est egalement possible de modifier la precedence d’unoperateur dans une regle.

Par exemple, si l’on souhaite decrire le ”moins unaire”aussi designe par les symbole ′−′ comme un operateurayant meme precedence qu’un token de nom NEG , onecrira :mexp : ′ −′ %prec NEG ...afin de ne pas associer au ”moins unaire” la memeprecedence que le ”moins binaire”.

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

Declarations et definitions

Cas des operateurs

Il est egalement possible de modifier la precedence d’unoperateur dans une regle.

Par exemple, si l’on souhaite decrire le ”moins unaire”aussi designe par les symbole ′−′ comme un operateurayant meme precedence qu’un token de nom NEG , onecrira :mexp : ′ −′ %prec NEG ...afin de ne pas associer au ”moins unaire” la memeprecedence que le ”moins binaire”.

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

Declarations et definitions

Cas des operateurs

Il est egalement possible de modifier la precedence d’unoperateur dans une regle.

Par exemple, si l’on souhaite decrire le ”moins unaire”aussi designe par les symbole ′−′ comme un operateurayant meme precedence qu’un token de nom NEG , onecrira :

mexp : ′ −′ %prec NEG ...afin de ne pas associer au ”moins unaire” la memeprecedence que le ”moins binaire”.

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

Declarations et definitions

Cas des operateurs

Il est egalement possible de modifier la precedence d’unoperateur dans une regle.

Par exemple, si l’on souhaite decrire le ”moins unaire”aussi designe par les symbole ′−′ comme un operateurayant meme precedence qu’un token de nom NEG , onecrira :mexp : ′ −′ %prec NEG ...

afin de ne pas associer au ”moins unaire” la memeprecedence que le ”moins binaire”.

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

Declarations et definitions

Cas des operateurs

Il est egalement possible de modifier la precedence d’unoperateur dans une regle.

Par exemple, si l’on souhaite decrire le ”moins unaire”aussi designe par les symbole ′−′ comme un operateurayant meme precedence qu’un token de nom NEG , onecrira :mexp : ′ −′ %prec NEG ...afin de ne pas associer au ”moins unaire” la memeprecedence que le ”moins binaire”.

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

Declarations et definitions

Chaque non-terminal doit apparaıtre au moins une foiscomme partie gauche d’une regles.

L’axiome de la grammaire specifiee peut etre designeexplicitement dans la partie des declaration en utilisant ladirective %start. Par exemple : %start axiome

A defaut, l’axiome de la grammaire sera le premiernon-terminal apparaissant dans la partie gauche de lapremiere regle.

Si la grammaire est ambigue ou requiere plus d’unsymbole de prevision, Bison sera confornter a des conflits”shift/reduce” ou ”reduce/shift”.

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

Declarations et definitions

Chaque non-terminal doit apparaıtre au moins une foiscomme partie gauche d’une regles.

L’axiome de la grammaire specifiee peut etre designeexplicitement dans la partie des declaration en utilisant ladirective %start. Par exemple : %start axiome

A defaut, l’axiome de la grammaire sera le premiernon-terminal apparaissant dans la partie gauche de lapremiere regle.

Si la grammaire est ambigue ou requiere plus d’unsymbole de prevision, Bison sera confornter a des conflits”shift/reduce” ou ”reduce/shift”.

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

Declarations et definitions

Chaque non-terminal doit apparaıtre au moins une foiscomme partie gauche d’une regles.

L’axiome de la grammaire specifiee peut etre designeexplicitement dans la partie des declaration en utilisant ladirective %start. Par exemple :

%start axiome

A defaut, l’axiome de la grammaire sera le premiernon-terminal apparaissant dans la partie gauche de lapremiere regle.

Si la grammaire est ambigue ou requiere plus d’unsymbole de prevision, Bison sera confornter a des conflits”shift/reduce” ou ”reduce/shift”.

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

Declarations et definitions

Chaque non-terminal doit apparaıtre au moins une foiscomme partie gauche d’une regles.

L’axiome de la grammaire specifiee peut etre designeexplicitement dans la partie des declaration en utilisant ladirective %start. Par exemple : %start axiome

A defaut, l’axiome de la grammaire sera le premiernon-terminal apparaissant dans la partie gauche de lapremiere regle.

Si la grammaire est ambigue ou requiere plus d’unsymbole de prevision, Bison sera confornter a des conflits”shift/reduce” ou ”reduce/shift”.

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

Declarations et definitions

Chaque non-terminal doit apparaıtre au moins une foiscomme partie gauche d’une regles.

L’axiome de la grammaire specifiee peut etre designeexplicitement dans la partie des declaration en utilisant ladirective %start. Par exemple : %start axiome

A defaut, l’axiome de la grammaire sera le premiernon-terminal apparaissant dans la partie gauche de lapremiere regle.

Si la grammaire est ambigue ou requiere plus d’unsymbole de prevision, Bison sera confornter a des conflits”shift/reduce” ou ”reduce/shift”.

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

Declarations et definitions

Chaque non-terminal doit apparaıtre au moins une foiscomme partie gauche d’une regles.

L’axiome de la grammaire specifiee peut etre designeexplicitement dans la partie des declaration en utilisant ladirective %start. Par exemple : %start axiome

A defaut, l’axiome de la grammaire sera le premiernon-terminal apparaissant dans la partie gauche de lapremiere regle.

Si la grammaire est ambigue ou requiere plus d’unsymbole de prevision, Bison sera confornter a des conflits”shift/reduce” ou ”reduce/shift”.

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

Association d’une valeur aux symboles

On peut associer a chaque symbole (terminal ounon-terminal) une valeur ”semantique” (independantede la correction syntaxique).

L’analyse s’effectue apres l’analyse lexicale qui permet dereconnaıtre les tokens via des valeurs numeriques.

Si 0 est la valeur numerique retournee, le tokencorrespond a la fin du fichier.

Bison fait appel a la fonction yylex() de Flex a chaquefois qu’un token est necessaire a la suite de l’analysesyntaxique.

L’association d’une valeur a un token se fait via lavariable globale de Bison nommee yylval et qui est detype YYSTYPE.

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

Association d’une valeur aux symboles

On peut associer a chaque symbole (terminal ounon-terminal) une valeur ”semantique” (independantede la correction syntaxique).

L’analyse s’effectue apres l’analyse lexicale qui permet dereconnaıtre les tokens via des valeurs numeriques.

Si 0 est la valeur numerique retournee, le tokencorrespond a la fin du fichier.

Bison fait appel a la fonction yylex() de Flex a chaquefois qu’un token est necessaire a la suite de l’analysesyntaxique.

L’association d’une valeur a un token se fait via lavariable globale de Bison nommee yylval et qui est detype YYSTYPE.

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

Association d’une valeur aux symboles

On peut associer a chaque symbole (terminal ounon-terminal) une valeur ”semantique” (independantede la correction syntaxique).

L’analyse s’effectue apres l’analyse lexicale qui permet dereconnaıtre les tokens via des valeurs numeriques.

Si 0 est la valeur numerique retournee, le tokencorrespond a la fin du fichier.

Bison fait appel a la fonction yylex() de Flex a chaquefois qu’un token est necessaire a la suite de l’analysesyntaxique.

L’association d’une valeur a un token se fait via lavariable globale de Bison nommee yylval et qui est detype YYSTYPE.

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

Association d’une valeur aux symboles

On peut associer a chaque symbole (terminal ounon-terminal) une valeur ”semantique” (independantede la correction syntaxique).

L’analyse s’effectue apres l’analyse lexicale qui permet dereconnaıtre les tokens via des valeurs numeriques.

Si 0 est la valeur numerique retournee, le tokencorrespond a la fin du fichier.

Bison fait appel a la fonction yylex() de Flex a chaquefois qu’un token est necessaire a la suite de l’analysesyntaxique.

L’association d’une valeur a un token se fait via lavariable globale de Bison nommee yylval et qui est detype YYSTYPE.

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

Association d’une valeur aux symboles

On peut associer a chaque symbole (terminal ounon-terminal) une valeur ”semantique” (independantede la correction syntaxique).

L’analyse s’effectue apres l’analyse lexicale qui permet dereconnaıtre les tokens via des valeurs numeriques.

Si 0 est la valeur numerique retournee, le tokencorrespond a la fin du fichier.

Bison fait appel a la fonction yylex() de Flex a chaquefois qu’un token est necessaire a la suite de l’analysesyntaxique.

L’association d’une valeur a un token se fait via lavariable globale de Bison nommee yylval et qui est detype YYSTYPE.

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

Association d’une valeur aux symboles

On peut associer a chaque symbole (terminal ounon-terminal) une valeur ”semantique” (independantede la correction syntaxique).

L’analyse s’effectue apres l’analyse lexicale qui permet dereconnaıtre les tokens via des valeurs numeriques.

Si 0 est la valeur numerique retournee, le tokencorrespond a la fin du fichier.

Bison fait appel a la fonction yylex() de Flex a chaquefois qu’un token est necessaire a la suite de l’analysesyntaxique.

L’association d’une valeur a un token se fait via lavariable globale de Bison nommee yylval et qui est detype YYSTYPE.

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

Association d’une valeur aux symboles

Par defaut, YYSTYPE correspond au type int.

Il est possible de redefinir le type YYSTYPE via lamacro ”#define”. La redefinition s’effectue dans lasection des definitions.

Il se peut que les valeurs des tokens aient des typesdifferents.

Pour traiter ce cas, on peut definir une union des typesvia la clause %union. Par exemple, si l’on veut associeraux tokens des valeurs de type ”entier” et ”chaıne decaracteres”, on ecrira :%union {

int ival ;char∗ str val }

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

Association d’une valeur aux symboles

Par defaut, YYSTYPE correspond au type int.

Il est possible de redefinir le type YYSTYPE via lamacro ”#define”. La redefinition s’effectue dans lasection des definitions.

Il se peut que les valeurs des tokens aient des typesdifferents.

Pour traiter ce cas, on peut definir une union des typesvia la clause %union. Par exemple, si l’on veut associeraux tokens des valeurs de type ”entier” et ”chaıne decaracteres”, on ecrira :%union {

int ival ;char∗ str val }

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

Association d’une valeur aux symboles

Par defaut, YYSTYPE correspond au type int.

Il est possible de redefinir le type YYSTYPE via lamacro ”#define”. La redefinition s’effectue dans lasection des definitions.

Il se peut que les valeurs des tokens aient des typesdifferents.

Pour traiter ce cas, on peut definir une union des typesvia la clause %union. Par exemple, si l’on veut associeraux tokens des valeurs de type ”entier” et ”chaıne decaracteres”, on ecrira :%union {

int ival ;char∗ str val }

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

Association d’une valeur aux symboles

Par defaut, YYSTYPE correspond au type int.

Il est possible de redefinir le type YYSTYPE via lamacro ”#define”. La redefinition s’effectue dans lasection des definitions.

Il se peut que les valeurs des tokens aient des typesdifferents.

Pour traiter ce cas, on peut definir une union des typesvia la clause %union. Par exemple, si l’on veut associeraux tokens des valeurs de type ”entier” et ”chaıne decaracteres”, on ecrira :%union {

int ival ;char∗ str val }

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

Association d’une valeur aux symboles

Par defaut, YYSTYPE correspond au type int.

Il est possible de redefinir le type YYSTYPE via lamacro ”#define”. La redefinition s’effectue dans lasection des definitions.

Il se peut que les valeurs des tokens aient des typesdifferents.

Pour traiter ce cas, on peut definir une union des typesvia la clause %union. Par exemple, si l’on veut associeraux tokens des valeurs de type ”entier” et ”chaıne decaracteres”, on ecrira :

%union {int ival ;char∗ str val }

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

Association d’une valeur aux symboles

Par defaut, YYSTYPE correspond au type int.

Il est possible de redefinir le type YYSTYPE via lamacro ”#define”. La redefinition s’effectue dans lasection des definitions.

Il se peut que les valeurs des tokens aient des typesdifferents.

Pour traiter ce cas, on peut definir une union des typesvia la clause %union. Par exemple, si l’on veut associeraux tokens des valeurs de type ”entier” et ”chaıne decaracteres”, on ecrira :%union {

int ival ;char∗ str val }

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

Association d’une valeur aux symboles

Par defaut, YYSTYPE correspond au type int.

Il est possible de redefinir le type YYSTYPE via lamacro ”#define”. La redefinition s’effectue dans lasection des definitions.

Il se peut que les valeurs des tokens aient des typesdifferents.

Pour traiter ce cas, on peut definir une union des typesvia la clause %union. Par exemple, si l’on veut associeraux tokens des valeurs de type ”entier” et ”chaıne decaracteres”, on ecrira :%union {

int ival ;

char∗ str val }

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

Association d’une valeur aux symboles

Par defaut, YYSTYPE correspond au type int.

Il est possible de redefinir le type YYSTYPE via lamacro ”#define”. La redefinition s’effectue dans lasection des definitions.

Il se peut que les valeurs des tokens aient des typesdifferents.

Pour traiter ce cas, on peut definir une union des typesvia la clause %union. Par exemple, si l’on veut associeraux tokens des valeurs de type ”entier” et ”chaıne decaracteres”, on ecrira :%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 maniere equivalente, redefinir dans lapartie des declarations, le type YYSTYPE comme suit :%union {

int ival ;char∗ str val ;

} YYSTYPE;

Une fois le type YYSYTPE specifie, il faut indiquer quelmembre de l’union utiliser pour les divers tokens etnon-terminaux. Pour cale, on utilise la clause< nom du type > dans la partie ”declaration”.

Par exemple, on ecrira :%token < ival > NUMBER%token < str val > IDENT

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

Association d’une valeur aux symboles

On peut aussi, de maniere equivalente, redefinir dans lapartie des declarations, le type YYSTYPE comme suit :

%union {int ival ;char∗ str val ;

} YYSTYPE;

Une fois le type YYSYTPE specifie, il faut indiquer quelmembre de l’union utiliser pour les divers tokens etnon-terminaux. Pour cale, on utilise la clause< nom du type > dans la partie ”declaration”.

Par exemple, on ecrira :%token < ival > NUMBER%token < str val > IDENT

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

Association d’une valeur aux symboles

On peut aussi, de maniere equivalente, redefinir dans lapartie des declarations, le type YYSTYPE comme suit :%union {

int ival ;char∗ str val ;

} YYSTYPE;

Une fois le type YYSYTPE specifie, il faut indiquer quelmembre de l’union utiliser pour les divers tokens etnon-terminaux. Pour cale, on utilise la clause< nom du type > dans la partie ”declaration”.

Par exemple, on ecrira :%token < ival > NUMBER%token < str val > IDENT

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

Association d’une valeur aux symboles

On peut aussi, de maniere equivalente, redefinir dans lapartie des declarations, le type YYSTYPE comme suit :%union {

int ival ;

char∗ str val ;} YYSTYPE;

Une fois le type YYSYTPE specifie, il faut indiquer quelmembre de l’union utiliser pour les divers tokens etnon-terminaux. Pour cale, on utilise la clause< nom du type > dans la partie ”declaration”.

Par exemple, on ecrira :%token < ival > NUMBER%token < str val > IDENT

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

Association d’une valeur aux symboles

On peut aussi, de maniere equivalente, redefinir dans lapartie des declarations, le type YYSTYPE comme suit :%union {

int ival ;char∗ str val ;

} YYSTYPE;

Une fois le type YYSYTPE specifie, il faut indiquer quelmembre de l’union utiliser pour les divers tokens etnon-terminaux. Pour cale, on utilise la clause< nom du type > dans la partie ”declaration”.

Par exemple, on ecrira :%token < ival > NUMBER%token < str val > IDENT

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

Association d’une valeur aux symboles

On peut aussi, de maniere equivalente, redefinir dans lapartie des declarations, le type YYSTYPE comme suit :%union {

int ival ;char∗ str val ;

} YYSTYPE;

Une fois le type YYSYTPE specifie, il faut indiquer quelmembre de l’union utiliser pour les divers tokens etnon-terminaux. Pour cale, on utilise la clause< nom du type > dans la partie ”declaration”.

Par exemple, on ecrira :%token < ival > NUMBER%token < str val > IDENT

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

Association d’une valeur aux symboles

On peut aussi, de maniere equivalente, redefinir dans lapartie des declarations, le type YYSTYPE comme suit :%union {

int ival ;char∗ str val ;

} YYSTYPE;

Une fois le type YYSYTPE specifie, il faut indiquer quelmembre de l’union utiliser pour les divers tokens etnon-terminaux.

Pour cale, on utilise la clause< nom du type > dans la partie ”declaration”.

Par exemple, on ecrira :%token < ival > NUMBER%token < str val > IDENT

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

Association d’une valeur aux symboles

On peut aussi, de maniere equivalente, redefinir dans lapartie des declarations, le type YYSTYPE comme suit :%union {

int ival ;char∗ str val ;

} YYSTYPE;

Une fois le type YYSYTPE specifie, il faut indiquer quelmembre de l’union utiliser pour les divers tokens etnon-terminaux. Pour cale, on utilise la clause< nom du type > dans la partie ”declaration”.

Par exemple, on ecrira :%token < ival > NUMBER%token < str val > IDENT

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

Association d’une valeur aux symboles

On peut aussi, de maniere equivalente, redefinir dans lapartie des declarations, le type YYSTYPE comme suit :%union {

int ival ;char∗ str val ;

} YYSTYPE;

Une fois le type YYSYTPE specifie, il faut indiquer quelmembre de l’union utiliser pour les divers tokens etnon-terminaux. Pour cale, on utilise la clause< nom du type > dans la partie ”declaration”.

Par exemple, on ecrira :

%token < ival > NUMBER%token < str val > IDENT

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

Association d’une valeur aux symboles

On peut aussi, de maniere equivalente, redefinir dans lapartie des declarations, le type YYSTYPE comme suit :%union {

int ival ;char∗ str val ;

} YYSTYPE;

Une fois le type YYSYTPE specifie, il faut indiquer quelmembre de l’union utiliser pour les divers tokens etnon-terminaux. Pour cale, on utilise la clause< nom du type > dans la partie ”declaration”.

Par exemple, on ecrira :%token < ival > NUMBER

%token < str val > IDENT

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

Association d’une valeur aux symboles

On peut aussi, de maniere equivalente, redefinir dans lapartie des declarations, le type YYSTYPE comme suit :%union {

int ival ;char∗ str val ;

} YYSTYPE;

Une fois le type YYSYTPE specifie, il faut indiquer quelmembre de l’union utiliser pour les divers tokens etnon-terminaux. Pour cale, on utilise la clause< nom du type > dans la partie ”declaration”.

Par exemple, on ecrira :%token < ival > NUMBER%token < str val > IDENT

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

Association d’une valeur aux symboles

Pour les non-terminaux, on ecrira :%type < ival > exp

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

Association d’une valeur aux symboles

Pour les non-terminaux, on ecrira :

%type < ival > exp

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

Association d’une valeur aux symboles

Pour les non-terminaux, on ecrira :%type < ival > exp

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

Interaction avec l’analyseur lexical

Puisque l’analyse syntaxique utilise le resultat de l’analyselexicale, il faut que le fichier Flex utilise dispose decertaines informations, notamment les noms de tokensainsi que les types des valeurs qui seront associees auxtokens.

Dans la partie ”declarations” du fichier Flex , on ecrira laligne :#include ”parser .tab.h”ou ”parser” designe le nom du fichier Bison.

Enfin, les regles d’analsye lexicale doivent etre ecrites demaniere a ce Bison dispose de l’information relative autoken reconnu et a sa valeur.

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

Interaction avec l’analyseur lexical

Puisque l’analyse syntaxique utilise le resultat de l’analyselexicale, il faut que le fichier Flex utilise dispose decertaines informations, notamment les noms de tokensainsi que les types des valeurs qui seront associees auxtokens.

Dans la partie ”declarations” du fichier Flex , on ecrira laligne :#include ”parser .tab.h”ou ”parser” designe le nom du fichier Bison.

Enfin, les regles d’analsye lexicale doivent etre ecrites demaniere a ce Bison dispose de l’information relative autoken reconnu et a sa valeur.

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

Interaction avec l’analyseur lexical

Puisque l’analyse syntaxique utilise le resultat de l’analyselexicale, il faut que le fichier Flex utilise dispose decertaines informations, notamment les noms de tokensainsi que les types des valeurs qui seront associees auxtokens.

Dans la partie ”declarations” du fichier Flex , on ecrira laligne :

#include ”parser .tab.h”ou ”parser” designe le nom du fichier Bison.

Enfin, les regles d’analsye lexicale doivent etre ecrites demaniere a ce Bison dispose de l’information relative autoken reconnu et a sa valeur.

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

Interaction avec l’analyseur lexical

Puisque l’analyse syntaxique utilise le resultat de l’analyselexicale, il faut que le fichier Flex utilise dispose decertaines informations, notamment les noms de tokensainsi que les types des valeurs qui seront associees auxtokens.

Dans la partie ”declarations” du fichier Flex , on ecrira laligne :#include ”parser .tab.h”

ou ”parser” designe le nom du fichier Bison.

Enfin, les regles d’analsye lexicale doivent etre ecrites demaniere a ce Bison dispose de l’information relative autoken reconnu et a sa valeur.

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

Interaction avec l’analyseur lexical

Puisque l’analyse syntaxique utilise le resultat de l’analyselexicale, il faut que le fichier Flex utilise dispose decertaines informations, notamment les noms de tokensainsi que les types des valeurs qui seront associees auxtokens.

Dans la partie ”declarations” du fichier Flex , on ecrira laligne :#include ”parser .tab.h”ou ”parser” designe le nom du fichier Bison.

Enfin, les regles d’analsye lexicale doivent etre ecrites demaniere a ce Bison dispose de l’information relative autoken reconnu et a sa valeur.

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

Interaction avec l’analyseur lexical

Puisque l’analyse syntaxique utilise le resultat de l’analyselexicale, il faut que le fichier Flex utilise dispose decertaines informations, notamment les noms de tokensainsi que les types des valeurs qui seront associees auxtokens.

Dans la partie ”declarations” du fichier Flex , on ecrira laligne :#include ”parser .tab.h”ou ”parser” designe le nom du fichier Bison.

Enfin, les regles d’analsye lexicale doivent etre ecrites demaniere a ce Bison dispose de l’information relative autoken reconnu et a sa valeur.

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

Interaction avec l’analyseur lexical

Ainsi, on ecrira 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

Interaction avec l’analyseur lexical

Ainsi, on ecrira 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

Interaction avec l’analyseur lexical

Ainsi, on ecrira 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

Interaction avec l’analyseur lexical

Ainsi, on ecrira 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

A chaque regle peut etre associee une action quicorrespond a un bloc d’instructions C et qui sera executelorsque l’analyseur syntaxique aura reconnu la structurespecifiee par la regle.

Ces actions peuvent retourner une valeur et utiliser lesvaleurs retournees 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 ecrira :{$$ = 1; }Pour utiliser les valeur retournees par les actions del’analyseur lexical, une action peut invoquer lespseudo-variables $1, $2, ...etc.

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

Actions

A chaque regle peut etre associee une action quicorrespond a un bloc d’instructions C et qui sera executelorsque l’analyseur syntaxique aura reconnu la structurespecifiee par la regle.

Ces actions peuvent retourner une valeur et utiliser lesvaleurs retournees 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 ecrira :{$$ = 1; }Pour utiliser les valeur retournees par les actions del’analyseur lexical, une action peut invoquer lespseudo-variables $1, $2, ...etc.

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

Actions

A chaque regle peut etre associee une action quicorrespond a un bloc d’instructions C et qui sera executelorsque l’analyseur syntaxique aura reconnu la structurespecifiee par la regle.

Ces actions peuvent retourner une valeur et utiliser lesvaleurs retournees 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 ecrira :{$$ = 1; }Pour utiliser les valeur retournees par les actions del’analyseur lexical, une action peut invoquer lespseudo-variables $1, $2, ...etc.

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

Actions

A chaque regle peut etre associee une action quicorrespond a un bloc d’instructions C et qui sera executelorsque l’analyseur syntaxique aura reconnu la structurespecifiee par la regle.

Ces actions peuvent retourner une valeur et utiliser lesvaleurs retournees 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 ecrira :{$$ = 1; }Pour utiliser les valeur retournees par les actions del’analyseur lexical, une action peut invoquer lespseudo-variables $1, $2, ...etc.

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

Actions

A chaque regle peut etre associee une action quicorrespond a un bloc d’instructions C et qui sera executelorsque l’analyseur syntaxique aura reconnu la structurespecifiee par la regle.

Ces actions peuvent retourner une valeur et utiliser lesvaleurs retournees 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 ecrira :

{$$ = 1; }Pour utiliser les valeur retournees par les actions del’analyseur lexical, une action peut invoquer lespseudo-variables $1, $2, ...etc.

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

Actions

A chaque regle peut etre associee une action quicorrespond a un bloc d’instructions C et qui sera executelorsque l’analyseur syntaxique aura reconnu la structurespecifiee par la regle.

Ces actions peuvent retourner une valeur et utiliser lesvaleurs retournees 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 ecrira :{$$ = 1; }

Pour utiliser les valeur retournees par les actions del’analyseur lexical, une action peut invoquer lespseudo-variables $1, $2, ...etc.

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

Actions

A chaque regle peut etre associee une action quicorrespond a un bloc d’instructions C et qui sera executelorsque l’analyseur syntaxique aura reconnu la structurespecifiee par la regle.

Ces actions peuvent retourner une valeur et utiliser lesvaleurs retournees 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 ecrira :{$$ = 1; }Pour utiliser les valeur retournees par les actions del’analyseur lexical, une action peut invoquer lespseudo-variables $1, $2, ...etc.

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

Actions

Ces variables correspondent aux valeurs retournees par lesactions correpondant aux elements de la partie droite dela regle.

Par exemple, etant donne la regle :A : B C D {f ($1, $2, $3); }les valeurs $1, $2 et $3 correspondent aux valeursretournees par les actions specifiees dans les reglesutilisees reconnaissant A, B et C .

Voici un exemple plus concret :exp : ′(′ exp ′)′ { $$ = $2; }

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

Actions

Ces variables correspondent aux valeurs retournees par lesactions correpondant aux elements de la partie droite dela regle.

Par exemple, etant donne la regle :A : B C D {f ($1, $2, $3); }les valeurs $1, $2 et $3 correspondent aux valeursretournees par les actions specifiees dans les reglesutilisees reconnaissant A, B et C .

Voici un exemple plus concret :exp : ′(′ exp ′)′ { $$ = $2; }

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

Actions

Ces variables correspondent aux valeurs retournees par lesactions correpondant aux elements de la partie droite dela regle.

Par exemple, etant donne la regle :

A : B C D {f ($1, $2, $3); }les valeurs $1, $2 et $3 correspondent aux valeursretournees par les actions specifiees dans les reglesutilisees reconnaissant A, B et C .

Voici un exemple plus concret :exp : ′(′ exp ′)′ { $$ = $2; }

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

Actions

Ces variables correspondent aux valeurs retournees par lesactions correpondant aux elements de la partie droite dela regle.

Par exemple, etant donne la regle :A : B C D {f ($1, $2, $3); }

les valeurs $1, $2 et $3 correspondent aux valeursretournees par les actions specifiees dans les reglesutilisees reconnaissant A, B et C .

Voici un exemple plus concret :exp : ′(′ exp ′)′ { $$ = $2; }

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

Actions

Ces variables correspondent aux valeurs retournees par lesactions correpondant aux elements de la partie droite dela regle.

Par exemple, etant donne la regle :A : B C D {f ($1, $2, $3); }les valeurs $1, $2 et $3 correspondent aux valeursretournees par les actions specifiees dans les reglesutilisees reconnaissant A, B et C .

Voici un exemple plus concret :exp : ′(′ exp ′)′ { $$ = $2; }

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

Actions

Ces variables correspondent aux valeurs retournees par lesactions correpondant aux elements de la partie droite dela regle.

Par exemple, etant donne la regle :A : B C D {f ($1, $2, $3); }les valeurs $1, $2 et $3 correspondent aux valeursretournees par les actions specifiees dans les reglesutilisees reconnaissant A, B et C .

Voici un exemple plus concret :

exp : ′(′ exp ′)′ { $$ = $2; }

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

Actions

Ces variables correspondent aux valeurs retournees par lesactions correpondant aux elements de la partie droite dela regle.

Par exemple, etant donne la regle :A : B C D {f ($1, $2, $3); }les valeurs $1, $2 et $3 correspondent aux valeursretournees par les actions specifiees dans les reglesutilisees reconnaissant A, B et C .

Voici un exemple plus concret :exp : ′(′ exp ′)′ { $$ = $2; }

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

Actions

Par defaut, si aucune valeur n’est indiquee comme valeurde retour de l’action, c’est $1 qui est retournee.

Bison permet d’executer des actions avant la fin del’application d’une regle.

Il est donc possible d’indiquer une action entre deuxelements de la partie droite d’une regle.

Par exemple, la regle :A : B { $$ = 1; }C { x = $2; y = $3; };aura pour effet d’affecter la valeur 1 a la variable x et lavaleur retournee par la regle utilisee pour reconnaıtre C ala variable y .

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

Actions

Par defaut, si aucune valeur n’est indiquee comme valeurde retour de l’action, c’est $1 qui est retournee.

Bison permet d’executer des actions avant la fin del’application d’une regle.

Il est donc possible d’indiquer une action entre deuxelements de la partie droite d’une regle.

Par exemple, la regle :A : B { $$ = 1; }C { x = $2; y = $3; };aura pour effet d’affecter la valeur 1 a la variable x et lavaleur retournee par la regle utilisee pour reconnaıtre C ala variable y .

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

Actions

Par defaut, si aucune valeur n’est indiquee comme valeurde retour de l’action, c’est $1 qui est retournee.

Bison permet d’executer des actions avant la fin del’application d’une regle.

Il est donc possible d’indiquer une action entre deuxelements de la partie droite d’une regle.

Par exemple, la regle :A : B { $$ = 1; }C { x = $2; y = $3; };aura pour effet d’affecter la valeur 1 a la variable x et lavaleur retournee par la regle utilisee pour reconnaıtre C ala variable y .

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

Actions

Par defaut, si aucune valeur n’est indiquee comme valeurde retour de l’action, c’est $1 qui est retournee.

Bison permet d’executer des actions avant la fin del’application d’une regle.

Il est donc possible d’indiquer une action entre deuxelements de la partie droite d’une regle.

Par exemple, la regle :A : B { $$ = 1; }C { x = $2; y = $3; };aura pour effet d’affecter la valeur 1 a la variable x et lavaleur retournee par la regle utilisee pour reconnaıtre C ala variable y .

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

Actions

Par defaut, si aucune valeur n’est indiquee comme valeurde retour de l’action, c’est $1 qui est retournee.

Bison permet d’executer des actions avant la fin del’application d’une regle.

Il est donc possible d’indiquer une action entre deuxelements de la partie droite d’une regle.

Par exemple, la regle :

A : B { $$ = 1; }C { x = $2; y = $3; };aura pour effet d’affecter la valeur 1 a la variable x et lavaleur retournee par la regle utilisee pour reconnaıtre C ala variable y .

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

Actions

Par defaut, si aucune valeur n’est indiquee comme valeurde retour de l’action, c’est $1 qui est retournee.

Bison permet d’executer des actions avant la fin del’application d’une regle.

Il est donc possible d’indiquer une action entre deuxelements de la partie droite d’une regle.

Par exemple, la regle :A : B { $$ = 1; }

C { x = $2; y = $3; };aura pour effet d’affecter la valeur 1 a la variable x et lavaleur retournee par la regle utilisee pour reconnaıtre C ala variable y .

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

Actions

Par defaut, si aucune valeur n’est indiquee comme valeurde retour de l’action, c’est $1 qui est retournee.

Bison permet d’executer des actions avant la fin del’application d’une regle.

Il est donc possible d’indiquer une action entre deuxelements de la partie droite d’une regle.

Par exemple, la regle :A : B { $$ = 1; }C { x = $2; y = $3; };

aura pour effet d’affecter la valeur 1 a la variable x et lavaleur retournee par la regle utilisee pour reconnaıtre C ala variable y .

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

Actions

Par defaut, si aucune valeur n’est indiquee comme valeurde retour de l’action, c’est $1 qui est retournee.

Bison permet d’executer des actions avant la fin del’application d’une regle.

Il est donc possible d’indiquer une action entre deuxelements de la partie droite d’une regle.

Par exemple, la regle :A : B { $$ = 1; }C { x = $2; y = $3; };aura pour effet d’affecter la valeur 1 a la variable x et lavaleur retournee par la regle utilisee pour reconnaıtre C ala variable y .

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

Actions

On peut specifier le ”type d’une valeur” dans une regle.

Ce qui peut etre utile par exemple lorsqu’un token”mono-lettre” n’a pas ete declare.

Par exemple, on peut ecrire :A : B C { f ($ < ival > 1); $ < str val > $ =”merci”; };

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

Actions

On peut specifier le ”type d’une valeur” dans une regle.

Ce qui peut etre utile par exemple lorsqu’un token”mono-lettre” n’a pas ete declare.

Par exemple, on peut ecrire :A : B C { f ($ < ival > 1); $ < str val > $ =”merci”; };

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

Actions

On peut specifier le ”type d’une valeur” dans une regle.

Ce qui peut etre utile par exemple lorsqu’un token”mono-lettre” n’a pas ete declare.

Par exemple, on peut ecrire :A : B C { f ($ < ival > 1); $ < str val > $ =”merci”; };

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

Actions

On peut specifier le ”type d’une valeur” dans une regle.

Ce qui peut etre utile par exemple lorsqu’un token”mono-lettre” n’a pas ete declare.

Par exemple, on peut ecrire :

A : B C { f ($ < ival > 1); $ < str val > $ =”merci”; };

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

Actions

On peut specifier le ”type d’une valeur” dans une regle.

Ce qui peut etre utile par exemple lorsqu’un token”mono-lettre” n’a pas ete declare.

Par exemple, on peut ecrire :A : B C { f ($ < ival > 1); $ < str val > $ =”merci”; };

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

Actions

Il est possible d’appeler implicitement la fonction quieffectue l’analyse syntaxique en invoquant son nom”yyparse”().

Lors de l’execution de la fonction ”yyparse”(), si uneerreur de syntaxe est detectee, la fonction ”yyerror”()est appelee afin qu’un message d’erreur s’affiche.

Par defaut, en cas d’une erreur de syntaxe, la fonction”yyparse”() declenche l’arret immediat de l’analysesyantique apres l’execution de la fonction ”yyperror”().

Celle-ci, affiche par defaut 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

Actions

Il est possible d’appeler implicitement la fonction quieffectue l’analyse syntaxique en invoquant son nom”yyparse”().

Lors de l’execution de la fonction ”yyparse”(), si uneerreur de syntaxe est detectee, la fonction ”yyerror”()est appelee afin qu’un message d’erreur s’affiche.

Par defaut, en cas d’une erreur de syntaxe, la fonction”yyparse”() declenche l’arret immediat de l’analysesyantique apres l’execution de la fonction ”yyperror”().

Celle-ci, affiche par defaut 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

Actions

Il est possible d’appeler implicitement la fonction quieffectue l’analyse syntaxique en invoquant son nom”yyparse”().

Lors de l’execution de la fonction ”yyparse”(), si uneerreur de syntaxe est detectee, la fonction ”yyerror”()est appelee afin qu’un message d’erreur s’affiche.

Par defaut, en cas d’une erreur de syntaxe, la fonction”yyparse”() declenche l’arret immediat de l’analysesyantique apres l’execution de la fonction ”yyperror”().

Celle-ci, affiche par defaut 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

Actions

Il est possible d’appeler implicitement la fonction quieffectue l’analyse syntaxique en invoquant son nom”yyparse”().

Lors de l’execution de la fonction ”yyparse”(), si uneerreur de syntaxe est detectee, la fonction ”yyerror”()est appelee afin qu’un message d’erreur s’affiche.

Par defaut, en cas d’une erreur de syntaxe, la fonction”yyparse”() declenche l’arret immediat de l’analysesyantique apres l’execution de la fonction ”yyperror”().

Celle-ci, affiche par defaut 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

Actions

Il est possible d’appeler implicitement la fonction quieffectue l’analyse syntaxique en invoquant son nom”yyparse”().

Lors de l’execution de la fonction ”yyparse”(), si uneerreur de syntaxe est detectee, la fonction ”yyerror”()est appelee afin qu’un message d’erreur s’affiche.

Par defaut, en cas d’une erreur de syntaxe, la fonction”yyparse”() declenche l’arret immediat de l’analysesyantique apres l’execution de la fonction ”yyperror”().

Celle-ci, affiche par defaut 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

Actions

Il est possible d’appeler implicitement la fonction quieffectue l’analyse syntaxique en invoquant son nom”yyparse”().

Lors de l’execution de la fonction ”yyparse”(), si uneerreur de syntaxe est detectee, la fonction ”yyerror”()est appelee afin qu’un message d’erreur s’affiche.

Par defaut, en cas d’une erreur de syntaxe, la fonction”yyparse”() declenche l’arret immediat de l’analysesyantique apres l’execution de la fonction ”yyperror”().

Celle-ci, affiche par defaut 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 corriges

Enonce 1.1

Ecrire un interpreteur d’expressions arithmetiques sur les”entiers” et n’utilisant que les operateurs + ( additions)et ∗ (multiplications).

Modifier cet interpreteur pour qu’il puisse traiter les”doubles”.

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

Exercices corriges

Enonce 1.1

Ecrire un interpreteur d’expressions arithmetiques sur les”entiers” et n’utilisant que les operateurs + ( additions)et ∗ (multiplications).

Modifier cet interpreteur pour qu’il puisse traiter les”doubles”.

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

Exercices corriges

Enonce 1.1

Ecrire un interpreteur d’expressions arithmetiques sur les”entiers” et n’utilisant que les operateurs + ( additions)et ∗ (multiplications).

Modifier cet interpreteur pour qu’il puisse traiter les”doubles”.

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

Exercices corriges

Code Flex

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

Exercices corriges

Code Bison

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

Exercices corriges

Code Flex

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

Exercices corriges

Code Bison

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