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 :

Interpréteur de scripts


Sujet :

C++

  1. #21
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Points : 64
    Points
    64
    Par défaut
    Merci pour le récapitulatif Emmanuel.

    Pour en revenir à Coco/R, son avantage sur Lex/Yacc est donc sa capacité à travailler avec C++. Par contre il me semble moins répandu que Lex/Yacc.
    J'ai vu que Flex/Bison propose une version C++ que j'ai commencé à tester brièvement. Pensez vous que ce soit une solution viable ?

    J'en profite pour demander à quel point Lex/Yacc (ou leurs pendant GNU) est présent "d'origine" sur les différents unix ?

  2. #22
    Membre confirmé
    Avatar de NewbiZ
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2002
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2002
    Messages : 184
    Points : 563
    Points
    563
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    NEW IMAGE 
    IMAGE LOAD "monImage.jpg"
    IMAGE SEUIL 128
    IMAGE SAVE "monImageBis.jpg"
    Il faudrait plus d'exemples de ce que tu comptes faire avec ce langage.
    Il n'y a aucun sens à vouloir utiliser des outils aussi complexes que Lex et Yacc pour un langage qui à priori a l'air aussi simple que celui présenté.

  3. #23
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    859
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 859
    Points : 714
    Points
    714
    Par défaut
    J'ai déjà eu le même problème et je l'ai solutionné par python + swig.

    http://www.python.org

    http://www.swig.org/

    python, c'est le langage (syntaxe proche du C, avec l'avantage de permettre de faire des choses trés simples)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    print "coucou"
    a = "chaine"
    c = "voila une concatenation " + a
    print c
    swig permet d'interfacer simplement (interfacer sans swig est possible, mais plus lourd).

    http://dosimple.ch/articles/Python-SWIG/

    En 2008, la gestion d'un intepréteur python dans des outils est courante (exemple éditeur scite).

    Il y a également un débugueur avec points d'arrêt.

    Oh, mais que vois-je ?
    Un tutoriel à ce sujet :
    http://matthieu-brucher.developpez.c...on/swig-numpy/

    Que la journée vous soit douce et agréable
    Si tu ne vis pas ce que tu penses alors tu penses ce que tu vis.

  4. #24
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Points : 1 053
    Points
    1 053
    Par défaut
    Swig c'est pour appeler de C++ dans un programme Python. La c'est le contraire qui serait souhaitable. Remarquez il existe aussi un truc très bien pour ça: boost::python.

  5. #25
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par NewbiZ Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    NEW IMAGE 
    IMAGE LOAD "monImage.jpg"
    IMAGE SEUIL 128
    IMAGE SAVE "monImageBis.jpg"
    Il faudrait plus d'exemples de ce que tu comptes faire avec ce langage.
    C'est pourtant quelque chose de ce type que je souhaite faire. Le nombre de mots clés sera juste plus important : typiquement sur l'exemple de TImage précédent, ça correspondrait à une 50 aine de méthodes à pouvoir manipuler par le script.
    Autre difficulté, j'ai besoin de pouvoir effectuer des boucles du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    NEW IMAGE 
    IMAGE LOAD "monImage.jpg"
    IMAGE SEUIL 128
    LOOP I 10
      IMAGE APPLY FILTRE \I
      IMAGE SAVE "monImage\I.jpg"
    END LOOP
    ...si j'imagine avoir la possibilité d'appliquer à mon image différents filtres référencés par des "numéros" et si à chaque boucle je souhaite enregistrer l'image sous un nom différent dépendant de l'itération.

    Il n'y a aucun sens à vouloir utiliser des outils aussi complexes que Lex et Yacc pour un langage qui à priori a l'air aussi simple que celui présenté.
    Je ne sais pas. C'est bien pour cela que je vous consulte, que je prends vos avis.
    Lex/Yacc serait-il superflu dans ce cas ?

  6. #26
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Points : 1 053
    Points
    1 053
    Par défaut
    Oui et en Python ça donnerait un truc qui ressemble à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    image = Image()
    image.load("monImage.jpg")
    image.seuil = 128
    i=0
    while i<10 : 
       image.applyfilter()
       image.save("monImage.jpg")
       i++
    Sauf que ça serait très très largement moins dur à implémenter et, qui plus est, ce sera largement mieux fait, plus rapide, plus malléable que tout ce que tu pourrais faire même en y passant des mois.

  7. #27
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Points : 64
    Points
    64
    Par défaut
    ...et que ce n'est pas ce que je veux faire.

  8. #28
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    859
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 859
    Points : 714
    Points
    714
    Par défaut
    Swig c'est pour appeler de C++ dans un programme Python. La c'est le contraire qui serait souhaitable. Remarquez il existe aussi un truc très bien pour ça: boost::python.
    Ah, OK.

    Les mots magiques c'est emdedding et extending:
    Donc là on veut faire du "embedding":
    http://docs.python.org/ext/high-level-embedding.html
    Si tu ne vis pas ce que tu penses alors tu penses ce que tu vis.

  9. #29
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Je m'incruste
    levit: Tu veux faire quoi alors ?
    Car là, je ne vois pas ce qui ne te va pas dans le code zais_ethael.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  10. #30
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Points : 64
    Points
    64
    Par défaut
    Hé bien, je veux mon propre langage, avec mes propres mots clés. Il me semble l'avoir dit et c'est pour ça qu'utiliser Python je m'enchante pas.

  11. #31
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Que t'apporterai ton langage face à python ?

    Ce qui va changer entre le python (ou ruby, ou que sais je) et ton langage c'est la syntaxe et la polyvalence. Au final, ils feront la même chose, sauf qu'avec ton langage tu aura passé pas mal de temps pour un gain au final plutôt faible (voire nul), temps que tu pourrai employer sur d'autre partie plus importante
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  12. #32
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Points : 1 053
    Points
    1 053
    Par défaut
    ... sauf si ton seul but est effectivement d'apprendre où de t'amuser, ce que tu ne nous a pas encore dit.

  13. #33
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Points : 64
    Points
    64
    Par défaut
    ...ou, par exemple, que les utilisateurs de l'application en question n'aient pas à apprendre Python (ou quel qu'autre langage que ce soit) mais utilisent un langage qui soit parfaitement adapté au contexte avec des mots clés qui soient explicites.

    Et oui, la partie ludique de l'histoire est aussi une motivation.

  14. #34
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    859
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 859
    Points : 714
    Points
    714
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    que les utilisateurs de l'application en question n'aient pas à apprendre Python (ou quel qu'autre langage que ce soit) mais utilisent un langage qui soit parfaitement adapté au contexte avec des mots clés qui soient explicites.
    Arf ! Là, il va falloir en dire plus, car plus simple que python (ou même d'autre langage) c'est difficile.
    Si tu ne vis pas ce que tu penses alors tu penses ce que tu vis.

  15. #35
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Points : 64
    Points
    64
    Par défaut
    Python a beau être "simple", il reste trop compliqué pour ce que je souhaite faire. Je n'ai pas besoin d'un bulldozer quand une pelle me suffit parfaitement.

  16. #36
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Ok.
    Donc cherche "create scripting language" google.
    Je tombe sur :
    ceci et ca
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  17. #37
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par levit Voir le message
    Python a beau être "simple", il reste trop compliqué pour ce que je souhaite faire. Je n'ai pas besoin d'un bulldozer quand une pelle me suffit parfaitement.
    Tu risques de te retrouver avec un bulldozer ayant été conçu comme une pelle.

    Ceci dit, dans la catégorie syntaxe trompeusement simple, il y a les lisps et TCL...
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  18. #38
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Avant même de réfléchir comment implémenter son propre langage, il faut commencer pas réfléchir à quoi il doit ressembler...

    Pour l'instant, ce que j'ai vu de plus proche d'une spec est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    NEW IMAGE 
    IMAGE LOAD "monImage.jpg"
    IMAGE SEUIL 128
    LOOP I 10
      IMAGE APPLY FILTRE \I
      IMAGE SAVE "monImage\I.jpg"
    END LOOP
    Et bien, ça ne m'a pas l'air clair... Il semble qu'il y ait des variables (I, Image) mais la syntaxe de leur utilisation ne semble pas trop uniforme... Est-il possible de faire du calcul, des opérations sur les chaînes de caractères ? Y a-t-il d'autres structures que la boucle ?

    Autre point, j'ai déjà développé un langage spécifique en me disant qu'il serait proche du vocabulaire de l'utilisateur final, mais en pratique, ça n'a pas trop marché. Si ton utilisateur est trop peu informaticien pour faire du python, il y a des chances qu'il le soit trop peu pour ton langage de script. Peut-être peux tu alors te tourner vers des langages graphiques ?
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  19. #39
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Points : 64
    Points
    64
    Par défaut
    Je me suis entre temps dirigé vers Lex/Yacc. Ces outils semblent être mes amis mais développer une usine à gaz pour les utiliser correctement dans mon application me semble de plus en plus exagéré.
    Avec les vagues exemples que je vous ai donnés, l'utilisation de Lex/Yacc vous semble-t-elle justifiée ?

  20. #40
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    [...]
    Et bien, ça ne m'a pas l'air clair... Il semble qu'il y ait des variables (I, Image) mais la syntaxe de leur utilisation ne semble pas trop uniforme... Est-il possible de faire du calcul, des opérations sur les chaînes de caractères ? Y a-t-il d'autres structures que la boucle ?
    Bien dans ce que je souhaite faire c'est cette boucle qui est le "plus complexe ": je n'ai pas le besoin de faire d'opérations sur les variables ou sur les chaînes de caractères (enfin si un peu, pour pouvoir enregistrer des fichiers sous des noms différents) et je n'ai pas non plus besoin d'autres structures.

    Citation Envoyé par JolyLoic Voir le message
    Autre point, j'ai déjà développé un langage spécifique en me disant qu'il serait proche du vocabulaire de l'utilisateur final, mais en pratique, ça n'a pas trop marché. Si ton utilisateur est trop peu informaticien pour faire du python, il y a des chances qu'il le soit trop peu pour ton langage de script.
    Comme dit juste au dessus, mon langage se donc très très simple... je l'espère suffisamment pour que mes utilisateurs l'utilisent à bon escient.

    Citation Envoyé par JolyLoic Voir le message
    Peut-être peux tu alors te tourner vers des langages graphiques ?
    Bien je n'ai jamais entendu parler de ce genre de choses. Tu penses à quelque chose en particulier ?

Discussions similaires

  1. Interpréteur de langage de script spécifique
    Par sinaps1618 dans le forum C++
    Réponses: 8
    Dernier message: 01/10/2009, 09h42
  2. Créer son interpréteur de "script perso"
    Par fredu dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 28/02/2009, 06h43
  3. [VBS] Lancer plusieurs script dans le même interpréteur
    Par intrud3r dans le forum VBScript
    Réponses: 4
    Dernier message: 12/07/2006, 15h26
  4. Créer un interpréteur de langage inspiré du Basic
    Par Picasso dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 11/05/2002, 17h10

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