Analyse - PowerPoint PPT Presentation

About This Presentation
Title:

Analyse

Description:

Analyse Syntactique (Compilers, Principles, Techniques and Tools, Aho, Sethi et Ullman, 1986) – PowerPoint PPT presentation

Number of Views:121
Avg rating:3.0/5.0
Slides: 38
Provided by: Same176
Category:

less

Transcript and Presenter's Notes

Title: Analyse


1
Analyse Syntactique
  • (Compilers, Principles, Techniques and Tools,
    Aho, Sethi et Ullman, 1986)

2
Compilateurs
  • Un compilateur est un programme qui lit un
    programme écrit dans une langue (la langue
    source) et produit un programme écrit dans une
    autre langue (la langue cible).
  • Un compilateur utilise plusieurs étapes. Chaque
    étape transforme le programme source en une autre
    représentation.
  • Programme source ?Analyseur lexical ? Analyseur
    Syntactique ?Analyseur Sémantique ? Générateur de
    Code Intermédiaire ? Optimiseur de Code ?
    Générateur de Code ? Programme objectif
  • Pour cette partie de cours, nous allons nous
    concentrer sur lAnalyseur Syntactique

3
Analyse Syntactique
  • Lanalyse syntactique est le processus qui
    détermine si une chaine de jetons peut être
    produite par une grammaire.
  • Il y a deux types principaux de méthodes d
    analyse syntactique ascendant (de bas en haut)
    et descendent (de haut en bas).
  • Pour lanalyse syntactique descendante, on
    commence à la racine et procède vers les noeuds
    terminaux.
  • Pour analyse syntactique ascendante, on commence
    aux noeuds terminaux et procède vers la racine.
  • Il est facile de construire des analyseurs
    descendant efficaces à la main.
  • LAnalyse syntactique ascendante est plus
    flexible et on peut lutiliser avec plus de
    classes de grammaires. Mais il est plus
    difficile de la développer. Par contre, il y a
    des outils disponible pour générer des parseurs
    directement, a partir de la grammaire.

4
Partie I Analyse Syntactique Descendante
  • Idées fondamentales de lAnalyse Syntactique
    Descendante
  • LAnalyse Syntactique Descendante prédictive
  • Grammaires recursives a gauche
  • Factorisation sur la gauche
  • Construire un Analyseur Syntactique
  • Grammaires LL(1)

5
Idées fondamentales de lAnalyse Syntactique
Descendante
  • Pour lAnalyse Syntactique Descendante, on essaye
    de trouver un dérivation a gauche pour la chaîne
    d'entrée.
  • Exemple
  • S ? cAd Trouvez un dérivation
  • A ? ab a pour w ? cad
  • S S Backtrack
    S
  • / \ ? / \ ?
    / \
  • c A d c A d
    c A d
  • / \
  • a b
    a

6
Analyseur Syntactique Prédictif Généralités
  • Dans la majorité des cas, si on écrit la
    grammaire très soigneusement, on peut éliminer la
    recursion de gauche et faire une factorisation
    a gauche de la grammaire qui en résulte. Ceci
    nous permet dobtenir une grammaire que l'on peut
    analyser syntactiquement avec un analyseur
    syntactique récursif descendent qui n'a pas
    besoin de backtracking.
  • Cette classe de compilateur sappelle un
    analyseur syntactique prédictif.

7
Grammaires Récursives a Gauche I
  • Une grammaire est récursive a gauche si il y a un
    noeud non terminal A et il y a une dérivation A ?
    Aa pour nimporte quelle chaîne a.
  • Les Analyseurs Syntactiques descendants peuvent
    entrer dans une boucle infinie en presence de
    règles récursives a gauche. Donc, on doit les
    éliminer.
  • On peut éliminer une règle récursive a gauche
    comme A ? A a ß si on peut la remplacer par
  • A ? ß R ou R est un nouveau
    noeud non terminal
  • R ? a R ? et ? est la
    chaîne vide.
  • La nouvelle grammaire est récursive a droite.

8
Grammaires Récursives a Gauche II
  • Si vous avez une récursion a gauche
    directecest-à-dire, si la récursion se produit
    a linterieure dune seule règleOn peut l
    éliminer de la manière suivante
  • Groupez les règles
  • A ? Aa1 Aam ß1 ß2 ßn
  • Assurez-vous quaucun des ßs commence par A
  • Remplacez les A-règles originales par
  • A ? ß1A ß2 A ßn A
  • A ? a1 A a2 A am A
  • Ce procédé n'éliminera pas la récursion a gauche
    indirecte de la sorte
  • A ? BaA
  • B ? Ab Il y a un autre procédé
    mais nous ne le discutons pas ici
  • La récursion a gauche directe ou indirecte est
    problématique pour tous les analyseurs
    descendents. Cependant, ce n'est pas un problème
    pour des algorithmes d'analyse ascendants.

9
Grammaires Récursives a Gauche III
  • Voici un exemple d'une grammaire avec récursion a
    gauche directe
  • E ? E T T
  • T ? T F F
  • F ? ( E ) id
  • Cette grammaire peut être réécrite comme la
    grammaire non récursive a gauche suivante
  • E ? T E E ? TE ?
  • T ? F T T ? F T ?
  • F ? (E) id

10
Factorisation a Gauche d'une Grammaire I
  • La récursion a gauche n'est pas le seul trait qui
    empêche l'analyse descendante.
  • Un autre est la question de savoir si l'analyseur
    peut toujours choisir le côté droit correct par
    seule analyse du jeton d'entrée suivant cest a
    dire, en utilisant seulement le premier jeton
    produit par le non terminal dextrême gauche dans
    la dérivation courante.
  • Pour s'assurer que c'est possible, nous avons
    besoin de factoriser a gauche la grammaire
    produite a l'étape précédente (qui nest plus
    récursive a gauche).

11
Gauche-Factorisation d'une Grammaire II
  • Voici le procédé utilisé pour factoriser une
    grammaire a gauche
  • Pour chacun des non terminaux A, trouvez le plus
    long préfixe a commun à deux ou à plus de ses
    alternatives.
  • Remplacez toutes les A-productions
  • A ? aß1 aß2 aßn ?
  • (ou ? représente toutes les alternatives qui ne
    commencent pas avec a)
  • par
  • A ? a A ?
  • A ? ß1 ß2 ßn

12
Gauche-Factorisation d'une Grammaire III
  • Voici un exemple d'une grammaire qui a besoin
    detre factorisee a gauche
  • S ? iEtS iEtSeS a
  • E ? b
  • ( i if t then et e else)
  • Apres la factorisation a gauche cette grammaire
    devient
  • S ? iEtSS a
  • S ? eS ?
  • E ? b

13
Analyseur Syntactique Prédictif Détails
  • Le problème principal pendant l'analyse
    prédictive est celui de déterminer la production
    à appliquer pour un non terminal.
  • Ceci est fait en employant une table d'analyse.
  • Une table d'analyse est un tableau bidimensionnel
    MA,a où A est un non terminal, et a est un
    terminal ou le symbole qui signifie fin de
    chaîne dentrée.
  • Les autres entrées dun Analyseur Syntactique
    Prédictif sont
  • La mémoire tampon dentrée, qui contient la
    chaîne à analyser suivie de .
  • La pile qui contient une sequence de symboles de
    grammaire avec, au depart, simplement S (la fin
    de la chaîne dentrée et le symbole de départ).

14
Analyseur Syntactique Prédictif Procédé Informel
  • LAnalyseur Syntactique Prédictif utilise X, le
    symbole sur le dessus de la pile, et a, le
    symbole dentrée suivant. Il utilise egalement M,
    la table d'analyse.
  • Si Xa ? arrêter et retourner succès
  • Si Xa? ? Enlever X de la pile et avancer le
    pointeur dentrée vers le prochain symbole
  • Si X est un non terminal ? consulter MX,a
  • Si lélément est un regle de production,
    remplacer X sur la pile avec le côté droit de la
    production
  • Si lélément est vide, arrêter et retourner
    echec

15
Analyseur Syntactique Prédictif Un Exemple
Pile Entrèe Sortie
E ididid
ET ididid E ? TE
ETF ididid T ? FT
ETid ididid F ? id
ET idid
E idid T ? ?
ET idid E ? TE
ET idid
ETF idid T ? FT
ETid idid F ? id
ET id
ETF id T ? FT
ETF id
ETid id F ? id
ET
E T ? ?
E ? ?
id ( )
E E?TE E?TE
E E?TE E?? E??
T T? FT T?FT
T T?? T?FT T?? T??
F F?id F?(E)
Table d'analyse Trace de
lAlgorithme ?
16
Construire la Table D'analyse I
First et Follow
  • First(a) est l'ensemble des terminaux qui sont a
    la tete de la chaîne a. Follow(A) est l'ensemble
    des terminaux a qui peuvent être tout de suite à
    la droite de A. First et Follow sont employés
    dans la construction de la table d'analyse.
  • Construire First
  • Si X est un terminal, alors First(X) est X
  • Si X ? ? est une production, alors ajoutez ? à
    First(X)
  • Si X est un non terminal et X ? Y1 Y2 Yk est
    une production, alors placez a dans First(X) si,
    pour quelque i, a est dans First(Yi) et ? est
    dans tous les First(Y1) First(Yi-1)

17
Construire le Table D'analyse II First et
Follow
  • Construire Follow
  • Mettre dans Follow(S), où S est le symbole de
    départ et est le symbole de fin de chaîne.
  • Si il y a une production A ? aBß, alors tout le
    contenu de First(ß) sauf ? est mis dans
    Follow(B).
  • Si il y a un production A ? aB ou une production
    A ? aBß et First(ß) contient ?, alors tout le
    contenu de Follow(A) est dans Follow(B)
  • Exemple E ? TE E
    ? TE ?
  • T ? FT
    T ? FT ?
  • F
    ? (E) id
  • First(E) First(T) First(F) (, id
  • First(E) , ? First(T) , ?
  • Follow(E) Follow(E) ),
  • Follow(F),,), Follow(T) Follow(T)
    ,),

18
Construire la Table D'analyse III
  • Algorithme pour construire une table d'analyse
    prédictive
  • Pour chaque A ? a de la grammaire, fait étapes 2
    et 3
  • Pout chaque terminal a dans First(a), ajouter A ?
    a à MA, a
  • Si ? est dans First(a), ajouter A ? a à MA, b
    pour chaque terminal b dans Follow(A). Si ? est
    dans First(a), ajouter A ? a à MA,b pour chaque
    terminal b dans Follow(A). Si ? est dans First(a)
    et est dans Follow(A), ajouter A ? a à MA, .
  • Chaque élément indéfini de M est une erreur.

19
LL(1) Grammaires
  • Une grammaire avec un table d'analyse qui n'a
    aucune entrée contenant plus dune définition
    s'appelle LL(1)
  • Aucune grammaire ambiguë ou récursive a gauche ne
    peut être LL(1).
  • Une grammaire G est LL(1) si et seulement si dans
    tous les cas ou A ? a ß sont deux productions
    distinctes de G, les conditions suivantes sont
    verifiees
  • Il ny a aucun terminal a pour lequel a ainsi que
    ß dérivent des chaînes commençant par a
  • a ou ß peut dériver la chaîne vide, mais les deux
    ne peuvent pas le faire simultanement.
  • Si ß peut (directement ou indirectement) dériver
    ?, alors a ne peut pas dériver de chaîne qui
    commence avec un terminal appartenant a Follow(A).

20
Partie II Analyseur Syntactique Ascendant
  • Il y a différentes approches à l'analyse
    ascendante . Une approche sappelle Shift-Reduce
    parsing. Cette approche peut, en outre, prendre
    des formes diverses.
  • LUne de ces méthode sappelle Operator-precedence
    parsing. Cependent, elle nest pas tres
    generale. Une autre methode LR-Parsing lest
    beaucoup plus.
  • Dans ce cours, nous nous concentrerons sur le
    LR-Parsing. LR-Parsing prend, lui-meme, trois
    formes Simple LR-Parsing (SLR) une version
    simple mais limitée le LR canonique, la version
    la plus puissante, mais la plus chère et LALR
    qui est intermédiaire en coût et puissance. Nous
    allons nous concentrer, ici, sur le SLR.

21
LR-Parsing Avantages
  • Le LR Parsing peut identifier n'importe quelle
    langue pour laquelle une grammaire libre de
    contexte peut être écrite.
  • Le LR parsing est la methode la plus générale de
    parsing. Cependant, elle est aussi efficace que
    toute autre approche Shift-Reduce.
  • La classe de grammaires qui peuvent être
    analysées parle LR Parsing contient la classe de
    grammaires qui peut être analysé par un analyseur
    prédictif et est plus vaste.
  • Le LR-Parsing peut détecter une erreur
    syntactique dès qu'il sera possible de le faire
    pendant un scan de gauche à droite de l'entrée.

22
LR-Parsing Inconvénient/Solutions
  • L'inconvénient principal du LR-Parsing est que,
    pour une grammaire typique de langage de
    programmation, sa construction à la main demande
    trop de travail.
  • Heureusement, des outils spécialisés pour
    construire des parseur LR automatiquement ont été
    conçus.
  • Avec de tels outils, un utilisateur peut écrire
    une grammaire libre de contexte et la passer dans
    un générateur de compilateur automatique afin de
    produire un parseur pour cette grammaire.
  • Un exemple d'un tel outil est Yacc Yet Another
    Compiler-Compiler"

23
Algorithmes de LR-Parsing Détails I
  • Un Parseur LR se compose d'une entrée, dune
    sortie, d'une pile, d'un programme pilote et
    d'une table d'analyse a deux parties action et
    goto.
  • Le programme pilote est le même pour tous les
    parseurs LR. Seule la table d'analyse change d'un
    parseur a lautre.
  • Le programme emploie la pile pour stocker une
    chaîne de la forme s0X1s1X2Xmsm, ou sm est le
    dessus de la pile. Les Sks sont des symboles
    détat et les Xis sont des symboles de grammaire
    . Ensemble, les symboles d'état et de grammaire
    déterminent les décisions des parseurs LR.

24
Algorithmes de LR-Parsing Détails II
  • La table d'analyse se compose de deux parties
    une fonction d'action du Parseur et une fonction
    goto.
  • Le programme de Parsing LR détermine sm, l'état
    sur le dessus de la pile et ai, l'entrée
    courante. Il consulte alors l'actionsm, ai ce
    qui peut prendre une des quatre valeurs
    suivantes
  • Shift
  • Reduce
  • Accept
  • Error

25
Algorithmes de LR-Parsing Détails III
  • Si lactionsm, ai Shift s, Décalez s, où s
    est un état et poussez ai et s sur le haut de la
    pile.
  • Si lactionsm, ai Reduce A ? ß, alors ai et
    sm sont remplaces par A, et, si s était l'état
    au-dessous de ai dans la pile , alors gotos, A
    est consulté et l'état qu'il stocke est poussé
    sur la pile.
  • Si lactionsm, ai Accept, alors lanalyse est
    accomplie.
  • Si actionsm, ai Error, alors l'analyseur a
    découvert une erreur.

26
Algorithmes de LR-Parsing Exemple La Grammaire
  1. E ? E T
  2. E ? T
  3. T ? T F
  4. T ? F
  5. F ? (E)
  6. F ? id

27
Algorithmes de LR-Parsing Exemple La Table
dAnalyse
State Action Action Action Action Action Action Goto Goto Goto
State id ( ) E T F
0 s5 s4 1 2 3
1 s6 Acc
2 r2 s7 r2 r2
3 r4 r4 r4 r4
4 s5 s4 8 2 3
5 r6 r6 r6 r6
6 s5 s4 9 3
7 s5 s4 10
8 s6 s11
9 r1 s7 R1 r1
10 r3 r3 r3 r3
11 r5 r5 r5 r5
28
Algorithmes de LR-Parsing Exemple
Trace du programme
Pile Entrée Action
0 id id id Shift
(2) 0 id 5 id id Reduce by F ? id
(3) 0 F 3 id id Reduce by T ? F
(4) 0 T 2 id id Shift
(5) 0 T 2 7 id id Shift
(6) 0 T 2 7 id 5 id Reduce by F ? id
(7) 0 T 2 7 F 10 id Reduce by T ? T F
(8) 0 T 2 id Reduce by E ?T
(9) 0 E 1 id Shift
(10) 0 E 1 6 id Shift
(11) 0 E 1 6 id 5 Reduce by F ? id
(12) 0 E 1 6 F 3 Reduce by T ? F
(13) 0 E 1 6 T 9 E ? E T
(14) 0 E 1 Accept
29
Analyse SLR I
  • Definition Un article LR(0) d'une grammaire G
    est une production de G avec un point à une
    position particuliere du côté droit.
  • Exemple A ? XYZ produit les quatre articles
    suivants
  • A ? .XYZ
  • A ? X.YZ
  • A ? XY.Z
  • A ? XYZ.
  • La production A ? ? produit un seul article , A ?
    .
  • Intuitivement, un article indique quel montant de
    la production nous avons vu à un point precis
    dans le processus d'analyse.

30
Analyse SLR II
  • Pour créer une table d'analyse de SLR, nous
    définissons trois nouveaux éléments
  • Une grammaire augmentée pour G, la grammaire
    initiale. Si S est le symbole de départ de G,
    nous ajoutons la production S ? .S . Le
    but de cette nouvelle production est d'indiquer à
    l'analyseur quand il doit cesser lanalyze et
    accepter l'entrée.
  • L'opération de fermeture (The closure operation)
  • la fonction goto

31
Analyse SLR II L'opération de fermeture
  • Si I est un ensemble d'articles pour une
    grammaire G, alors closure(I) est l'ensemble
    d'articles construits a partir de I par les deux
    règles suivantes
  • Au commencement, chaque article de I est ajouté a
    closure(I)
  • Si A ? a . B ß est dans closure(I) et B ? ? est
    une production, alors ajouter larticle B ? . ? à
    I, s'il n'est pas déjà present. Nous appliquerons
    cette règle jusqu'à ce quil ny ait plus de
    nouveaux articles a ajouter a closure(I).

32
Analyse SLR L'opération de fermeture Example
  • Grammaire Originale Grammaire augmentée

  • 0. E ? E
  • E ? E T 1. E ? E T
  • E ? T 2. E ? T
  • T ? T F 3. E ? T F
  • T ? F 4. T ? F
  • F ? (E) 5. F ? (E)
  • F ? id 6. F ? id

Si I E ? E alors Closure(I)

E ? .E, E ? .E T,
E ? .T, E ?
.TF,
T ? .F, F ? .(E)
F ? .id
33
Analyse SLR L'opération Goto
  • Goto(I,X), où I est un ensemble d'articles et X
    est un symbole de grammaire, est défini comme la
    fermeture de l'ensemble de tous les articles A ?
    aX.ß tels queA ? a.Xß est dans I.
  • Exemple Si I est l'ensemble de deux articles E
    ? E., E ? E.T, alors goto(I, ) se compose
    de
  • E ? E .T
  • T ? .T F
  • T ? .F
  • F ? .(E)
  • F ? .id

34
Analyse SLR Construction densembles d'articles
  • procedure articles(G)
  • C Closure(S ? .S)
  • Répétez
  • Pour chaque ensemble de points I en C et
    chaque symbole X de grammaire tels que
    goto(I,X) nest pas vide et pas en C, faites
  • ajoutez goto(I,X) à C
  • Jusqu'à quaucun nouvel ensemble d'articles
    ne peut être ajouté à C

35
Exemple La collection canonique LR(0) pour la
grammaire G
  • I0 E ? .E I4 F ? (.E)
    I7 T ? T .F
  • E ? .E T E ? .E T
    F ? .(E)
  • E ? .T E ? .T
    F ? .id
  • T ? .T F T ? .T F
    I8 F ? (E.)
  • T ? .F T ? .F
    E ? E.T
  • F ? .(E) F ? .(E)
    I9 E ? E T.
  • F ? .id F ? .id
    T ? T. F
  • I1 E ? E. I5 F ? id.
    I10 T ? TF.
  • E ? E.T I6 E ? E.T
    I11 F ? (E).
  • I2 E ? T. T ? .TF
  • T ? T. F T ? .F
  • I3 T ? F. F ? .(E)
  • F ? .id

36
Construction d'une Table d'analyse de SLR
  • Construire CI0, I1, In la collection
    d'ensembles de d articles LR(0) pour G
  • L'état i est construit a partir de Ii. Les
    actions d'analyse pour l'état i sont déterminées
    comme suit
  • Si A ? a.aß est dans Ii et goto(Ii,a) Ij,
    alors actioni,a devient shift j. Ici a doit
    être un terminal.
  • Si A ? a. est dans Ii, alors actioni, a
    devient réduce A ? a pour tout les a dans
    Follow(A) Ici A ne peut pas être S.
  • Si S ? S. est dans Ii, alors actioni,
    devient accept
  • Si des actions contradictoires sont produites par
    les règles ci-dessus, nous disons que la
    grammaire n'est pas SLR(1). L'algorithme alors ne
    produit pas danalyseur.

37
Construction d'une Table d'analyse de SLR (contd)
  • 3. Les transitions goto pour l'état i sont
    construites pour tous les nonterminaux A en
    utilisant la règle Si goto(Ii, A) Ij, alors
    gotoi, A j.
  • 4. Toutes les entrées non définies par les règles
    (2) et (3) deviennent des erreurs.
  • 5. L'état initial de l'analyseur est celui qui a
    ete construit a partir de l'ensemble d'articles
    contenant S ? S.
  • Voir l'exemple en classe
Write a Comment
User Comments (0)
About PowerShow.com