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

Windows Forms Discussion :

Traducteur d'un langage inventé en VB.NET


Sujet :

Windows Forms

  1. #1
    Membre régulier Avatar de Tornade8912
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

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

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Points : 74
    Points
    74
    Par défaut Traducteur d'un langage inventé en VB.NET
    Bonjour,
    Je suis en ce moment entrain de développer un langage de programmation. Celui-ci aura sa propre syntaxe. Ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #define<consoleapp>
                  class Exemple{        
                     Static Void Main{
                         string(Slt) = "Salut !!!"
                         Console.out.Println(Slt)
                     {
                 {
    Je voudrai donc que mon logiciel en vb soit capable de traduire ce code en vb ce qui donnerai ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
                 Module Exemple  
                     Sub Main()
                         Dim Slt As String = "Salut !!!"
                         Console.WriteLine(Slt)
                     End Sub
                 End Module
    Pour réaliser ceci faudrait-il créer une boucle qui capture chaque ligne, qui analyse la syntaxe pour enfin traduire en vb ?
    Je vous laisse le soin de m'éclaircir.
    Cordialement
    Tornade8912

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Points : 1 498
    Points
    1 498
    Par défaut
    Salut,

    C'est un sujet qui a déjà été évoqué de nombreuses fois. Si on oublie l’intérêt ou la pertinence du projet, la mise en place est tout de même assez difficile.

    soit, tu fais ton propre compilateur vers le IL comme un bogosse
    soit tu essaies de généré du code vbnet ou c# à partir de ce que tu as puis de le compiler.
    Pour cela tu peux soit utiliser codedom soit t4(mieux)
    Dans les deux cas, prépare toi à t'arracher la tête pour la gestion des if des boucles des variables mal déclarées et des lambda. Je te conseille d'ailleurs de parcourir chaque bloc plutôt que ligne à ligne

    => dans bloc j'entend un bloc par: if /sub/function/for etc

    Bonne chance et bon courage.

  3. #3
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Bonjour.

    L'approche simpliste que tu proposes n'a pas grand intérêt car elle ne permet pas de faire un langage très différent de VB. En règle générale le création d'un langage se découpe en trois étapes :

    * Reconnaissance : on identifie la syntaxe pour générer un arbre syntaxique abstrait (AST). Par exemple un objet IfNode avec des membres "Condition", "TrueBlock" et "FalseBlock". Des "parser generator" ou "compiler compiler" permettent d'automatiser cette étape en fournissant seulement une grammaire BNF.

    * Analyse : c'est l'étape qui, partant d'un arbre syntaxique représentant un appel de méthode va déterminer le type de chaque argument et la surcharge de la méthode la mieux adaptée. En gros on détermine tous les types, ceux des résultats des expressions, les classes déclarées, les méthodes appelées, etc. parfois on génère un arbre sémantique, parfois on modifie l'arbre syntaxique. C'est de loin l'étape la plus compliquée et la plus longue. Roslyn, le nouveau framework de MS, peut peut-être t'aider.

    * Génération : c'est la dernière étape, celle qui crée un code VB/IL/etc. C'est aussi la plus facile dans le cas où tu émets un code de haut niveau comme VB ou C#. Si tu émets du code IL alors elle est un peu plus difficile que la reconnaissance syntaxique, mais sans rien d'exceptionnel. Enfin la génération d'un code assembleur est encore plus difficile et devient alors à mon avis plus complexe que l'analyse.

  4. #4
    Membre régulier Avatar de Tornade8912
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

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

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Points : 74
    Points
    74
    Par défaut
    Avez-vous un document ou un site pour apprendre à créer son propre langage de programmation (en français d préférence) ?

  5. #5
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Si tu veux un bouquin sur le sujet, la référence est le dragon book. Cela dit, même si toutes les étapes sont couvertes il se concentre beaucoup sur le parsing avec un accent plutôt rétro à mon avis. Mais je ne connais pas d'autre bouquin.

  6. #6
    Membre régulier Avatar de Tornade8912
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

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

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Points : 74
    Points
    74
    Par défaut
    Ce livre m'a l'air plutôt intéressant mas n'existe t-il pas une ressource qui explique comment créer un langage interprété qui
    été normalement le mode de fonctionnalité pour ce langage ...
    Ce que je veut dire par là c'est que je veux que ce langage marche comme Java par exemple avec des exécutables .jar il y a donc
    normalement pas de compilateur les class sont juste chiffrée en ASCII par exemple et déchiffrée par l'interpréteur ou la machine virtuelle comme en Java ...

  7. #7
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Points : 1 498
    Points
    1 498
    Par défaut
    Si ce n'est que ça ton besoin, avec codedom tu peux compiler à la volée du code dotnet et l'interpreter.

  8. #8
    Membre régulier Avatar de Tornade8912
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

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

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Points : 74
    Points
    74
    Par défaut
    J'espère ne pas vous être trop embarrassant avec mes questions mais,
    Comment utilise-t-on Codedom ?
    Donnez-moi une ressource (un livre ou un site) car j'ai du mal à comprendre là ...

  9. #9
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Points : 1 498
    Points
    1 498

  10. #10
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Une approche beaucoup plus simple qui devrait davantage te convenir : ometa#

    Code ometa : 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
    ometa BasicCalc <: Parser
    {
       Digit  = super:d                          -> d.ToDigit(),
     
       Number = Number:n Digit:D                 -> (n * 10 + d)
               | Digit,
     
       AddExpr = AddExpr:x ‘+’ MulExpr:y         -> (x + y)
               | AddExpr:x ‘-’ MulExpr:y   		 -> (x - y)
               | MulExpr,
     
       MulExpr = MulExpr:x ‘*’ primExpr:y        -> (x * y)
               | MulExpr:x ‘/’ primExpr:y   	 -> (x / y)
               | PrimExpr,
     
       PrimExpr = ‘(‘ Expr:x ‘)’                 -> x
                | Number,
     
       Expr = AddExpr
    }

    A gauche la séquence de caractères à rechercher, à droite le code c# généré. Number est ainsi soit un chiffre soit un nombre suivi d'un chiffre (définition récursive). Donc "1" est un nombre, "12" est un nombre, "124" est un nombre, etc.

  11. #11
    Membre régulier Avatar de Tornade8912
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

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

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Points : 74
    Points
    74
    Par défaut
    Si je comprends bien,
    Le code de gauche je devrais l'incorporer dans mon projet et quand ce code sera exécuté, il me retournera la partie droite du code ?

  12. #12
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Je ne suis pas sûr de bien te comprendre.

    * C'est l'ensemble que tu devras mettre dans ton projet. Cet ensemble décrit ton langage (partie de gauche) et sa traduction (partie de droite). Les deux parties sont nécessaires et indissociables, elles forment un tout.

    * La partie de droite n'est pas "exécutée", c'est la traduction. Ometa génèrera le code correspondant. A la fin tu auras un compilateur, pas un interpréteur.

  13. #13
    Membre régulier Avatar de Tornade8912
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

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

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Points : 74
    Points
    74
    Par défaut
    Ok le code ometa que vous m'avez donnez sert à avoir un compilateur
    et non un interpréteur.
    C'est ça ?

  14. #14
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    C'est ça (même s'il me semble qu'il peut être utilisé pour créer un interpréteur).

Discussions similaires

  1. langage PHP sur le net est ce que ça marche
    Par achrefchouchou dans le forum Langage
    Réponses: 3
    Dernier message: 27/08/2010, 10h14
  2. Quel langage pour Visual Basic.net ?
    Par darioo2 dans le forum VB.NET
    Réponses: 17
    Dernier message: 07/08/2010, 14h22
  3. Quel langage choisir c#,vb.net,Asp.net..?
    Par framus.class dans le forum Général Dotnet
    Réponses: 18
    Dernier message: 21/10/2007, 00h43
  4. J2EE/.Net vs autes langages
    Par TClass dans le forum Etudes
    Réponses: 11
    Dernier message: 27/07/2005, 11h04
  5. Qui a inventé le concept de "langage de programmation?
    Par Biane dans le forum Langages de programmation
    Réponses: 10
    Dernier message: 11/02/2004, 10h11

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