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

Framework .NET Discussion :

CodeDomProvider.Parse: pas implémenté ?!


Sujet :

Framework .NET

  1. #1
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut CodeDomProvider.Parse: pas implémenté ?!
    Salut,

    Je voulais développer un petit traducteur C# <=> VB (j'en ai marre d'écrire du code VB pour mettre des exemples dans les posts, je me rappelle jamais la syntaxe...), et je pensais utiliser les classes "magiques" de System.CodeDom... en regardant la doc, j'ai vu qu'un CodeDomProvider pouvait parser et compiler du code, ou en générer, donc je me suis dit, "cool, c'est facile !". Grave erreur, comme je m'en suis rendu compte par la suite...
    Je commence à faire mon petit programme, qui consiste à créer un CodeCompileUnit avec le provider du langage source et à générer du code à patir de ce CodeCompileUnit en utilisant le provider du langage cible. Vraiment pas long comme vous pouvez le voir:

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
        public partial class Form1 : Form
        {
            private CodeDomProvider cdpCS;
            private CodeDomProvider cdpVB;
     
            public Form1()
            {
                InitializeComponent();
                cdpCS = CodeDomProvider.CreateProvider("C#");
                cdpVB = CodeDomProvider.CreateProvider("VB");
            }
     
            private void btnVB2CS_Click(object sender, EventArgs e)
            {
                txtOutput.Text = Translate(txtInput.Text, cdpVB, cdpCS);
            }
     
            private string Translate(string source, CodeDomProvider cdpSource, CodeDomProvider cdpTarget)
            {
                StringBuilder output = new StringBuilder();
                CodeCompileUnit compileUnit = cdpSource.Parse(new StringReader(source));
                CodeGeneratorOptions options = new CodeGeneratorOptions();
                cdpTarget.GenerateCodeFromCompileUnit(compileUnit, new StringWriter(output), options);
                return output.ToString();
            }
     
            private void btnCS2VB_Click(object sender, EventArgs e)
            {
                txtOutput.Text = Translate(txtInput.Text, cdpCS, cdpVB);
            }
        }
    Je lance mon truc, et là, surprise : NotImplementedException sur l'appel à la méthode Parse
    Apparemment cette méthode n'est pas redéfinie dans CSharpCodeProvider et VBCodeProvider... Tout dans la doc semble indiquer qu'on peut faire ça, il n'est jamais mentionné que ce n'est pas implémenté...
    Donc voilà, j'ai un peu l'impression d'avoir perdu mon temps... au passage j'ai trouvé un article amusant sur le sujet (en anglais)

    Enfin bref, maintenant que j'ai commencé mon truc, j'aimerais bien le terminer... mais mes cours sur la compilation, lex, yacc, tout ça, c'est un peu loin dans ma tête, j'ai pas trop envie de me replonger là dedans...

    Est-ce qu'il existerait une autre manière de parser du code VB ou C#, genre une librairie tierce partie ?

    Toute idée constructive est la bienvenue

  2. #2
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Je voulais développer un petit traducteur C# <=> VB (j'en ai marre d'écrire du code VB pour mettre des exemples dans les posts, je me rappelle jamais la syntaxe...)
    Donc en fait, tu veux faire ça .... mais en mieux ?

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par smyley Voir le message
    Donc en fait, tu veux faire ça .... mais en mieux ?
    Tout à fait, je ne connaissais pas ça...
    Mais c'est quand même rageant, ce truc qui existe dans le framework mais ne marche pas ... ça aurait donné un moyen super simple de passer de n'importe quel langage .NET-compliant à n'importe quel autre.
    Enfin, de toutes façons je pense que ça n'a pas été implémenté pour des raisons politiques: MS ne doit pas avoir envie que n'importe qui puisse facilement créer des outils de développement qui viendraient concurrencer VS. Celà dit, on ne peut pas parser un code pour obtenir l'arbre syntaxique, mais on peut compiler... je devrais peut-être déjà m'estimer heureux

Discussions similaires

  1. [Plugin] je n'arrive pas à implémenter Scrolling Parallax
    Par vbaguet dans le forum jQuery
    Réponses: 0
    Dernier message: 25/06/2013, 15h30
  2. Les références entre bases de données ne sont pas implémentées
    Par mysianne dans le forum Développement Web en Java
    Réponses: 1
    Dernier message: 17/03/2013, 07h44
  3. Maven2 : xdoclet ne parse pas les fichiers
    Par wargre dans le forum Maven
    Réponses: 5
    Dernier message: 27/08/2007, 09h42
  4. je ne comprend pas un parse error
    Par bibi_64 dans le forum C
    Réponses: 3
    Dernier message: 21/09/2005, 14h00
  5. [JSTL] x:parse ne fonctionne pas
    Par edechaux dans le forum Taglibs
    Réponses: 2
    Dernier message: 22/04/2005, 14h21

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