IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Autres langages Discussion :

Analyseur lexical comme JFlex


Sujet :

Autres langages

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2012
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 21
    Points : 12
    Points
    12
    Par défaut Analyseur lexical comme JFlex
    Bonjour,

    je suis en train de créer un programme qui reçoit en entrée un fichier contenant une grammaire EBNF et qui va nous donner en sortie la procédure correspondante.

    Par exemple, on a la grammaire suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    identificateur = lettre {lettre|chiffre}
    Je ne sais pas comment rendre cette grammaire en une procédure ou méthode écrite en Java ou même une classe ??

    Sachant que ça se passe de manière dynamique, c'est-à-dire que quelle que soit la grammaire en entrée, il va nous donner la classe correspondante.

    Merci

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Août 2008
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 238
    Points : 620
    Points
    620
    Par défaut
    Salut,

    ce dont tu parles, c'est l'essence même de l'analyse lexicale, celle qui est modélisable par automates à états finis.

    D'une part, au préalable, si j'ai bien compris, tu as besoin de définir une syntaxe de définition de grammaires pour prendre en compte les grammaires qui seront soumises en paramètre (ce que tu désignes par le terme dynamique). Après tu utilises ton générateur d'analyseur syntaxique qui te plait le plus en Java par exemple: Bison, BYACC, JavaCC, ANTLR ou Xtext.

    Une fois cette analyseur de grammaire, fait, tu obtiendras une représentation informatique des grammaires passées en paramètre. On l'appelle la syntaxe abstraite.

    De cette structure de données, tu pourras en déduire facilement un automate à états finis, mais potentiellement non déterministe.

    Il est non déterministe si pour l'un de ses états au moins, il existe deux transitions sortantes vers deux états suivants différents mais qui ont une étiquette identique. Les deux états suivants doivent alors être fusionnés pour obtenir l'automate déterministe.

    La génération de code à partir de cet automate déterministe est alors simple :

    Une procédure par état, dans chaque procédure, un switch avec chaque entrée correspondant à l'étiquette d'une transition possible depuis cet état suivi de l'appel à la procédure correspondant à l'état cible de la transition.

    Dans le cas que tu présentes, l'analyseur doit d'abord attendre une lettre puis une lettre ou un chiffre ou rien du tout.
    Donc : traduit litéralement en automate, cela donne ça (voir pièce jointe)


    [0] est l'état initial, [2], l'état final, synonyme d'acceptation de la chaine de caractères.

    Toute autre entrée que 'lettre' dans l'état 0 est une erreur, comme toute entrée autre que lettre, chiffre ou chaine vide est aussi une erreur.
    Images attachées Images attachées  

Discussions similaires

  1. Analyseur lexical comme JFlex
    Par other1234 dans le forum Général Java
    Réponses: 0
    Dernier message: 21/01/2013, 10h51
  2. Analyseur lexical en Pascal
    Par acacia dans le forum Langage
    Réponses: 5
    Dernier message: 29/11/2007, 15h43
  3. probléme dans l'analyseur lexical
    Par the sun dans le forum C#
    Réponses: 9
    Dernier message: 29/05/2007, 11h00
  4. Faire un analyseur lexical
    Par sylsau dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 29/03/2007, 12h41
  5. Analyseur lexical a 3 automates
    Par mehdouch dans le forum C
    Réponses: 2
    Dernier message: 29/03/2006, 11h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo