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 :

Parsing associé à un programme C++


Sujet :

C++

  1. #1
    Membre confirmé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Points : 616
    Points
    616
    Par défaut Parsing associé à un programme C++
    Bonjour,
    Je réalise un solveur en travaillant sur des systèmes d'équations comportants des polynômes multivariés.
    Vous comprendrez qu'il est fastidieux et très pénible de saisir en dur les coefficients de chaque terme de chaque polynome de chaque système.

    Ainsi j'ai pensé à lex et yacc qui prendrait par exemple un fichier avec des polynomes de cette forme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    x1^2.x^3 - 2x1.x4^2 + -1/2 u1u2x2^2
    ...
    ...
    avec les règles définit qui vont bien, pour réaliser cela.

    Mais j'avoue que c'est un peu loin pour moi lex et yacc, ainsi existe-t-il une autre manière (html, css ou autre) plus simple de parser un fichier tout en étant compatible avec le C++, ou dois-je absolument me remettre à lex et yacc.

    Merci de votre aide, en esperant avoir été clair.

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par juve1897 Voir le message
    Bonjour,
    Je réalise un solveur en travaillant sur des systèmes d'équations comportants des polynômes multivariés.
    Vous comprendrez qu'il est fastidieux et très pénible de saisir en dur les coefficients de chaque terme de chaque polynome de chaque système.

    Ainsi j'ai pensé à lex et yacc qui prendrait par exemple un fichier avec des polynomes de cette forme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    x1^2.x^3 - 2x1.x4^2 + -1/2 u1u2x2^2
    ...
    ...
    avec les règles définit qui vont bien, pour réaliser cela.

    Mais j'avoue que c'est un peu loin pour lex et yacc, ainsi existe-t-il une autre manière (html, css ou autre) plus simple de parser un fichier tout en étant compatible avec le C++, ou dois-je absolument me remettre à lex et yacc.

    Merci de votre aide, en esperant avoir été clair.
    Coco/R est un générateur de lexeur/parseur très simple, très puissant, et générant du code objet. Par bien des cotés, sa syntaxe est plus simple que celle de lex/yacc. Tu devrait peut-être y jeter un coup d'oeil.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  3. #3
    Membre éprouvé Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Points : 997
    Points
    997
    Par défaut
    Bonjour,

    Tu peux écrire tes polynômes dans un fichier XML, et le parser à l'aide de libxml++, ou à défaut libxml2.
    À toi de voir comment structurer ton fichier…

    Plus sérieusement, tu peux t'inspirer des formats comme DIMACS, EDIMACS ou QDIMACS utilisés en logique.
    Ce n'est pas très lisible, ni très évident à écrire, mais c'est très facilement analysable par un programme.
    Je pense que ça peut être un bon format intermédiaire, le temps que tu trouves une solution qui te convienne.

    La première ligne donne les paramètres du problème : nombre de variables, nombre de polynômes, etc. ; tout ce qui paraît pertinent.
    Les autres lignes représentent les données, donc pour toi les polynômes.
    Toutes les variables sont représentées par des identificateurs numériques ; mais rien ne t'empêche d'écrire la table d'associations, que ce soit pour le lecteur ou parce que le programme a besoin de connaître le nom des variables, pour l'affichage par exemple.
    On peut également préfixer chaque ligne par une lettre indiquant son rôle ; par exemple, « c » pour « commentaire », « p » pour « description du problème »…

    Exemple, en supposant que le programme doit connaître le nom des variables :
    Code : 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
    c un problème de 6 polynômes à 7 variables
    p 7 6
    c la table des associations : identifiant nom_variable
    c (« v » pour « variable »)
    v 1 x
    v 2 x1
    (...)
    v 5 x4
    v 6 u1
    v 7 u2
    c chaque ligne représente un monôme multivarié (« m » pour « monôme »)
    c on met en premier le coefficient, puis pour chaque variable le couple (identifiant, puissance)
    c le « 0 » final (optionnel) signale la fin du monôme
    m 1 2 2 1 3 0
    m -2 2 1 5 2 0
    m -0.5 6 1 7 1 3 2 0
    c la ligne suivante indique un changement de polynôme
    0
    (...)
    On peut aussi écrire un polynôme sur une seule ligne, en séparant chaque monome par un « 0 », et éventuellement en le terminant par deux « 0 ».

  4. #4
    Membre chevronné
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Points : 1 921
    Points
    1 921
    Par défaut
    Ca doit se faire en quelques regles avec boost::spirit::qi

Discussions similaires

  1. Associer un programme à un fichier
    Par Jiyuu dans le forum Scripts/Batch
    Réponses: 6
    Dernier message: 14/12/2009, 14h07
  2. Réponses: 2
    Dernier message: 29/11/2007, 15h23
  3. Protocole (d) n'est associé à aucun programme
    Par petchos dans le forum Langage
    Réponses: 2
    Dernier message: 02/07/2007, 12h07
  4. Association des programmes aux fichiers: icônes
    Par jamesb dans le forum C++Builder
    Réponses: 6
    Dernier message: 15/01/2005, 20h17
  5. [Kylix] icone associée à un programme
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 22/03/2002, 10h43

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