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

Générateurs de compilateur Discussion :

rédiger un parser : méthodologie


Sujet :

Générateurs de compilateur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2010
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2010
    Messages : 80
    Par défaut rédiger un parser : méthodologie
    Bonjour,

    je souhaite rédiger un parser simple, et je voudrais avoir les retours de gens qui ont l'expérience de ce genre de chose.

    Plutôt qu'un tuto sur flex/bison, j'aimerais savoir quel est le point de départ de la réflexion de qqn qui doit écrire un parser.

    J'ai l'impression que flex/bison sont surtout adaptés à la rédaction de compilos qui produisent de l'assembleur. Peut être que je me trompe...
    Peut être qu'une lecture ligne à ligne avec des strings et des tas de if va suffire? Peut être pas...

    Enfin merci de me donner un point de vue assez général sur le sujet.

    Régis




    Pour le contexte :
    Le mien doit prendre un langage à typage dynamique (scilab) à la syntaxe assez simple, et fournir du code c++ en sortie.
    Je dispose d'une librairie qui me fournit les types (forts) vector / matrix ... qui sont les types de base de scilab.

    Exemple :

    Code Scilab :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    N=1000;
    x=ones(N) ;
    y=ones(N) ;
    res = x'*y ; // produit scalaire
    doit donner :

    Code cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #include "myLib.h"
     
    int main ()
    {
        int N = 1000 ;
        myLib::vector<float> x(N, 1) ;
        myLib::vector<float> y(N, 1) ;
        float res = x*y ;
        return 0 ;
    }

  2. #2
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par défaut
    flex/bison sont très générique et permettent de réaliser n'importe quel scaner/parseurs, mais par contre le code qu'ils génère est une horreur sans nom. Coco/R produit un code beaucoup plus lisible, et en C++, ce qui n'est pas la moindre de ses qualités.

    La méthodologie est la suivante :

    1) créer sa grammaire : c'est la première chose à faire, et ce n'est pas le plus facile. Il y a des tas de cas à gérer, et il faut faire en sorte que la grammaire soit utilisable. En fonction du système choisi, les constructions à utiliser peuvent être limitées (grammaires LL(k) contre grammaires LR(k), etc).

    2) transposer sa grammaire dans l'outil : là, la simplicité d'utilisation est primordiale. Coco/R (décidément, j'en fait une grosse publicité) a un syntaxe très simple et très puissante, bien qu'ils se limites aux grammaires LL(1) (LL(k) grâce à son système de résolution de conflits). Dans un premier temps, on va faire le minimum vital pour vérifier que le parseur généré est capable de comprendre les fichiers qu'on va lui donner en entrée. Attention toutefois : le minimum vital en question peut nécessiter la définition d'actions sémantiques, notamment si on doit vérifier au moment de la compilation (i.e. la transformation d'un fichier en un autre) que les identificateurs utilisés existent, auquel cas il faudra prévoir une table des symboles.

    3) une fois qu'on a vérifié que tous nos programmes en entrée fonctionnait, on étend le parseur avec des règles sémantiques qui permettent de produire le code (dans le cas d'un compilateur qui a pour but de générer du code objet, que celui-ci s'exécute ensuite dans une VM ou non ; il y a des chances qu'on passe entre temps par un AST (abstract syntax tree) dont les buts et utilisations sont multiples) où qui exécute certaines actions (dans le cas d'un interpréteur).
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  3. #3
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2010
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2010
    Messages : 80
    Par défaut
    Ok merci beaucoup emmanuel !

    Je vais donc tranquillement me mettre au boulot

    A bientôt.

    Régis

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JAXP] com.sun.xml.parser.ValidatingParser
    Par yolepro dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 05/11/2008, 15h36
  2. [Servlet] parser la requete
    Par jaimepasteevy dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 15/10/2003, 16h43
  3. Parser XML
    Par miloux32 dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 18/07/2003, 03h17
  4. Réponses: 11
    Dernier message: 11/07/2003, 16h47
  5. [langage] Continuer a parser une ligne
    Par D[r]eadLock dans le forum Langage
    Réponses: 5
    Dernier message: 30/09/2002, 18h49

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