chapitre 5 grammaires non contextuelles et arbres syntaxiques

23
Chapitre 5 Grammaires non contextuelles et arbres syntaxiques Jean Privat Universit´ e du Qu´ ebec ` a Montr´ eal INF5000 — Th´ eorie et construction des compilateurs Automne 2011 Jean Privat (UQAM) 05—Grammaires et arbres syntaxiques INF5000 — Automne 2011 1/1

Upload: others

Post on 21-Jun-2022

17 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Chapitre 5 Grammaires non contextuelles et arbres syntaxiques

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

Page 2: Chapitre 5 Grammaires non contextuelles et arbres syntaxiques

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

Page 3: Chapitre 5 Grammaires non contextuelles et arbres syntaxiques

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

Page 4: Chapitre 5 Grammaires non contextuelles et arbres syntaxiques

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

Page 5: Chapitre 5 Grammaires non contextuelles et arbres syntaxiques

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

Page 6: Chapitre 5 Grammaires non contextuelles et arbres syntaxiques

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

Page 7: Chapitre 5 Grammaires non contextuelles et arbres syntaxiques

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

Page 8: Chapitre 5 Grammaires non contextuelles et arbres syntaxiques

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

Page 9: Chapitre 5 Grammaires non contextuelles et arbres syntaxiques

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

Page 10: Chapitre 5 Grammaires non contextuelles et arbres syntaxiques

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

Page 11: Chapitre 5 Grammaires non contextuelles et arbres syntaxiques

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

Page 12: Chapitre 5 Grammaires non contextuelles et arbres syntaxiques

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

Page 13: Chapitre 5 Grammaires non contextuelles et arbres syntaxiques

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

Page 14: Chapitre 5 Grammaires non contextuelles et arbres syntaxiques

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

Page 15: Chapitre 5 Grammaires non contextuelles et arbres syntaxiques

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

Page 16: Chapitre 5 Grammaires non contextuelles et arbres syntaxiques

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

Page 17: Chapitre 5 Grammaires non contextuelles et arbres syntaxiques

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

Page 18: Chapitre 5 Grammaires non contextuelles et arbres syntaxiques

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

Page 19: Chapitre 5 Grammaires non contextuelles et arbres syntaxiques

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

Page 20: Chapitre 5 Grammaires non contextuelles et arbres syntaxiques

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

Page 21: Chapitre 5 Grammaires non contextuelles et arbres syntaxiques

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

Page 22: Chapitre 5 Grammaires non contextuelles et arbres syntaxiques

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

Page 23: Chapitre 5 Grammaires non contextuelles et arbres syntaxiques

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