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 :

Création interface/backend interpréteur mathématique


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    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 : 33
    Localisation : Suisse

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut Création interface/backend interpréteur mathématique
    Bonjour à tous !

    J'ai un projet scolaire qui consiste à developper une interface pour un calculateur (giac en l'occurence). L'interface à proprement parlé sera réalisée avec Qt et un widget mathml. Mais bon, mathml est une plaie, je pense donc manipuler des formules écrites en latex et c'est là que mes ennuis commencent

    En effet, même si au niveau de la transformation latex->mathml je n'ai rien à faire puisque j'utilise blatex j'ai deux problèmes plus ou moins interconnectés.

    1) Pour rentrer mes formules latex, je les tape actuellement au clavier comme n'importe quel texte. Mais sur la version finale, chaque "élément latex" sera rentré par un bouton dédié : cad qu'on rentrera en bloc des choses comme \sqrt{} ou encore \frac{}{}. Pour naviguer facilement entre les formules, j'ai pensé à deux systèmes :

    a)Le premier consiste à se balader de caractère '{' en caractère '{'
    b) Le second consite à construire un arbre reprensant la formule latex où
    * chaque noeud est un opérateur (+,-,*,\frac,\sqrt,\int,\lim....) avec à chaque fois le nombre de fils qui va bien (1,2 et quelques éventuels options),
    * une feuille représente une variable et ensuite de balader de noeud en noeud.

    En résumé : Le premier système à l'avantage d'être très simple à coder. Le second est beaucoup plus modulable (rien que pour la suppresion d'éléments) et pourrait répondre aussi en partie à la question ci dessous. Néanmoins, je n'ai AUCUNE idée de comment créer en live un tel arbre.

    2) Les commandes latex ont toutes une forme "giac" et je dois effectuer la transformation pour les calculs. Par exemple : \int_{a}^{b} f(x)dx va s'écrire avec giac : integrate(f,,x,a,b). J'ai donc besoin d'établir certaines règles de "transformation". Et là pareil, la seule idée que j'ai eu correspond à un parcours réccursif de l'arbre où chaque noeud va appliquer sa propre transformation et appeler celle de ses enfants.

    Que pensez vous de mes choix ?
    Un lien/tuto/what ever pour construire un tel arbre ? Merci beaucoup !
    "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)

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    Bonsoir,

    Personnelement je m'inspirerais de l'exemple de boost::spirit sur le mini parseur xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    struct mini_xml;
     
    typedef
        boost::variant<
            boost::recursive_wrapper<mini_xml>
          , std::string
        >
    mini_xml_node;
     
    struct mini_xml
    {
        std::string name;                           // tag name
        std::vector<mini_xml_node> children;        // children
    };
    (ici pour l'exemple en entier)

    Après vient le comment créer cette arbre avec la structure :
    -> Si tu pars directement d'un texte, alors c'est un parsage classique (cf exemple de boost::spirit)
    -> Si t'as une interface devant, j'essairais de jouer avec les itérateurs. Une sorte d'itérateur qui "attend" que l'utilisateur utilise l'interface, et permet de se ballader (grace à la grammaire) dans l'arbre selon ce qu'il fait.

    Je ne sais pas si je suis très clair, ni même si c'est vraiment viable.

  3. #3
    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 : 33
    Localisation : Suisse

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Désolé de la réponse tardive, je n'ai pas vu passé le WK de 4 jours

    J'avais pensé me tourner vers spirit mais j'ai l'impression de sortir l'artillerie lourde.


    Après vient le comment créer cette arbre avec la structure :
    -> Si tu pars directement d'un texte, alors c'est un parsage classique (cf exemple de boost::spirit)
    -> Si t'as une interface devant, j'essairais de jouer avec les itérateurs. Une sorte d'itérateur qui "attend" que l'utilisateur utilise l'interface, et permet de se ballader (grace à la grammaire) dans l'arbre selon ce qu'il fait.
    Je vois bien ce que tu veux dire dans le premier point mais je ne comprends pas ce que tu dis dans la seconde.

    Quand je parlais d'interface, c'était pour entrer mon texte mais au final je parse (à la volée) une chaîne "constante"
    "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)

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    Ton interface ne sert qu'à entrer un texte brut qui sera ensuite parsé ? Si c'est ca alors oublie mon second point, j'étais dans l'optique d'une interface "bouton" : l'utilisateur clic où il veut insérer et ce qu'il veut insérer, et le parsage est fait lors du clic et pas ensuite.

    Donc dans l'idée que j'avais, il fallait que le parser "attende" des données venant de l'UI. D'où l'idée d'itérateurs qui "attendrais". Je ne sais pas si c'est une idée viable par contre (et j'ai pas trop le temps de tester).

  5. #5
    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 : 33
    Localisation : Suisse

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Si c'est ca alors oublie mon second point, j'étais dans l'optique d'une interface "bouton" : l'utilisateur clic où il veut insérer et ce qu'il veut insérer, et le parsage est fait lors du clic et pas ensuite.
    Mon interface fera exactement ca ! Sauf que l'utilisateur pourra aussi bien ajouter que retirer du texte. Et le parsage se fera à chaque modification.

    Donc dans l'idée que j'avais, il fallait que le parser "attende" des données venant de l'UI. D'où l'idée d'itérateurs qui "attendrais". Je ne sais pas si c'est une idée viable par contre (et j'ai pas trop le temps de tester).
    Toujours pas compris où tu voulais en venir

    Une idée pour mon second point ?
    "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)

  6. #6
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    Je vais essayer de pondre un petit code pour illustrer ce que j'avais en tête (mais ca ne te servira pas si j'ai bien compris ce que tu fais).

    Pour le second point. Si tu utilises spirit et que tu as fais ton arbre comme illustrer dans la doc de spirit, alors un visiteur pourrait faire l'affaire pour parcourrir l'arbre récursivement.

Discussions similaires

  1. [LabView 7.1] Création interface graphique
    Par dodo91 dans le forum LabVIEW
    Réponses: 28
    Dernier message: 01/04/2008, 16h09
  2. Création interface de jeu
    Par bert_ dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 16/03/2008, 18h49
  3. Création interface utilisateur
    Par Yanns dans le forum VB.NET
    Réponses: 5
    Dernier message: 16/02/2008, 22h43
  4. [web] création interface
    Par totofe dans le forum Access
    Réponses: 7
    Dernier message: 13/07/2007, 09h35
  5. Function varargout création interface
    Par occor dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 28/03/2007, 19h38

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