chapitre 5 grammaires non contextuelles et arbres syntaxiques
TRANSCRIPT
Chapitre 5Grammaires non contextuelles
et arbres syntaxiques
Jean Privat
Universite du Quebec a Montreal
INF5000 — Theorie et construction des compilateursAutomne 2011
Jean Privat (UQAM) 05—Grammaires et arbres syntaxiques INF5000 — Automne 2011 1 / 1
Analyse syntaxique
Analyseur syntaxique
Donnee : une sequence finie de jetons
Resultat : une structure syntaxique (un arbre)
Generateur d’analyseur syntaxique
Donnee : une description de syntaxe (une grammaire)
Resultat : le code de l’analyseur syntaxique correspondant
Pour l’instant, c’est magique
SableCC4 est aussi un generateur d’analyseur syntaxique
Algorithmes pour plus tard(spoiler : on y parle d’automates)
Jean Privat (UQAM) 05—Grammaires et arbres syntaxiques INF5000 — Automne 2011 2 / 1
Grammaire
Langages
Decrire des langages par leur structure syntaxique
Representation humaine
Exemple
Une expression est la somme de deux expressions, ou le produitde deux expressions, ou un nombre
Questions
La chaıne appartient-elle au langage ?
Si oui, quelle est la structure (l’arbre) syntaxique ?
Jean Privat (UQAM) 05—Grammaires et arbres syntaxiques INF5000 — Automne 2011 3 / 1
Grammaire non contextuelle
Jeton (terminal)
Element de l’alphabet du langage
Seul le type du jeton est considere et non le texte
Distingues en bleu dans la suite
Production (non-terminal)
Variable designant un ensemble d’alternatives
Une production speciale, celle de depart (racine)
Alternative
Une sequence de jetons et de productions
Jean Privat (UQAM) 05—Grammaires et arbres syntaxiques INF5000 — Automne 2011 4 / 1
Le langage des formes
Grammar f o r m e s :Lexer
nombre = ( ’ 0 ’ . . ’ 9 ’ )+;Token nombre ;Ignored ’ ’ ;
Parserforme = { c e r c l e :} ’ c e n t r e ’ p o i n t ’ r a y o n ’ l o n g |
{ segment :} p o i n t ’−− ’ p o i n t ;p o i n t = ’ ( ’ l o n g ’ , ’ l o n g ’ ) ’ ;l o n g = nombre u n i t e ;u n i t e = ’cm ’ | ’mm’ | ’ pt ’ | ’ px ’ ;
Jean Privat (UQAM) 05—Grammaires et arbres syntaxiques INF5000 — Automne 2011 5 / 1
Le langage des formes
Exercice : Trouver l’arbre syntaxique
centre (5pt, 1cm) rayon 10 px
centre (
forme:cercle
nombre(5)
point
pt
long
,
unite:pt
nombre(1)
cm
long
)
unite:cm
rayonnombre(10)
long
px
unite:px
Jean Privat (UQAM) 05—Grammaires et arbres syntaxiques INF5000 — Automne 2011 6 / 1
Le langage des formes
Exercice : Trouver l’arbre syntaxique
centre (5pt, 1cm) rayon 10 px
centre (
forme:cercle
nombre(5)
point
pt
long
,
unite:pt
nombre(1)
cm
long
)
unite:cm
rayonnombre(10)
long
px
unite:px
Jean Privat (UQAM) 05—Grammaires et arbres syntaxiques INF5000 — Automne 2011 6 / 1
Le langage des listes
l i s t = {many :} i d l i s t |{one :} i d ;
Exercice : Trouver l’arbre syntaxique
id id id
id id
list:many
id
list:many
list:one
Jean Privat (UQAM) 05—Grammaires et arbres syntaxiques INF5000 — Automne 2011 7 / 1
Le langage des listes
l i s t = {many :} i d l i s t |{one :} i d ;
Exercice : Trouver l’arbre syntaxique
id id id
id id
list:many
id
list:many
list:one
Jean Privat (UQAM) 05—Grammaires et arbres syntaxiques INF5000 — Automne 2011 7 / 1
Le langage des parentheses
par = { i t em :} ’ ( ’ par ’ ) ’ |{empty :} ’ ( ’ ’ ) ’ ;
Exercice : Trouver l’arbre syntaxique
((()))
( (
par:item
(
par:item
)
par:empty
) )
Jean Privat (UQAM) 05—Grammaires et arbres syntaxiques INF5000 — Automne 2011 8 / 1
Le langage des parentheses
par = { i t em :} ’ ( ’ par ’ ) ’ |{empty :} ’ ( ’ ’ ) ’ ;
Exercice : Trouver l’arbre syntaxique
((()))
( (
par:item
(
par:item
)
par:empty
) )
Jean Privat (UQAM) 05—Grammaires et arbres syntaxiques INF5000 — Automne 2011 8 / 1
Grammaires vs. expressions regulieres, entheorie
Langage
Expressions regulieres (et automates) ⇒ langage regulier
Grammaires non contextuelles ⇒ langage non contextuel
Qui est le plus fort ?
Peut-on definir tout langage regulier avec une grammaire noncontextuelle ?
→ oui
Peut-on definir tout langage non contextuel avec une expressionreguliere ?
→ non
⇒ Les langages non contextuels incluent les langages reguliers
Jean Privat (UQAM) 05—Grammaires et arbres syntaxiques INF5000 — Automne 2011 9 / 1
Grammaires vs. expressions regulieres, entheorie
Langage
Expressions regulieres (et automates) ⇒ langage regulier
Grammaires non contextuelles ⇒ langage non contextuel
Qui est le plus fort ?
Peut-on definir tout langage regulier avec une grammaire noncontextuelle ? → oui
Peut-on definir tout langage non contextuel avec une expressionreguliere ? → non
⇒ Les langages non contextuels incluent les langages reguliers
Jean Privat (UQAM) 05—Grammaires et arbres syntaxiques INF5000 — Automne 2011 9 / 1
Grammaires vs. expressions regulieres, enpratique
Les expressions regulieres sont suffisantes pour l’analyselexicale
Recherche de sous-chaınes
Sequences de jetons au fur et a mesure
Les grammaires sont necessaires pour l’analyse syntaxique
Fabrication d’arbres syntaxiques
Un seul arbre complet d’un coup
Jean Privat (UQAM) 05—Grammaires et arbres syntaxiques INF5000 — Automne 2011 10 / 1
Le langage Lisp
i t em = { par :} ’ ( ’ l i s t ’ ) ’ |{ n i l :} ’ ( ’ ’ ) ’ |{ i d :} i d ;
l i s t = {many :} i t em l i s t |{one :} i t em ;
Exercice : Trouver l’arbre syntaxique
(id(id id)(id id(id))())
Jean Privat (UQAM) 05—Grammaires et arbres syntaxiques INF5000 — Automne 2011 11 / 1
Le langage Lisp
( id
item:par
(
item:id
id
item:par
id
item:id
)
item:id
( id
item:par
id
item:id
(
item:id
id
item:par
)
item:id
) ( )
item:nil
)
list:one
list:many
list:many
list:one
list:one
list:many
list:many
list:many
list:one
list:many
Jean Privat (UQAM) 05—Grammaires et arbres syntaxiques INF5000 — Automne 2011 12 / 1
Le langage des expressions arithmetiques
exp = {add :} exp ’+ ’ exp |{min :} exp ’− ’ exp |{mul :} exp ’∗ ’ exp |{ i n t :} i n t |{ par :} ’ ( ’ exp ’ ) ’ ;
Exercice : Trouver l’arbre syntaxique
5 + 4 * 2
5 - 4 - 2
5 + 4 + 2
Jean Privat (UQAM) 05—Grammaires et arbres syntaxiques INF5000 — Automne 2011 13 / 1
Ambiguıte
Grammaire ambigue
Plusieurs arbres syntaxiques pour une meme phrase
Exemple
5 + 4 * 2
int(5)
+
exp:int
int(4)
exp:add
*
exp:int
int(2)
exp:mul
exp:int
int(5)
+
exp:int
int(4)
exp:add
*
exp:int
int(2)
exp:mul
exp:int
Jean Privat (UQAM) 05—Grammaires et arbres syntaxiques INF5000 — Automne 2011 14 / 1
Ambiguıte
Probleme d’arbre
La question n’est pas sur l’appartenance au langage
Mais sur obtenir un arbre unique
Detection d’ambiguıte
Probleme non decidable (mais on se debrouille)
Solutions
Recrire la grammaire
Priorites explicites (grammaire augmentee)
Changer le langage
Jean Privat (UQAM) 05—Grammaires et arbres syntaxiques INF5000 — Automne 2011 15 / 1
Ambiguıte : Recrire
exp = {add :} exp ’+ ’ f a c t o r |{min :} exp ’− ’ f a c t o r |{ f a c t o r :} f a c t o r ;
f a c t o r = {mul :} f a c t o r ’∗ ’ term |{ term :} term ;
term = { i n t :} i n t |{ par :} ’ ( ’ exp ’ ) ’ ;
Exercice : Trouver l’arbre syntaxique
5 + 4 * 2
(5 + 4) * 2
5 + (4 * 2)
Jean Privat (UQAM) 05—Grammaires et arbres syntaxiques INF5000 — Automne 2011 16 / 1
Ambiguıte : Priorites explicites
exp = {add :} exp ’+ ’ exp |{min :} exp ’− ’ exp |{mul :} exp ’∗ ’ exp |{ i n t :} i n t |{ par :} ’ ( ’ exp ’ ) ’ ;
PrecedenceLeft mul ;Left add , min ;
Attention
Priorites explicites ne marchent que pour les cas simples
Jean Privat (UQAM) 05—Grammaires et arbres syntaxiques INF5000 — Automne 2011 17 / 1
Exercice
Question : Concevoir les grammaires
Soit l’alphabet { ’0’, ’1’ }Langage ou chaque ’1’ est forcement suivi d’un ’0’Exemples : 001001010 OK ; 1101 pas OK
S = ’0’ S | ’1’ ’0’ S | ;
Langage des palindromesExemples : 011010110 OK ; 1101 pas OK
S = ’0’ S ’0’ | ’1’ S ’1’ | ’1’ | ’0’ | ;
Jean Privat (UQAM) 05—Grammaires et arbres syntaxiques INF5000 — Automne 2011 18 / 1
Exercice
Question : Concevoir les grammaires
Soit l’alphabet { ’0’, ’1’ }Langage ou chaque ’1’ est forcement suivi d’un ’0’Exemples : 001001010 OK ; 1101 pas OKS = ’0’ S | ’1’ ’0’ S | ;
Langage des palindromesExemples : 011010110 OK ; 1101 pas OKS = ’0’ S ’0’ | ’1’ S ’1’ | ’1’ | ’0’ | ;
Jean Privat (UQAM) 05—Grammaires et arbres syntaxiques INF5000 — Automne 2011 18 / 1