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

C# Discussion :

Creation de langage avec c# + code completion


Sujet :

C#

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 69
    Par défaut Creation de langage avec c# + code completion
    bonjour,

    quand je suis en c++ et je veux créer un nouveau langage (afin de faire des devs specifiques, ou fournir des outils à mes infographistes) j'utilise spirit ou xpressiv.

    Désormais je souhaite faire la même chose en c#, quelles libs me conseillez-vous? J'aimerai une lib qui permette aussi de faire du code completion dans un editeur.

    Cordialement,

    El Pedro

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

    Antlr est sans doute le meilleur outil possible pour le parser generator. Si tu préfères écrire le parser à la main, C# offre une classe Regex en standard.

    Côté IDE, tu peux tout simplement utiliser les biblios de Visual Studio pour créer et distribuer un clone de VS, ce cas d'utilisation ayant été spécifiquement élaboré pour les DSL ! Je n'ai pas d'expérience de première main mais ça ne doit pas être bien complexe. Enfin pour doter ce clone du support de ton langage il doit te suffire d'implémenter un language service qui doit peu ou prou se borner à parser le code pour exposer un DOM.

    Résumé :
    a) Je crée un parser via Antlr.
    b) Je crée un language service pour VS exploitant ce parser.
    c) Je crée un IDE reprenant l'UI de VS via les API dédiées et en incluant le language service développé précédemment.

  3. #3
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Pour ce type d'application, on utilise directement C# comme langage spécialisé dans un environnement Visual Express.

    On fournit un projet de base avec les classes nécessaires aux outils métiers et une IHM de base pour choisir le code utilisateur à exécuter.

  4. #4
    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 : 43
    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
    Par défaut
    Sinon y a Irony qui a l'air pas mal aussi... Scott Hanselman avait écrit un billet à ce sujet, ça a l'air assez simple à utiliser

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 69
    Par défaut
    Merci pour vos réponses.
    Citation Envoyé par Graffito Voir le message
    Pour ce type d'application, on utilise directement C# comme langage spécialisé dans un environnement Visual Express.
    Je ne comprends pas vraiment? Si je veux creer des fonctions avec des protos comme "void peindre(element e)avec(color c)", je ne pas pas modifier c# (à moins d'un précompilo) ?

  6. #6
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Citation Envoyé par ElPedro Voir le message
    Si je veux creer des fonctions avec des protos comme "void peindre(element e)avec(color c)", je ne pas pas modifier c# ?
    Il suffit de créér la classe Public "Peinture" avec sa fonction void peindre(Element e, Color c) dans ton projet de développement dans lequel tu testes ces classes métiers publiques et d'ajouter l'exe de développement dans les références du projet de test.

    L'utilisateur n'aura plus qu'à coder normalement en C# dans sa copie du projet de base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    MaPeinture=New Peinture() ;
    MaPeinture.Peindre(...

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 69
    Par défaut
    Merci Graffito, mais je pense que nous ne sommes pas vraiment sur la même longueur d'onde.

    J'ai indiqué volontairement un prototype impossible en C# (non pas "peindre(element e, color c)" mais bien "peindre(element e)avec(color c)).
    De meme que si je decris par exemple du Haskell, du prolog, de l'asm, ou un langage en langue arabe avec des * et des + dans les noms de fonctions, etc.. et bien je veux pouvoir le faire .

    Je veux créer un langage propre à un métier, sans forcément de rapport avec les langages impératifs ou objets style c#/java/c. C'est pourquoi je ne vois pas comment je pourrai utiliser c# directement sans passer par un précompilo? Je suis désolé si ma question n'était pas assez précise.

    Irony semble être ce que je recherche (mais pas sûr pour la completion), et j'ai trouvé aussi "Sprache" qui semble du même acabit, voire mieux.

  8. #8
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Effectivement, je n'avais pas noté que ta réponse portait sur la syntaxe des instructions .
    Je veux créer un langage propre à un métier, sans forcément de rapport avec les langages impératifs ou objets style c#/java/c. C'est pourquoi je ne vois pas comment je pourrai utiliser c# directement sans passer par un précompilo? Je suis désolé si ma question n'était pas assez précise.


    Ton objectif comporte apparament 2 aspects :
    1. la fourniture de fonctions orientées métier,
    2. une syntaxe de ton choix.
    J'avoue que le point 2) me parait relativement secondaire et me semble présenter assez peu d'avantages par rapport aux inconvénients comme la puissance du langage et la nécessité de créer :
    - un outil de saisie (avec éventuellement coloration syntaxique),
    - un interpréteur/compilateur,
    - un minimum d'outils de Debug,
    - une documentation de la syntaxe.

    Lors du développement d'une application de ce type il y 15 ans, nous avions utilisé l'approche vers laquelle tu t'orientes (langage dédié). La raison essentielle de ce choix était le fait que l'environnement de dévellopement dans lesquel intéger nos classes métiers existantes était payant. Avec Visual Express, ce n'est plus le cas aujourd'hui. C'est pourquoi, nous avons changé de technique : remplacement du langage dédié par c# et ajout des classes métier à l'environnement de développement utilisateur.

  9. #9
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    Citation Envoyé par Graffito Voir le message
    - un outil de saisie (avec éventuellement coloration syntaxique),
    - un interpréteur/compilateur,
    - un minimum d'outils de Debug,
    Il n'a pas à faire ces trois étapes. Tout ce qu'il doit réaliser c'est le parser qui générera le DOM depuis le texte, VS s'occupera du reste. Et en réalité le parser lui-même sera généré automatiquement depuis une simple définition de la grammaire du langage. A la rigueur il devra ajouter un support pour l'auto-complétion.

    Cela dit ton idée générale, utiliser C# plutôt qu'un DSL, peut être pertinente. Mais pour certains problèmes un DSL est vraiment la meilleure réponse. Il suffit pour s'en convraincre de comparer par exemple une UI définie en XAML avec son équivalent en C#.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 69
    Par défaut
    Merci à tous. Il y a plusieurs idées vraiment bonnes.
    Je vais creuser tout ça, merci encore.

    ElPedro

Discussions similaires

  1. code completion avec XCode et Qt 4.4
    Par epsilon68 dans le forum Qt
    Réponses: 2
    Dernier message: 29/06/2008, 10h27
  2. [C#] Probleme de creation de fichier avec Stream
    Par freddyboy dans le forum C#
    Réponses: 7
    Dernier message: 07/06/2004, 11h41
  3. [VB.NET] Création d'un tableau en code behind
    Par netr dans le forum ASP.NET
    Réponses: 6
    Dernier message: 11/05/2004, 10h02
  4. Peut-on faire du son juste avec du code assembleur ?
    Par Rick1602 dans le forum Assembleur
    Réponses: 7
    Dernier message: 26/03/2004, 17h39
  5. Quel langage avec Oracle????
    Par djedje11 dans le forum Langages de programmation
    Réponses: 11
    Dernier message: 16/03/2004, 11h15

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