SlideShare une entreprise Scribd logo
ALF
Grammaires
Bibliographie pour aujourd'hui
Keith Cooper, Linda Torczon, Engineering a Compiler
– Chapitre 3
• 3.1
• 3.2
Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D.
Ullman, Compilers: Principles, Techniques, and Tools (2nd
Edition)
– Chapitre 4
• 4.2
• 4.3
Contenu
• Grammaires indépendantes
du contexte
• L'arbre du parse
• Jison
John Backus
• Américain
• FORTRAN
• Forme Backus-Naur
• Turing Prix
Grammaire
• Une manière formelle de décrire une langue
• Une langue peut avoir plusieurs grammaires
• Hiérarchie de Chomsky
Hiérarchie de Chomsky
Grammaire Description
Type 0 Récursivement énumérable
Type 1 Dépendante du contexte
Type 2 Indépendant du contexte
Type 3 Grammaire régulière
Grammaire indépendante du contexte
• Terminaux
– jetons (tokens)
– a, b, c, d, e, f
• Non-terminaux
– S, V, N, E ..
• Symbole de début
– S
• Productions
– N -> …
Exemple
S -> A
S -> B
A -> a
A -> aA
B -> b
B -> bB
Exemple
Token
numero: [0-9]+
sign: [+-*/]
Production
E -> E sign E
E -> -E
E -> numero
Exemple
Token
numero: [0-9]+
sign: [+-*/]
Production
E -> E sign E | -E | numero
Exemple
Token
numero: [0-9]+
sign: [+-*/]
Production
E -> E sign E
| -E
| numero
Dérivation
• Remplacement d'un non terminal par sa
production
– 1+2-3+6
• E => 1 + E
– => 1 + 2 - E
– => 1 + 2 - 3 + E
– => 1 + 2 - 3 + 6
Dérivation de gauche
• 1+2-3+6
• E => 1 + E
– => 1 + 2 - E
– => 1 + 2 - 3 + E
– => 1 + 2 - 3 + 6
Dérivation la plus à droite
• 1+2-3+6
• E => E + 6
– => E - 3 + 6
– => E + 2 - 3 + 6
– => 1 + 2 - 3 + 6
L'arbre du parse
• 1+2-3+6
• E => 1 + E
– => 1 + 2 - E
– => 1 + 2 - 3 + E
– => 1 + 2 - 3 + 6
E
1 + E
2 - E
3 + E
6
L'arbre du parse
• 1+2-3+6
• E => E + 6
– => E - 3 + 6
– => E + 2 - 3 + 6
– => 1 + 2 - 3 + 6
E
E
E
E
1
+ 2
- 3
+ 6
L'arbre du parse
• 1+2-3+6
• E => 1 + E
– => 1 + E + 6
– => 1 + 2 - E + 6
– => 1 + 2 - 3 + 6
E
1 + E
E
2 - E
3
+ 6
Ambiguïté
• Grammaires qui produisent plus d'un arbre du
parse
E -> E sign E
| -E
| numero
Exemple de Ambiguïté
• Grammaires qui produisent plus d'un arbre du
parse
if -> IF expression statements
| IF expression statements ELSE statements
Exemple de Ambiguïté
if (a == 0)
console.log ('zero');
else
console.log ('not zero');
Exemple de Ambiguïté
if (a == 0)
if (e == 0)
console.log ('zero');
else
console.log ('not zero');
Exemple de Ambiguïté
if (a == 0)
if (e == 0)
console.log ('zero');
else
console.log ('not zero');
Exercises
• Grammaire de parenthèses
• Expression avec multiplication et division
• Expression avec parenthèses
• Vecteur
• Déclaration de variable
• Déclaration de fonction
Jison
https://github.com/GerHobbelt/jison
Frontent
Source
Lexer Parser Semantic
AST
Tokens Parse Tree
Unexpected token … Expected …
Object has no
function …
Jison
Générateur de lexer/parseur
Expressions
régulières
Grammaire
Fichier.l
Fichier.js
jison
Fichier.y
Fichiers Jison
• Lexer
– fichier.l
• Parser
– fichier.y
Letter [A-Za-z]
WS s+
%%
"FOR" { return ‘FOR'; }
"IF" { return ‘IF'; }
"+" { return ‘PLUS’; }
"-" { return ‘MINUS’; }
{Letter}+ { print (yytext); return 'ID'; }
{WS}+ { /* whitespace separates tokens */ }
%%
function print (text)
{
console.log ('token '+text);
}
Fichier.l (lex ou flex)
Règles
Code Utilisateur
Options
Fichier.y (yacc ou bison)
%token FOR ID GOTO PLUS MINUS
%start Lines
%left PLUS MINUS
%{
function rule (name, elements) {...}
function token (type, value) {...}
%}
%%
Lines:
Statement NewLine Lines { $$ = [$Statement, $Lines]; }
| Statement NewLine { $$ = $Statement; };
Statement:
| FOR ID '=' Expression TO Expression STEP Integer {...}
| GOTO Expression {...}
| IF Expression THEN Statement {...}
| RETURN {...};
Expression: Expression PLUS Expression {...}
| Expression MINUS Expression {...}
| Expression MULTIPLY Expression {...}
| Expression DIVIDE Expression {...};
Options
%token FOR ID GOTO PLUS MINUS
%start Lines
%left PLUS MINUS
%{
function rule (name, elements) {...}
function token (type, value) {...}
%}
%%
Lines:
Statement NewLine Lines { $$ = [$Statement, $Lines]; }
| Statement NewLine { $$ = $Statement; };
Statement:
| FOR ID '=' Expression TO Expression STEP Integer {...}
| GOTO Expression {...}
| IF Expression THEN Statement {...}
| RETURN {...};
Expression: Expression PLUS Expression {...}
| Expression MINUS Expression {...}
| Expression MULTIPLY Expression {...}
| Expression DIVIDE Expression {...};
Règles
Code Utilisateur
Options
Code Utilisateur
%token FOR ID GOTO PLUS MINUS
%start Lines
%left PLUS MINUS
%{
function rule (name, elements) {...}
function token (type, value) {...}
%}
%%
Lines:
Statement NewLine Lines { $$ = [$Statement, $Lines]; }
| Statement NewLine { $$ = $Statement; };
Statement:
| FOR ID '=' Expression TO Expression STEP Integer {...}
| GOTO Expression {...}
| IF Expression THEN Statement {...}
| RETURN {...};
Expression: Expression PLUS Expression {...}
| Expression MINUS Expression {...}
| Expression MULTIPLY Expression {...}
| Expression DIVIDE Expression {...};
Options
Règles
Code Utilisateur
Declarations des fonctions et variables
Règles
%token FOR ID GOTO PLUS MINUS
%start Lines
%left PLUS MINUS
%{
function rule (name, elements) {...}
function token (type, value) {...}
%}
%%
Lines:
Statement NewLine Lines { $$ = [$Statement, $Lines]; }
| Statement NewLine { $$ = $Statement; };
Statement:
| FOR ID '=' Expression TO Expression STEP Integer {...}
| GOTO Expression {...}
| IF Expression THEN Statement {...}
| RETURN {...};
Expression: Expression PLUS Expression {...}
| Expression MINUS Expression {...}
| Expression MULTIPLY Expression {...}
| Expression DIVIDE Expression {...};
Code Utilisateur
Options
Règles
règle: production de grammaire { Actions }
Règles
Code Utilisateur
Options
Fichier.y
%token FOR ID GOTO PLUS MINUS
%start Lines
%left PLUS MINUS
%{
function rule (name, elements) {...}
function token (type, value) {...}
%}
%%
Lines:
Statement NewLine Lines { $$ = [$Statement, $Lines]; }
| Statement NewLine { $$ = $Statement; };
Statement:
| FOR ID '=' Expression TO Expression STEP Integer {...}
| GOTO Expression {...}
| IF Expression THEN Statement {...}
| RETURN {...};
Expression: Expression PLUS Expression {...}
| Expression MINUS Expression {...}
| Expression MULTIPLY Expression {...}
| Expression DIVIDE Expression {...};
Sujets
• Grammaires indépendantes du contexte
• L'arbre du parse
• Ambiguïté
• Jison
Questions

Contenu connexe

Tendances

ALF 8 - Generation du code
ALF 8 - Generation du codeALF 8 - Generation du code
ALF 8 - Generation du code
Alexandru Radovici
 
ALF 6 - Parser Bottom-Up
ALF 6 - Parser Bottom-UpALF 6 - Parser Bottom-Up
ALF 6 - Parser Bottom-Up
Alexandru Radovici
 
ALF 3 - Expressions régulières (2018)
ALF 3 - Expressions régulières (2018)ALF 3 - Expressions régulières (2018)
ALF 3 - Expressions régulières (2018)
Alexandru Radovici
 
ALF 6 - Parser Bottom-Up
ALF 6 - Parser Bottom-UpALF 6 - Parser Bottom-Up
ALF 6 - Parser Bottom-Up
Alexandru Radovici
 
ALF 4 - Grammaires (2018)
ALF 4 - Grammaires (2018)ALF 4 - Grammaires (2018)
ALF 4 - Grammaires (2018)
Alexandru Radovici
 
ALF 1 - Automates finis
ALF 1 - Automates finis ALF 1 - Automates finis
ALF 1 - Automates finis
Alexandru Radovici
 
ALF 8 - Generation de code
ALF 8 - Generation de codeALF 8 - Generation de code
ALF 8 - Generation de code
Alexandru Radovici
 
ALF 12 - Optimisations
ALF 12 - OptimisationsALF 12 - Optimisations
ALF 12 - Optimisations
Alexandru Radovici
 
ALF 11 - Diagrame de flux de controlle
ALF 11 - Diagrame de flux de controlleALF 11 - Diagrame de flux de controlle
ALF 11 - Diagrame de flux de controlle
Alexandru Radovici
 
ALF 11 - WebAssembly
ALF 11 - WebAssemblyALF 11 - WebAssembly
ALF 11 - WebAssembly
Alexandru Radovici
 
ALF 2 - Automates Fini (2018)
ALF 2 - Automates Fini (2018)ALF 2 - Automates Fini (2018)
ALF 2 - Automates Fini (2018)
Alexandru Radovici
 
ALF 10 - Convention d'appel de fonction
ALF 10 - Convention d'appel de fonctionALF 10 - Convention d'appel de fonction
ALF 10 - Convention d'appel de fonction
Alexandru Radovici
 
ALF 8 - Représentation des données
ALF 8 - Représentation des donnéesALF 8 - Représentation des données
ALF 8 - Représentation des données
Alexandru Radovici
 
ALF 11 - Diagramme de flux de contrôle et WebAssembly
ALF 11 - Diagramme de flux de contrôle et WebAssemblyALF 11 - Diagramme de flux de contrôle et WebAssembly
ALF 11 - Diagramme de flux de contrôle et WebAssembly
Alexandru Radovici
 
Le décodage Kaldi/FST pour la reconnaissance de l'écriture
Le décodage Kaldi/FST pour la reconnaissance de l'écriture Le décodage Kaldi/FST pour la reconnaissance de l'écriture
Le décodage Kaldi/FST pour la reconnaissance de l'écriture
Wassim Swaileh
 
ALF - Introduction (2018)
ALF - Introduction (2018)ALF - Introduction (2018)
ALF - Introduction (2018)
Alexandru Radovici
 
ALF 9 - Generation de code
ALF 9 - Generation de codeALF 9 - Generation de code
ALF 9 - Generation de code
Alexandru Radovici
 
Initiation r
Initiation rInitiation r
Meilleur du typage fort (AFUP Day, 2020)
Meilleur du typage fort (AFUP Day, 2020)Meilleur du typage fort (AFUP Day, 2020)
Meilleur du typage fort (AFUP Day, 2020)
Damien Seguy
 
R for data analysis
R for data analysisR for data analysis
R for data analysis
Ahmadou DICKO
 

Tendances (20)

ALF 8 - Generation du code
ALF 8 - Generation du codeALF 8 - Generation du code
ALF 8 - Generation du code
 
ALF 6 - Parser Bottom-Up
ALF 6 - Parser Bottom-UpALF 6 - Parser Bottom-Up
ALF 6 - Parser Bottom-Up
 
ALF 3 - Expressions régulières (2018)
ALF 3 - Expressions régulières (2018)ALF 3 - Expressions régulières (2018)
ALF 3 - Expressions régulières (2018)
 
ALF 6 - Parser Bottom-Up
ALF 6 - Parser Bottom-UpALF 6 - Parser Bottom-Up
ALF 6 - Parser Bottom-Up
 
ALF 4 - Grammaires (2018)
ALF 4 - Grammaires (2018)ALF 4 - Grammaires (2018)
ALF 4 - Grammaires (2018)
 
ALF 1 - Automates finis
ALF 1 - Automates finis ALF 1 - Automates finis
ALF 1 - Automates finis
 
ALF 8 - Generation de code
ALF 8 - Generation de codeALF 8 - Generation de code
ALF 8 - Generation de code
 
ALF 12 - Optimisations
ALF 12 - OptimisationsALF 12 - Optimisations
ALF 12 - Optimisations
 
ALF 11 - Diagrame de flux de controlle
ALF 11 - Diagrame de flux de controlleALF 11 - Diagrame de flux de controlle
ALF 11 - Diagrame de flux de controlle
 
ALF 11 - WebAssembly
ALF 11 - WebAssemblyALF 11 - WebAssembly
ALF 11 - WebAssembly
 
ALF 2 - Automates Fini (2018)
ALF 2 - Automates Fini (2018)ALF 2 - Automates Fini (2018)
ALF 2 - Automates Fini (2018)
 
ALF 10 - Convention d'appel de fonction
ALF 10 - Convention d'appel de fonctionALF 10 - Convention d'appel de fonction
ALF 10 - Convention d'appel de fonction
 
ALF 8 - Représentation des données
ALF 8 - Représentation des donnéesALF 8 - Représentation des données
ALF 8 - Représentation des données
 
ALF 11 - Diagramme de flux de contrôle et WebAssembly
ALF 11 - Diagramme de flux de contrôle et WebAssemblyALF 11 - Diagramme de flux de contrôle et WebAssembly
ALF 11 - Diagramme de flux de contrôle et WebAssembly
 
Le décodage Kaldi/FST pour la reconnaissance de l'écriture
Le décodage Kaldi/FST pour la reconnaissance de l'écriture Le décodage Kaldi/FST pour la reconnaissance de l'écriture
Le décodage Kaldi/FST pour la reconnaissance de l'écriture
 
ALF - Introduction (2018)
ALF - Introduction (2018)ALF - Introduction (2018)
ALF - Introduction (2018)
 
ALF 9 - Generation de code
ALF 9 - Generation de codeALF 9 - Generation de code
ALF 9 - Generation de code
 
Initiation r
Initiation rInitiation r
Initiation r
 
Meilleur du typage fort (AFUP Day, 2020)
Meilleur du typage fort (AFUP Day, 2020)Meilleur du typage fort (AFUP Day, 2020)
Meilleur du typage fort (AFUP Day, 2020)
 
R for data analysis
R for data analysisR for data analysis
R for data analysis
 

Similaire à ALF 4 - Grammaires

cour de compilation
cour de compilation cour de compilation
cour de compilation
Ens Kouba
 
Théorie des langages - 01 - Compilation
Théorie des langages - 01 - CompilationThéorie des langages - 01 - Compilation
Théorie des langages - 01 - Compilation
Yann Caron
 
Data Mining (Partie 2).pdf
Data Mining (Partie 2).pdfData Mining (Partie 2).pdf
Data Mining (Partie 2).pdf
OuailChoukhairi
 
Programmation fonctionnelle
Programmation fonctionnelleProgrammation fonctionnelle
Programmation fonctionnelle
Geeks Anonymes
 
Développement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulièresDéveloppement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulières
ECAM Brussels Engineering School
 
Analyse statique et applications
Analyse statique et applicationsAnalyse statique et applications
Analyse statique et applications
Damien Seguy
 
Un compilateur... comment ça marche?
Un compilateur... comment ça marche?Un compilateur... comment ça marche?
Un compilateur... comment ça marche?
Dinesh Bolkensteyn
 

Similaire à ALF 4 - Grammaires (7)

cour de compilation
cour de compilation cour de compilation
cour de compilation
 
Théorie des langages - 01 - Compilation
Théorie des langages - 01 - CompilationThéorie des langages - 01 - Compilation
Théorie des langages - 01 - Compilation
 
Data Mining (Partie 2).pdf
Data Mining (Partie 2).pdfData Mining (Partie 2).pdf
Data Mining (Partie 2).pdf
 
Programmation fonctionnelle
Programmation fonctionnelleProgrammation fonctionnelle
Programmation fonctionnelle
 
Développement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulièresDéveloppement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulières
 
Analyse statique et applications
Analyse statique et applicationsAnalyse statique et applications
Analyse statique et applications
 
Un compilateur... comment ça marche?
Un compilateur... comment ça marche?Un compilateur... comment ça marche?
Un compilateur... comment ça marche?
 

Plus de Alexandru Radovici

SdE2 - Pilot Tock
SdE2 - Pilot TockSdE2 - Pilot Tock
SdE2 - Pilot Tock
Alexandru Radovici
 
SdE2 - Systèmes embarquées
SdE2 - Systèmes embarquéesSdE2 - Systèmes embarquées
SdE2 - Systèmes embarquées
Alexandru Radovici
 
SdE2 - Planification, IPC
SdE2 - Planification, IPCSdE2 - Planification, IPC
SdE2 - Planification, IPC
Alexandru Radovici
 
ALF1 - Introduction
ALF1 - IntroductionALF1 - Introduction
ALF1 - Introduction
Alexandru Radovici
 
SdE2 - Introduction
SdE2 - IntroductionSdE2 - Introduction
SdE2 - Introduction
Alexandru Radovici
 
MDAD 6 - AIDL and Services
MDAD 6 - AIDL and ServicesMDAD 6 - AIDL and Services
MDAD 6 - AIDL and Services
Alexandru Radovici
 
MDAD 5 - Threads
MDAD 5 - ThreadsMDAD 5 - Threads
MDAD 5 - Threads
Alexandru Radovici
 
MDAD 4 - Lists, adapters and recycling
MDAD 4 - Lists, adapters and recyclingMDAD 4 - Lists, adapters and recycling
MDAD 4 - Lists, adapters and recycling
Alexandru Radovici
 
MDAD 3 - Basics of UI Applications
MDAD 3 - Basics of UI ApplicationsMDAD 3 - Basics of UI Applications
MDAD 3 - Basics of UI Applications
Alexandru Radovici
 
MDAD 2 - Introduction to the Android Framework
MDAD 2 - Introduction to the Android FrameworkMDAD 2 - Introduction to the Android Framework
MDAD 2 - Introduction to the Android Framework
Alexandru Radovici
 
MDAD 1 - Hardware
MDAD 1 - HardwareMDAD 1 - Hardware
MDAD 1 - Hardware
Alexandru Radovici
 
MDAD 0 - Introduction
MDAD 0 - IntroductionMDAD 0 - Introduction
MDAD 0 - Introduction
Alexandru Radovici
 
SdE 11 - Reseau
SdE 11 - ReseauSdE 11 - Reseau
SdE 11 - Reseau
Alexandru Radovici
 
SdE 10 - Threads
SdE 10 - ThreadsSdE 10 - Threads
SdE 10 - Threads
Alexandru Radovici
 
SdE 8 - Synchronisation de execution
SdE 8 - Synchronisation de executionSdE 8 - Synchronisation de execution
SdE 8 - Synchronisation de execution
Alexandru Radovici
 
SdE 8 - Memoire Virtuelle
SdE 8 - Memoire VirtuelleSdE 8 - Memoire Virtuelle
SdE 8 - Memoire Virtuelle
Alexandru Radovici
 
SdE 7 - Gestion de la Mémoire
SdE 7 - Gestion de la MémoireSdE 7 - Gestion de la Mémoire
SdE 7 - Gestion de la Mémoire
Alexandru Radovici
 
SdE 6 - Planification
SdE 6 - PlanificationSdE 6 - Planification
SdE 6 - Planification
Alexandru Radovici
 
SdE 5 - Planification
SdE 5 - PlanificationSdE 5 - Planification
SdE 5 - Planification
Alexandru Radovici
 
SdE2 4 - Processus
SdE2 4 - ProcessusSdE2 4 - Processus
SdE2 4 - Processus
Alexandru Radovici
 

Plus de Alexandru Radovici (20)

SdE2 - Pilot Tock
SdE2 - Pilot TockSdE2 - Pilot Tock
SdE2 - Pilot Tock
 
SdE2 - Systèmes embarquées
SdE2 - Systèmes embarquéesSdE2 - Systèmes embarquées
SdE2 - Systèmes embarquées
 
SdE2 - Planification, IPC
SdE2 - Planification, IPCSdE2 - Planification, IPC
SdE2 - Planification, IPC
 
ALF1 - Introduction
ALF1 - IntroductionALF1 - Introduction
ALF1 - Introduction
 
SdE2 - Introduction
SdE2 - IntroductionSdE2 - Introduction
SdE2 - Introduction
 
MDAD 6 - AIDL and Services
MDAD 6 - AIDL and ServicesMDAD 6 - AIDL and Services
MDAD 6 - AIDL and Services
 
MDAD 5 - Threads
MDAD 5 - ThreadsMDAD 5 - Threads
MDAD 5 - Threads
 
MDAD 4 - Lists, adapters and recycling
MDAD 4 - Lists, adapters and recyclingMDAD 4 - Lists, adapters and recycling
MDAD 4 - Lists, adapters and recycling
 
MDAD 3 - Basics of UI Applications
MDAD 3 - Basics of UI ApplicationsMDAD 3 - Basics of UI Applications
MDAD 3 - Basics of UI Applications
 
MDAD 2 - Introduction to the Android Framework
MDAD 2 - Introduction to the Android FrameworkMDAD 2 - Introduction to the Android Framework
MDAD 2 - Introduction to the Android Framework
 
MDAD 1 - Hardware
MDAD 1 - HardwareMDAD 1 - Hardware
MDAD 1 - Hardware
 
MDAD 0 - Introduction
MDAD 0 - IntroductionMDAD 0 - Introduction
MDAD 0 - Introduction
 
SdE 11 - Reseau
SdE 11 - ReseauSdE 11 - Reseau
SdE 11 - Reseau
 
SdE 10 - Threads
SdE 10 - ThreadsSdE 10 - Threads
SdE 10 - Threads
 
SdE 8 - Synchronisation de execution
SdE 8 - Synchronisation de executionSdE 8 - Synchronisation de execution
SdE 8 - Synchronisation de execution
 
SdE 8 - Memoire Virtuelle
SdE 8 - Memoire VirtuelleSdE 8 - Memoire Virtuelle
SdE 8 - Memoire Virtuelle
 
SdE 7 - Gestion de la Mémoire
SdE 7 - Gestion de la MémoireSdE 7 - Gestion de la Mémoire
SdE 7 - Gestion de la Mémoire
 
SdE 6 - Planification
SdE 6 - PlanificationSdE 6 - Planification
SdE 6 - Planification
 
SdE 5 - Planification
SdE 5 - PlanificationSdE 5 - Planification
SdE 5 - Planification
 
SdE2 4 - Processus
SdE2 4 - ProcessusSdE2 4 - Processus
SdE2 4 - Processus
 

Dernier

Zineb Mekouar.pptx Écrivaine marocaine
Zineb Mekouar.pptx   Écrivaine  marocaineZineb Mekouar.pptx   Écrivaine  marocaine
Zineb Mekouar.pptx Écrivaine marocaine
Txaruka
 
Auguste Herbin.pptx Peintre français
Auguste   Herbin.pptx Peintre   françaisAuguste   Herbin.pptx Peintre   français
Auguste Herbin.pptx Peintre français
Txaruka
 
1e geo metropolisation metropolisation x
1e geo metropolisation metropolisation x1e geo metropolisation metropolisation x
1e geo metropolisation metropolisation x
NadineHG
 
GUIDE POUR L’EVRAS BALISES ET APPRENTISSAGES
GUIDE POUR L’EVRAS BALISES ET APPRENTISSAGESGUIDE POUR L’EVRAS BALISES ET APPRENTISSAGES
GUIDE POUR L’EVRAS BALISES ET APPRENTISSAGES
DjibrilToure5
 
MÉDIATION ORALE - MON NOUVEL APPARTEMENT.pdf
MÉDIATION ORALE - MON NOUVEL APPARTEMENT.pdfMÉDIATION ORALE - MON NOUVEL APPARTEMENT.pdf
MÉDIATION ORALE - MON NOUVEL APPARTEMENT.pdf
lebaobabbleu
 
1e Espaces productifs 2024.Espaces productif
1e Espaces productifs 2024.Espaces productif1e Espaces productifs 2024.Espaces productif
1e Espaces productifs 2024.Espaces productif
NadineHG
 
A1- Compréhension orale - présentations.pdf
A1- Compréhension orale - présentations.pdfA1- Compréhension orale - présentations.pdf
A1- Compréhension orale - présentations.pdf
lebaobabbleu
 
La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...
La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...
La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...
Editions La Dondaine
 
Droits et devoirs, éthique universitaire..
Droits et devoirs, éthique universitaire..Droits et devoirs, éthique universitaire..
Droits et devoirs, éthique universitaire..
TarikBouchala
 
Burkina Faso libraries newsletter for June 2024
Burkina Faso libraries newsletter for June 2024Burkina Faso libraries newsletter for June 2024
Burkina Faso libraries newsletter for June 2024
Friends of African Village Libraries
 

Dernier (10)

Zineb Mekouar.pptx Écrivaine marocaine
Zineb Mekouar.pptx   Écrivaine  marocaineZineb Mekouar.pptx   Écrivaine  marocaine
Zineb Mekouar.pptx Écrivaine marocaine
 
Auguste Herbin.pptx Peintre français
Auguste   Herbin.pptx Peintre   françaisAuguste   Herbin.pptx Peintre   français
Auguste Herbin.pptx Peintre français
 
1e geo metropolisation metropolisation x
1e geo metropolisation metropolisation x1e geo metropolisation metropolisation x
1e geo metropolisation metropolisation x
 
GUIDE POUR L’EVRAS BALISES ET APPRENTISSAGES
GUIDE POUR L’EVRAS BALISES ET APPRENTISSAGESGUIDE POUR L’EVRAS BALISES ET APPRENTISSAGES
GUIDE POUR L’EVRAS BALISES ET APPRENTISSAGES
 
MÉDIATION ORALE - MON NOUVEL APPARTEMENT.pdf
MÉDIATION ORALE - MON NOUVEL APPARTEMENT.pdfMÉDIATION ORALE - MON NOUVEL APPARTEMENT.pdf
MÉDIATION ORALE - MON NOUVEL APPARTEMENT.pdf
 
1e Espaces productifs 2024.Espaces productif
1e Espaces productifs 2024.Espaces productif1e Espaces productifs 2024.Espaces productif
1e Espaces productifs 2024.Espaces productif
 
A1- Compréhension orale - présentations.pdf
A1- Compréhension orale - présentations.pdfA1- Compréhension orale - présentations.pdf
A1- Compréhension orale - présentations.pdf
 
La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...
La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...
La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...
 
Droits et devoirs, éthique universitaire..
Droits et devoirs, éthique universitaire..Droits et devoirs, éthique universitaire..
Droits et devoirs, éthique universitaire..
 
Burkina Faso libraries newsletter for June 2024
Burkina Faso libraries newsletter for June 2024Burkina Faso libraries newsletter for June 2024
Burkina Faso libraries newsletter for June 2024
 

ALF 4 - Grammaires

  • 2. Bibliographie pour aujourd'hui Keith Cooper, Linda Torczon, Engineering a Compiler – Chapitre 3 • 3.1 • 3.2 Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman, Compilers: Principles, Techniques, and Tools (2nd Edition) – Chapitre 4 • 4.2 • 4.3
  • 3. Contenu • Grammaires indépendantes du contexte • L'arbre du parse • Jison
  • 4. John Backus • Américain • FORTRAN • Forme Backus-Naur • Turing Prix
  • 5. Grammaire • Une manière formelle de décrire une langue • Une langue peut avoir plusieurs grammaires • Hiérarchie de Chomsky
  • 6. Hiérarchie de Chomsky Grammaire Description Type 0 Récursivement énumérable Type 1 Dépendante du contexte Type 2 Indépendant du contexte Type 3 Grammaire régulière
  • 7. Grammaire indépendante du contexte • Terminaux – jetons (tokens) – a, b, c, d, e, f • Non-terminaux – S, V, N, E .. • Symbole de début – S • Productions – N -> …
  • 8. Exemple S -> A S -> B A -> a A -> aA B -> b B -> bB
  • 12. Dérivation • Remplacement d'un non terminal par sa production – 1+2-3+6 • E => 1 + E – => 1 + 2 - E – => 1 + 2 - 3 + E – => 1 + 2 - 3 + 6
  • 13. Dérivation de gauche • 1+2-3+6 • E => 1 + E – => 1 + 2 - E – => 1 + 2 - 3 + E – => 1 + 2 - 3 + 6
  • 14. Dérivation la plus à droite • 1+2-3+6 • E => E + 6 – => E - 3 + 6 – => E + 2 - 3 + 6 – => 1 + 2 - 3 + 6
  • 15. L'arbre du parse • 1+2-3+6 • E => 1 + E – => 1 + 2 - E – => 1 + 2 - 3 + E – => 1 + 2 - 3 + 6 E 1 + E 2 - E 3 + E 6
  • 16. L'arbre du parse • 1+2-3+6 • E => E + 6 – => E - 3 + 6 – => E + 2 - 3 + 6 – => 1 + 2 - 3 + 6 E E E E 1 + 2 - 3 + 6
  • 17. L'arbre du parse • 1+2-3+6 • E => 1 + E – => 1 + E + 6 – => 1 + 2 - E + 6 – => 1 + 2 - 3 + 6 E 1 + E E 2 - E 3 + 6
  • 18. Ambiguïté • Grammaires qui produisent plus d'un arbre du parse E -> E sign E | -E | numero
  • 19. Exemple de Ambiguïté • Grammaires qui produisent plus d'un arbre du parse if -> IF expression statements | IF expression statements ELSE statements
  • 20. Exemple de Ambiguïté if (a == 0) console.log ('zero'); else console.log ('not zero');
  • 21. Exemple de Ambiguïté if (a == 0) if (e == 0) console.log ('zero'); else console.log ('not zero');
  • 22. Exemple de Ambiguïté if (a == 0) if (e == 0) console.log ('zero'); else console.log ('not zero');
  • 23. Exercises • Grammaire de parenthèses • Expression avec multiplication et division • Expression avec parenthèses • Vecteur • Déclaration de variable • Déclaration de fonction
  • 25. Frontent Source Lexer Parser Semantic AST Tokens Parse Tree Unexpected token … Expected … Object has no function … Jison
  • 27. Fichiers Jison • Lexer – fichier.l • Parser – fichier.y
  • 28. Letter [A-Za-z] WS s+ %% "FOR" { return ‘FOR'; } "IF" { return ‘IF'; } "+" { return ‘PLUS’; } "-" { return ‘MINUS’; } {Letter}+ { print (yytext); return 'ID'; } {WS}+ { /* whitespace separates tokens */ } %% function print (text) { console.log ('token '+text); } Fichier.l (lex ou flex)
  • 29. Règles Code Utilisateur Options Fichier.y (yacc ou bison) %token FOR ID GOTO PLUS MINUS %start Lines %left PLUS MINUS %{ function rule (name, elements) {...} function token (type, value) {...} %} %% Lines: Statement NewLine Lines { $$ = [$Statement, $Lines]; } | Statement NewLine { $$ = $Statement; }; Statement: | FOR ID '=' Expression TO Expression STEP Integer {...} | GOTO Expression {...} | IF Expression THEN Statement {...} | RETURN {...}; Expression: Expression PLUS Expression {...} | Expression MINUS Expression {...} | Expression MULTIPLY Expression {...} | Expression DIVIDE Expression {...};
  • 30. Options %token FOR ID GOTO PLUS MINUS %start Lines %left PLUS MINUS %{ function rule (name, elements) {...} function token (type, value) {...} %} %% Lines: Statement NewLine Lines { $$ = [$Statement, $Lines]; } | Statement NewLine { $$ = $Statement; }; Statement: | FOR ID '=' Expression TO Expression STEP Integer {...} | GOTO Expression {...} | IF Expression THEN Statement {...} | RETURN {...}; Expression: Expression PLUS Expression {...} | Expression MINUS Expression {...} | Expression MULTIPLY Expression {...} | Expression DIVIDE Expression {...}; Règles Code Utilisateur Options
  • 31. Code Utilisateur %token FOR ID GOTO PLUS MINUS %start Lines %left PLUS MINUS %{ function rule (name, elements) {...} function token (type, value) {...} %} %% Lines: Statement NewLine Lines { $$ = [$Statement, $Lines]; } | Statement NewLine { $$ = $Statement; }; Statement: | FOR ID '=' Expression TO Expression STEP Integer {...} | GOTO Expression {...} | IF Expression THEN Statement {...} | RETURN {...}; Expression: Expression PLUS Expression {...} | Expression MINUS Expression {...} | Expression MULTIPLY Expression {...} | Expression DIVIDE Expression {...}; Options Règles Code Utilisateur Declarations des fonctions et variables
  • 32. Règles %token FOR ID GOTO PLUS MINUS %start Lines %left PLUS MINUS %{ function rule (name, elements) {...} function token (type, value) {...} %} %% Lines: Statement NewLine Lines { $$ = [$Statement, $Lines]; } | Statement NewLine { $$ = $Statement; }; Statement: | FOR ID '=' Expression TO Expression STEP Integer {...} | GOTO Expression {...} | IF Expression THEN Statement {...} | RETURN {...}; Expression: Expression PLUS Expression {...} | Expression MINUS Expression {...} | Expression MULTIPLY Expression {...} | Expression DIVIDE Expression {...}; Code Utilisateur Options Règles règle: production de grammaire { Actions }
  • 33. Règles Code Utilisateur Options Fichier.y %token FOR ID GOTO PLUS MINUS %start Lines %left PLUS MINUS %{ function rule (name, elements) {...} function token (type, value) {...} %} %% Lines: Statement NewLine Lines { $$ = [$Statement, $Lines]; } | Statement NewLine { $$ = $Statement; }; Statement: | FOR ID '=' Expression TO Expression STEP Integer {...} | GOTO Expression {...} | IF Expression THEN Statement {...} | RETURN {...}; Expression: Expression PLUS Expression {...} | Expression MINUS Expression {...} | Expression MULTIPLY Expression {...} | Expression DIVIDE Expression {...};
  • 34. Sujets • Grammaires indépendantes du contexte • L'arbre du parse • Ambiguïté • Jison