M1

Introduction

Traduction

            texte source -> text objet (binaire translatable) -> texte machine
                         ^                                    ^
                         |                                    |
                     Traducteur                           Edition des
                                                             liens

Définitions

Analyse

La valeur d'un nombre est représentée par un quadruplet (M, s, x, n).

Autres notions

Supprimer la récursivité à droite ou à gauche consiste à trouver le langage généré et trouver une grammaire équivalente qui n'est pas récursive à droite ou à gauche.

Retour arrière : défaire des morceaux de l'abre et les reconstruire.

Méthodes d'analyse

Ascendante : dérivation plus à droite descendante : dérivation la plus à gauche

Analyse descendante

Fonction d'analyse

fonction analyse(Notion : N) : booléen
  var : posloc, // Indice dans tab source
        trouve, // Booléen
        R,      // La règle (alternant) courant
        E;      // Le premier élément

début
  posloc <- possource; // Variable globale
  R <- premiere regle;
  trouve <- faux;

  tant que non trouve et R != Vide faire
    si Essai(R)
      trouve <- vrai;
    sinon
      R <- suivant(R)
    fin
  fin

  retourner trouve
fin

Fonction d'essai

fonction Essai(Règle R) : booléen
début
  E <- premiere élément de R
  OK <- vrai

  tant que OK et E != Vide faire
    si E est 1 notion non terminale alors
      si analyse(E) alors
        E <- suivant(E)
      sinon
        OK <- faux
      fin
    sinon si (E = source[possource])
      possource <- possource + 1;
      E <- suivant(E);
    fin
  fin

  retourner OK
fin

Programme principal

programme principal
début
  possource <- début du texte source;

  si analyse(Axiome)
    écrire("Le mot est reconnu")
  sinon
    écrire("Le mot n'est pas reconnu");
  fin
fin

Ces algorithmes n'acceptent que des grammaires récursives à gauche sous peine d'appels récursifs infinis.

Il faut une grammaire:

Transformer une expression régulière en grammaire régulière

Pour chaque règle r, supprimer les méta-symboles qui se trouvent dans r puis :

  1. Si r est de la forme r1r2 alors remplacer la règle A -> r par

    A -> r1B
    B -> r2
    
  2. Si r est sous la forme r1*r2 alors la remplacer la règle A -> r par

    A -> r1B
    A -> r2
    B -> r1B
    B -> r2
    
  3. Supprimer les parenthèses par la distribution

    a(b|c) -> ab | ac
    (b|c)a -> ba | ca
    

Analyse LL(1)

Une grammaire G est LL(1) si toutes ses règles sont LL(1)

Calcul de premier

Premier L1 ⊕ L2 =

Exemple :

L1 ⊕ L2 = {x, y}
L3 ⊕ L2 = {x, y, a}

Calcul de suivant

  1. F0(A) = $ si A = S, ∅ sinon

  2. Pour toutes les règles de la forme B -> ... A α avec α != ε

    F1(A) = F0(A) ∪ (PREMIER(α) ∩ VT)

  3. Pour toutes les règles de la forme B -> ... A α avec α = ε ou &espilon; ∈ PREMIER(α)

    i <- 2;
    
    répéter
      Fi(A) = Fi-1(A) U Fi-1(B)
    jusqu'à Fi(A) = Fi-1(A)
    
    suivant(A) = Fi(A)
    

Table d'analyse

        |     Vt       | $ |
       -+--------------+---+
        |              |   |
    Vn  |              |   |
        |              |   |
       -|--------------+---|
        |              |   |
    Vt  |              |   |
        |              |   |
       -|--------------+   |
     $  |                  |
       -+------------------+

On construit la table et ensuite, on réalise l'analyse avec un triplet de piles initialisé à :

< chaîne d'entrée $, axiome $, ε >

Analyse SRL(1)

Pour trouver les articles, par exemple, avec la règle E -> E + T, on a :

E -> . E + T
E -> E . + T
E -> E + . T
E -> E + T .

La fermeture consiste à rajouter des articles à 1 état :

Pour une règle A -> α . B β, pout toutes les règles B -> γ, rajouter les articles B -> . γ

Pour construire les états