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
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
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.
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).
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)
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.
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).
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∗)
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∗() =
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)
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).
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 !
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∗.
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
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.
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,wi →G 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
Analyse de Données Structurées - Cours 4 Grammaires
Exemple : Dérivation de 1+0*1 dans G
1Pour 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
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.
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 →
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
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.
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].
Analyse de Données Structurées - Cours 4 Grammaires
Exemple : Dérivation gauche de 1+0*1 dans G
1E →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
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.
Analyse de Données Structurées - Cours 4 Grammaires
Exemple : Un arbre de dérivation de 1+0*1 dans G
1E E
E I 1
+ E
I 0
* E
I 1
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)
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)
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.
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 !
Analyse de Données Structurées - Cours 4 Grammaires
Deux arbres de dérivation de 1+0*1 dans G
1E E
E I 1
+ E
I 0
* E
I 1
E E
I 1
+ E
E I 0
* E
I 1
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.
Analyse de Données Structurées - Cours 4 Grammaires
G
2est 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.
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).
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).
Analyse de Données Structurées - Cours 4 Grammaires
G
2est 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 !
Analyse de Données Structurées - Cours 4 Grammaires
G
2est 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 !
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> "}"
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.
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.
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.
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.
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]
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.
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