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 :

Parser arithmetique pour string


Sujet :

C#

  1. #1
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut Parser arithmetique pour string
    Bonjour

    Je voudrais effectuer un petit parseur capable de traduire des expressions arithmetique simpe
    utilisant au minimum les operateurs
    +,-,*,/

    genre
    y=x*1.2
    y=(x+5)*2
    y=(x*2)+3

    Et une fois de plus pour ne pas réinventer la roue avez-vous déja vu une source simple qui fait ca (pour ne pas ajouter une usine a gaz a mon projet)

    Merci de votre aide

  2. #2
    Membre Expert Avatar de meziantou
    Homme Profil pro
    autre
    Inscrit en
    Avril 2010
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

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

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 223
    Par défaut
    Oui il y en a pas mal que ce soit sur codeplex ou codeproject
    En voici un
    http://simplemathparser.codeplex.com/

  3. #3
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    merci meziantou

    Mais l'idée est d'avoir qq chose de simple et leger

    Le projet que tu propose contient rien moins que 42 sources !!

    Je crains devoir passer plus de temps a maitriser la bete que d'écrire moi meme un petit parser simple accomplissant les quelques opérations nécessaires .

  4. #4
    Membre chevronné Avatar de MetalGeek
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 412
    Par défaut
    Salut,

    j'en ai fait un moi-même, mais c'est dans le même ordre d'idée (quelques milliers de lignes).
    Dans le principe, en gros, tu isoles les éléments des formules selon leur type (opérateurs et/ou fonctions d'un côté, variables ('x', 'y'...) d'un autre, nombres et/ou constantes éventuelles ('pi', 'euler', etc.).
    Ensuite tu isoles chaque unité fonctionnelle sous forme de noeuds en prenant en compte la précédence induite par les parenthèses, puis la précédence des opérateurs. Enfin, pour le résultat, tu calcules chaque noeud.
    Par exemple pour un truc du genre x + ( (y - 10) * (pi / 50)) tu vas avoir un arbre du style :
    -- x
    ------y - 10
    ------pi / 50

  5. #5
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Merci MetalGeek

    C'est dans cette voie la que j'avance

    Et comme a priori je n'utilise que des operateur arithmetiques de base +,-,/,* et les parentheses ca devrait tenir sur quelques dizaines de lignes

  6. #6
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    salut olivier

    Personnellement, je mettrais de coté les tokenizer et autres "joyeusetés" de ce genre pour utiliser CodeDom...

    Le truc que tu veux faire, il doit te prendre 10/15 lignes de code maxi avec code com... il existe plein d'exemples sur le net en utilisant cette technique.

    Le principe est simple...

    Dans un stringBuilder, tu mets un bout de code avec les using qui vont bien et ta fonction à compiler comme si tu l'écrivais sous l'éditeur de VS. Tu compiles en mémoire et en sortie de la compilation (si pas d'échec de celle dernière), tu recupères un point d'accès sur ta classe ou ta méthode.. après, il suffit juste d'appeler le code généré et basta... en faisant ainsi, tu fais beaucoup plus vite qu'avec un analyseur même simple (grammaire et syntaxe à gérer).. et tu t'offre en plus, la possibilité d'aggrandir pour la suite les fonctions mathématiques que tu voudras gérer...

    En tout cas, si j'avais à résoudre ce problème, je n'hésiterais pas la moindre seconde pour utiliser cette solution que tu dois (vu ton niveau) réaliser en moins d'une heure (montre en main et recherche sur internet effectuée)

    (je dirais même qu'en 15 minutes, ca doit être plié)

    Je pars en vacances demain.... donc, si plus de questions, n'attends pas une réponse trop rapide

  7. #7
    Membre Expert Avatar de meziantou
    Homme Profil pro
    autre
    Inscrit en
    Avril 2010
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

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

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 223
    Par défaut
    En effet cette méthode est très facile a mettre en place quand on utilise des opérateurs simples +,-,*,/,sin,cos,... Mais dès que l'on utilise l'opérateur puissance ^, il faut revenir aux token.

  8. #8
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Salut nicolas

    La solution des token est académiquement plaisante
    Mais c'est vrai que CodeDom m'avait efleuré l'esprit mais sans plus

    Maintenant je me dis que ce concept de compilation "en vol" est aussi plaisant

    Je vais donc faire un petit concours avec moi meme pour mettre les deux en oeuvre et en sortir avec une double experience !

    Bonnes vacance a toi et ta famille !

Discussions similaires

  1. Connaissez vous un parser html pour .Net
    Par mobscene dans le forum Framework .NET
    Réponses: 1
    Dernier message: 25/05/2007, 23h06
  2. Contrainte pour String et Code postal
    Par hola150 dans le forum Oracle
    Réponses: 8
    Dernier message: 10/04/2007, 09h54
  3. [XSLT] Parser xml pour une transformation html
    Par sucben dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 08/11/2006, 11h35
  4. [Système] Existe-t-il un bon parser HTML pour PHP ?
    Par MiJack dans le forum Langage
    Réponses: 8
    Dernier message: 25/10/2005, 11h18
  5. [Parser HTML] quel parser utiliser pour du HTML 4.0 ?
    Par Cyber@l dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 19/07/2004, 19h32

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