• Aucun résultat trouvé

Analyse de Données Structurées - Cours 4

N/A
N/A
Protected

Academic year: 2022

Partager "Analyse de Données Structurées - Cours 4"

Copied!
44
0
0

Texte intégral

(1)

Analyse de Données Structurées - Cours 4

Analyse de Données Structurées - Cours 4

Ralf Treinen

Université Paris Diderot UFR Informatique

Institut de Recherche en Informatique Fondamentale treinen@irif.fr

7 février 2017

c

Ralf Treinen 2015-2017

(2)

Analyse de Données Structurées - Cours 4 Analyse Syntaxique

Le rôle de l'analyse syntaxique

Représentation textuelle

Analyse lexicale

Flot de jetons (génération à la demande)

Analyse syntaxique

Arbre de syntaxe abstraite

Erreur

Erreur

(3)

Analyse de Données Structurées - Cours 4 Analyse Syntaxique

Objectif de l'analyse syntaxique

I Deux objectifs :

I Détecter des textes d'entrée qui ne sont pas correctement formés (et donner des indications utiles sur la nature de l'erreur).

I Si l'entrée est correcte, construire un arbre de syntaxe abstraite.

I Focalisons d'abord sur le premier objectif : distinguer des textes corrects des textes incorrects.

(4)

Analyse de Données Structurées - Cours 4 Analyse Syntaxique

Pourquoi deux étapes séparées ?

I On essaye de faire tant d'analyse que possible dans l'analyse lexicale.

I Raison : l'exécution d'un automate est très ecace (temps linéaire dans la longueur du texte d'entrée).

I Problème : l'expressivité des automates est limitée (voir les transparents suivants).

(5)

Analyse de Données Structurées - Cours 4 Langages non-reconnaissables

Les expressions arithmétiques

I Nous allons montrer :

L'ensemble des expressions arithmétiques

correctement parenthésées n'est pas reconnaissable.

I Pour le démontrer, nous allons nous servir

I du lemme d'itération

I des propriétés de clôture des langages reconnaissables

I Par contre, le langage est algébrique (décrit par une grammaire algébrique)

(6)

Analyse de Données Structurées - Cours 4 Langages non-reconnaissables

L'énoncé exacte

Dénition du langage E

E est le plus petit langage tel que

I L([0..9]+)⊆E (cas des constantes entières)

I L([a..z]+)⊆E (cas des noms de variables)

I si u,v ∈E alorsu+v ∈E et u*v ∈E

I si u∈E alors (u)∈E Théorème

E n'est pas reconnaissable.

(7)

Analyse de Données Structurées - Cours 4 Langages non-reconnaissables

Première partie de la démonstration

I Preuve par l'absurde

I Supposons que E est reconnaissable.

I Puisque les langages reconnaissables sont clos sous intersection :

E1 =E∩ L((∗[0..9] +)∗) est également reconnaissable.

I On a que

E1 ={(nw)n|n≥0,w ∈ L([0..9]+)}

I On sait que {(n)n|n ≥0} n'est pas reconnaissable (par le lemme d'itération).

(8)

Analyse de Données Structurées - Cours 4 Langages non-reconnaissables

Homomorphismes

Dénition

SoientΣ etΓdeux alphabets. Un homomorphisme h est une fonctionh: Σ→Γ.

Extension d'un homomorphisme

Sih: Σ→Γ est un homomorphisme, alors son extensionest h : Σ →Γ

h(a1. . .an) = h(a1). . .h(an) (on écrit parfois simplementh à la place deh)

(9)

Analyse de Données Structurées - Cours 4 Langages non-reconnaissables

Exemple d'un homomorphisme

I Σ ={(,)}

I Γ ={a, . . . ,z}

I h(() =left,h()) =right

I h((())) =leftleftrightright

I h() =

(10)

Analyse de Données Structurées - Cours 4 Langages non-reconnaissables

Pourquoi homomorphisme ?

I Pour tout alphabet Σ, on considèreΣ comme une structure algébrique avec une constante (mot vide) et une opération binaire ·(concaténation), appelée unmonoïde.

I Un homomorphisme h est un homomorphisme dans le sense de l'Algèbre :

h() =

h(v·w) = h(v)·h(w)

(11)

Analyse de Données Structurées - Cours 4 Langages non-reconnaissables

Langages reconnaissables et homomorphismes

Théorème

Les langages reconnaissables sont clos sous homomorphismes.

Démonstration

Soith: Σ→Γ un homomorphisme, etL⊆Σ rationnel.

Remplacez dans l'expression rationnelle pourLchaque lettre x∈Σ par le moth(x).

(12)

Analyse de Données Structurées - Cours 4 Langages non-reconnaissables

La deuxième partie de la démonstration

I on a obtenu (sous notre hypothèse) que

E1 ={(nw)n|n≥0,w ∈ L([0..9]∗)}

est reconnaissable.

I On dénit un homomorphisme h par

h(() = ( h()) = ) h(0) =. . .=h(9) =

I On obtient donc que h(E1) est aussi reconnaissable. Or, h(E1) ={(n)n|n≥0}

Contradiction !

(13)

Analyse de Données Structurées - Cours 4 Grammaires

Dénition des grammaires algébriques

Unegrammaire algébrique(où :grammaire hors contexte) est un tupleG = (V,Σ,S,P) où

I V est un ensemble ni de symboles, appelé l'alphabetdeG;

I Σ⊂V est appelé l'ensemble des terminauxdeG;

I S ∈V \Σ, appelé l'axiomedeG;

I P est un ensemble ni derègles de production de la forme A→u, où A∈V \Σ, et u∈V.

(14)

Analyse de Données Structurées - Cours 4 Grammaires

Exemple d'une grammaire algébrique

G1 = (V,Σ,S,P) où

I V ={0,1,+,*,E,I}

I Σ ={0,1,+,*}

I S =E

I P consiste en les règles suivantes : E → E+E E → E∗E

E → I

I → 0

I → 1

(15)

Analyse de Données Structurées - Cours 4 Grammaires

Dérivation en une étape

Notation

Étant donnée une grammaireG = (V,Σ,S,P), on note N=V −Σ, et on appele les éléments deN les non-terminaux deG.

Dénition

Soientu,v ∈V. On ditG permet de dériver v à partir deu en une étape, notéu→G v (ou abbrégé u→v), si

1. u =w1Aw2, où w1,w2 ∈V,A∈N; 2. A→w est une règle deP;

3. v =w1ww2.

(16)

Analyse de Données Structurées - Cours 4 Grammaires

Dérivation en plusieurs étapes

Dénition

Soit une grammaireG = (V,Σ,S,P), et u,v ∈V.

On ditG permet de dériver v à partir deu en plusieures étapes, notéu⇒G v (ou abbrégé u ⇒v), si il existe une suite nie w0,w1, . . . ,wn de mots deV telle que w0 =u,wiG wi+1 pour touti ∈[0,n−1], et wn=v.

Remarques

I n =0 est autorisé dans la dénition deu ⇒v (dans ce cas on a que u=v)

I u ⇒v s'il existe une séquence (éventuellement réduite à un seul élément)

u → · → · · · →v

(17)

Analyse de Données Structurées - Cours 4 Grammaires

Exemple : Dérivation de 1+0*1 dans G

1

Pour la grammaireG1 donnée au dessus on a les étapes de dérivation suivantes :

(Nous mettons enrouge le non-terminal qui est réécrit.) E → E+E

→ E+E*E

→ I+E*E

→ I+E*I

→ I+E*1

→ 1+E*1

→ 1+I*1

→ 1+0*1

(18)

Analyse de Données Structurées - Cours 4 Grammaires

Langage engendré

Dénition

SoitG = (V,Σ,S,P) une grammaire algébrique. Lelangage généré parG est

L(G) ={w ∈Σ |S ⇒w}

Un langage estalgébriques'il est généré par une grammaire algébrique.

Exemple

Pour la grammaireG1 on obtient que L(G1) est l'ensemble des expressions arithmétiques formées à l'aide des opérateurs+ et *, et des constantes0 et 1, et sans parenthèses.

(19)

Analyse de Données Structurées - Cours 4 Grammaires

Relation avec les langages régulières

I Tout langage reconnaissable est algébrique.

I Par contre, il y a des langages algébriques qui ne sont pas reconnaissables, par exemple l'ensemble des palindromes sur {0,1}:Gpalindromes = ({0,1,S},{0,1},S,P) où P consiste en

S → 0S0

S → 1S1

S → 0

S → 1

S →

(20)

Analyse de Données Structurées - Cours 4 Grammaires

Notation : alternatives

I Une grammaire peut avoir plusieurs règles avec le même côté gauche :

E → E+E

E → E*E

I Nous permettons dans la suite dans ce cas d'écrire une seule règle, avec plusieurs alternativessur le côté droite :

E → E+E|E*E

(21)

Analyse de Données Structurées - Cours 4 Grammaires

Grammaires réduites

SoitG = (V,Σ,S,P) une grammaire. A∈V −Σest dit productif si il existe un motu ∈Σ tel que A⇒u; accessible si il existe des motsu,v ∈V tel que S ⇒uAv;

utile s'il est productif et accessible.

Dénition

Une grammaire estréduite si tous ses non-terminaux sont utiles.

Normalement nous considérons dans ce cours que des grammaires réduites.

(22)

Analyse de Données Structurées - Cours 4 Grammaires

Dérivation gauche

Soit une grammaireG = (V,Σ,S,P).

Réécriture à gauche

Soientu,v ∈V.G permet de dériveru à partir dev en une étape à gauche, notéu→g v, si

1. u =w1Aw2, où w1∈Σ,A∈N etw2∈V; 2. N →w est une règle deP;

3. v =w1ww2. Dérivation gauche

Unedérivation gaucheest une suite niew0,w1, . . . ,wn de mots de V telle quewi

→wg i+1 pour tout i ∈[0,n−1].

(23)

Analyse de Données Structurées - Cours 4 Grammaires

Exemple : Dérivation gauche de 1+0*1 dans G

1

E →g E*E

g E+E*E

g I+E*E

g 1+E*E

g 1+I*E

g 1+0*E

g 1+0*I

g 1+0*1

(24)

Analyse de Données Structurées - Cours 4 Grammaires

Arbre de dérivation

Dénition

SoitG = (V,Σ,S,P) une grammaire. Un arbre de dérivation deG est un arbre tel que

I la racine est étiquetée par l'axiome S;

I tout n÷ud interne est étiqueté par un symbole de V −Σ;

I toute feuille est étiquetée par un symbole de Σ∪ {};

I si les ls pris de gauche à droite d'un n÷ud interne étiqueté par le non-terminal Asont étiquetés par les symboles respectifs α1, . . . , αn, alors (A→α1· · ·αn)∈P.

Dénition

Un arbre de dérivation dont le mot des feuilles estu est appelé arbre de dérivation deu.

(25)

Analyse de Données Structurées - Cours 4 Grammaires

Exemple : Un arbre de dérivation de 1+0*1 dans G

1

E E

E I 1

+ E

I 0

* E

I 1

(26)

Analyse de Données Structurées - Cours 4 Grammaires

De l'arbre de dérivation à la dérivation gauche

I Le premier élément de la dérivation gauche est l'axiome de la grammaire (qui est aussi l'étiquette de la racine de l'arbre).

I On fait un parcours préxe de l'arbre, en complétant la dérivation gauche.

I Aux ls d'un n÷ud interne correspond la réécriture du premier non-terminal dans un élément de la dérivation.

I (Voir l'exemple donné au tableau)

(27)

Analyse de Données Structurées - Cours 4 Grammaires

D'une dérivation gauche à l'arbre de dérivation

I La racine de l'arbre est étiquetée par l'axiome de la grammaire (qui est aussi le premier élément de la dérivation gauche).

I On parcourt la dérivation de gauche à droite, en complétant l'arbre.

I À la réécriture du premier non-terminal dans un mot

correspond l'extension de la feuille de l'arbre de dérivation en construction la plus gauche qui est étiquetée par un

non-terminal.

I (Voir l'exemple donné au tableau)

(28)

Analyse de Données Structurées - Cours 4 Grammaires

Arbres de dérivation et Dérivation gauches

I Équivalence entre dérivations gauches et arbres de dérivation :

I Pour chaque arbre de dérivation il y une unique dérivation gauche.

I Pour chaque dérivation gauche il y a un unique arbre de dérivation.

I Dans un premier temps, on peut imaginer l'arbre de dérivation comme résultat de l'analyse syntaxique. (On reviendra à la bonne dénition de la syntaxe abstraite.)

I Il nous faut donc que chaque mot du langage possède un arbre de dérivation unique.

(29)

Analyse de Données Structurées - Cours 4 Grammaires

Grammaires ambiguës

Dénition

Une grammaireG est non-ambiguë quand tout w ∈ L(G) a un seul arbre de dérivation.

Dénition équivalente

Une grammaireG est non-ambiguë quand toutw ∈ L(G)a une seule dérivation gauche.

Sur l'exempleG1

La grammaireG1 est ambiguë : le mot1+0*1 a deux arbres de dérivation diérents !

(30)

Analyse de Données Structurées - Cours 4 Grammaires

Deux arbres de dérivation de 1+0*1 dans G

1

E E

E I 1

+ E

I 0

* E

I 1

E E

I 1

+ E

E I 0

* E

I 1

(31)

Analyse de Données Structurées - Cours 4 Grammaires

Un autre exemple

I La grammaireG2 = ({i,v,+,*,(,),E},{i,v,+,*,(,)},E,P), où P est

E → i|v|(E+E)|(E*E)

I Cette grammaire décrit les expressions arithmétiques complètement paranthésées.

I Ici il y a un seul terminali pour les entiers, et un seul terminal v pour les noms des variables car en imagine qu'il s'agit des jetons issus d'une analyse lexicale.

(32)

Analyse de Données Structurées - Cours 4 Grammaires

G

2

est non-ambiguë

I Pour le démontrer nous avons besoin de deux petits lemmes.

I Utilité de ces lemmes : Imaginez qu'un mot w à deux dérivations gauches qui sont de la forme

E →(E+E)⇒w E →(E*E)⇒w

I Soit w1 le mot dérivé du E gauche de la première ligne, w2 le mot dérivé du E gauche de la deuxième ligne.

I Forcement, w1 6=w2. Donc, w1<prefw2 (ou l'inverse).

I Les lemmes nous permettent de démontrer que c'est impossible d'avoir w1,w2∈ L(G2)avecw1<prefw2.

(33)

Analyse de Données Structurées - Cours 4 Grammaires

Séparer L(G

2

) et ses propres préxes

Notation

I |w|( est le nombre de symboles ( dans le motw.

I |w|) est le nombre de symboles ) dans le motw. Lemme 1

Pour tousw ∈ L(G2) :|w|(=|w|). Démonstration

Par induction sur la longueur de la dérivation la plus courte dew (démonstration omise).

(34)

Analyse de Données Structurées - Cours 4 Grammaires

Séparer L(G

2

) et ses propres préxes

Lemme 2

Pour tousw ∈ L(G2) : pour tousv <prefw avecv 6=:

|v|(>|v|). Démonstration

Par induction sur la longueur de la dérivation la plus courte dew (démonstration omise).

(35)

Analyse de Données Structurées - Cours 4 Grammaires

G

2

est non-ambiguë

I Supposons par l'absurde que G2 est ambiguë.

I Soit w un mot de longueur minimale qui a deux dérivations gauches.

I Il n'est pas possible qu'une des deux commence sur E→i ou E→v.

I Donc, une commence sur E→(E◦E), et l'autre sur E→(EE), avec◦, ∈ {+,∗}.

I Donc :

w = (v1◦v2) w = (u1u2)

avec E⇒v1,v2,u1,u2, de longueurs plus petites quew. Chacun de ces mots a donc une seule dérivation gauche !

(36)

Analyse de Données Structurées - Cours 4 Grammaires

G

2

est non-ambiguë

I Soit v1 =u1, alors forcement◦=,v2 =u2, et les deux dérivations gauches sont les mêmes. Contradiction !

I Soit v1 <prefu1. On a doncv1 ∈ L(G2), et

v1<prefu1∈ L(G2) : Contradiction aux Lemmes 1 et 2 !

I Soit u1 <prefv1. On a doncu1∈ L(G2), et

u1<prefv1∈ L(G2) : Contradiction aux Lemmes 1 et 2 !

(37)

Analyse de Données Structurées - Cours 4

Notations pour la syntaxe des langages de programmation Forme de Backus-Naur

Forme de Backus-Naur

I Une notation très utilisée pour la documentation des langages de programmation est la notation BNF (Backus-Naur Form) qui est équivalente aux grammaires algébriques.

I Les non-terminaux sont écrit entre chevrons : hTi.

I La èche est remplacée par ::=

I Les alternatives pour le même non-terminal sont regroupées, et comme séparées par|

I Exemple :

<cond> ::= if "(" <condition> ")" "{" <code> "}"

(38)

Analyse de Données Structurées - Cours 4

Notations pour la syntaxe des langages de programmation Forme de Backus-Naur

Forme de Backus-Naur étendue

I EBNF : Extended Backus-Naur Form

I La forme étendue permet des constructions connues des expression rationnelles dans les côtés droites des règles :

I des choix séparés par|

I des groupes optionnels entre crochets [ et ]

I des groupes répétés un nombre quelconque de fois entre accolades { et }

I Exemple : <explist> ::= "(" <exp> {"," <exp>} ")"

I C'est encore équivalent aux grammaires algébriques.

(39)

Analyse de Données Structurées - Cours 4

Notations pour la syntaxe des langages de programmation Forme de Backus-Naur

De EBNF aux grammaires : [ ]

I Si la forme EBNF contient

<A> ::= . . . [e] . . .

I alors on peut le remplacer par

<A> ::= . . . <N> . . .

<N> ::= |e

où N est un nouveau symbole non-terminal.

(40)

Analyse de Données Structurées - Cours 4

Notations pour la syntaxe des langages de programmation Forme de Backus-Naur

De EBNF aux grammaires : { }

I Si la forme EBNF contient

<A> ::= . . . {e} . . .

I alors on peut le remplacer par

<A> ::= . . . <N> . . .

<N> ::= |e <N>

où N est un nouveau symbole non-terminal.

(41)

Analyse de Données Structurées - Cours 4

Notations pour la syntaxe des langages de programmation Diagrammes de syntaxe

Diagramme de syntaxe non récursif

unsigned-int :

digit unsigned-number :

unsigned-int . digit E

+

-

unsigned-int

Correspond à une séquence d'expressions rationnelles.

(42)

Analyse de Données Structurées - Cours 4

Notations pour la syntaxe des langages de programmation Diagrammes de syntaxe

Expressions rationnelles pour l'exemple

On suppose donnée une dénition de l'expression rationnelle digit.

unsigned-int = digit+

unsigned-number = unsigned-int [.digit+] [E[+|-]unsigned-int]

(43)

Analyse de Données Structurées - Cours 4

Notations pour la syntaxe des langages de programmation Diagrammes de syntaxe

Diagramme de syntaxe récursif

instr : (fragment seulement)

if expr then instr else instr

while expr do instr

begin instr end

; Correspond à une grammaire algébrique.

(44)

Analyse de Données Structurées - Cours 4

Notations pour la syntaxe des langages de programmation Diagrammes de syntaxe

Grammaire pour l'exemple

instr → whileexpr doinstr

| ifexpr theninstr N1

| beginN2 end

N1

| elseinstr N2 → instr

| instr; N2

Références

Documents relatifs

À l’aide de la calculatrice, donner un encadre- ment de cette solution à 0,01 près3. Donner l’équation de la tangente au point

(c) L’artisan réalise un bénéfice lorsque le prix de vente est supérieur au coût de fabriaction, donc lorsque la droite que l’on vient de tracer est au-dessus de la courbe de coût

• Le tatonnement : calculer plusieurs valeurs pour trouver petit à petit celles qui ont l’air de donner le meilleur résultat. • La dérivation : outil que l’on

[r]

[r]

Illustrer avec des images découpées, le texte de l'histoire utilisant un vocabulaire spatial Associer chaque image au texte correspondant à la direction surveillée. e place les

[r]

Elles se sont attachées il confronter le débit sanguin, la pression systolique maximale intra-ventriculaire gauche (PsVG) et la consommation myoeardique d'oxygène (Q 02 myoe) dans