chapitre 5 grammaires non contextuelles et arbres syntaxiques

Post on 21-Jun-2022

17 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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

top related