Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1171 connectés 

  FORUM HardWare.fr
  Programmation
  Algo

  Analyse syntaxique d'opérations mathématiques

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Analyse syntaxique d'opérations mathématiques

n°696069
LajioT
Posté le 08-04-2004 à 22:12:45  profilanswer
 

Bonjour,
 
Dans le cadre d'un projet réalisant des développements limités, je me suis heurté au problème de l'analyse syntaxique de fonction.
Exemple : si je demande cos(sin(x)+x+8)+x, ou ln(x+cos(x)+ln(x)) etc. bref, une fonction complexe, comment pouvoir la récupérer sous une forme avec laquelle je pourrai calculer élément par élément, pour contruire le dl au fur et à mesure. (sans tenir compte des ordres, restons simple). J'ai d'abord pensé à une représentation en arbre, mais je ne voyais pas bien comment faire quand on a plusieurs opérandes/opérateurs au même niveau, sans faire moyennement compliqué. J'ai ensuite pensé à la représentation hongroise inversé si je ne m'abuse (pas sûr) (opérateur post fixée), qui simplierai déjà mieux les calculs.
 
J'aimerai donc obtenir votre point de vue sur ces techniques, et avoir d'autres idées peut être ?
 
Merci
 
PS: je ne suis qu'un dut 1ère année, ne forcez pas sur les analyses syntaxiques qu'on étudie en license, et ++.


Message édité par LajioT le 08-04-2004 à 22:15:05
mood
Publicité
Posté le 08-04-2004 à 22:12:45  profilanswer
 

n°696149
torpe23
Posté le 09-04-2004 à 00:49:15  profilanswer
 

Déja, tu les reçois comment tes calculs? Ils sont dans un fichier ou quoi? C'est l'utilisateur qui les rentrent? Décris comment ça se passe à ce niveau là, ça me semble important.

n°696168
nraynaud
lol
Posté le 09-04-2004 à 01:57:03  profilanswer
 

LajioT a écrit :

J'ai d'abord pensé à une représentation en arbre, mais je ne voyais pas bien comment faire quand on a plusieurs opérandes/opérateurs au même niveau, sans faire moyennement compliqué.  

oué, tu DOIS représenter ton calcul en arbre de Syntaxe Abstraite.
 
pour les opérateurs de même niveau, tu as les priorités pour désambigüiter.
 
par exemple :
 

Code :
  1. 1 + 3 + 5 = ((1 + 3) + 5)
  2. donc l'AST est :
  3. ...+
  4. ../ \
  5. ..+  5
  6. ./ \
  7. 1   3


 
la représentation initiale ne change rien, en POLONAISE inversée, on a :

Code :
  1. 1
  2. 3
  3. +
  4. 5
  5. +


qui conduit au même AST
 
ensuite, ton développement limité sera un ensemble de règles de transformation de cet arbre.


---------------
trainoo.com, c'est fini
n°696257
torpe23
Posté le 09-04-2004 à 09:43:07  profilanswer
 

L'entrée de ses données me semblent importantes: si il les rentrent en préfixé ou postfixé, alors y'a moyen très facilement de résoudre son truc avec une simple pile.


Message édité par torpe23 le 09-04-2004 à 09:43:21
n°696680
LajioT
Posté le 09-04-2004 à 16:31:35  profilanswer
 

Les données en entrées sont simplement une chaîne contenant l'expression normale mathématiques.
 
Merci nraynaud, je n'avais pas pensé aux priorités comme ton exemple le montre. Reste à bien organiser le tout pour qu'elles fonctionnent correctement, jamais encore fait. Enfin, je verrai.
 
Merci.

n°696829
LajioT
Posté le 09-04-2004 à 19:12:44  profilanswer
 

Bon, après réflexion, je ne sais pas trop par où commençer, et comment parser (c'est le terme approprié non ?) une expression sans bug (à la main, c'est risqué..), etc.
Je pense que je vais commençer par me tourner vers des générateurs d'analyseurs, et apprendre sur le tas ! Que pourrais je utiliser permettant de faire le travail que je veux, en pas trop difficile ?
Y'a t il des cours/tutos assez accessibles à ce sujet ? (je ne suis pour l'instant tomber que sur des sites qui "s'envolent" un peu trop, où ma compréhension n'est plus..)

n°696894
torpe23
Posté le 09-04-2004 à 23:50:22  profilanswer
 

c quoi ton langage. Si c'est en C, moi j'aime bien Lex/Yacc.
Avec ça, pas besoin de faire d'arbre. Tu calcules directement dans les règles de Yacc.

n°696895
LajioT
Posté le 09-04-2004 à 23:54:24  profilanswer
 

Java.
 
Je me suis déjà renseigné concernant les analyseurs (ie: JavaCC, JLex, ATNR, JavaCup), mais je ne sais pas lequel m'est accessible, et pratique pour le travail que j'ai à faire.

n°696901
torpe23
Posté le 10-04-2004 à 00:14:11  profilanswer
 

Moi, je sais qu'en C, avec Lex/Yacc, ton truc est plié en 30mn.
 
Par contre, en Java, je sais pas trop ce qui existe... Faudrait que t'essaie de trouver un truc similaire!


Message édité par torpe23 le 10-04-2004 à 00:14:51
n°696904
torpe23
Posté le 10-04-2004 à 00:18:58  profilanswer
 

JavaCC me semble pas mal. Produit du code un peu lourd, parait-il, mais bon...
 
un p'tit lien:http://www.loria.fr/~cirstea/TEACHING/SYNTAX/


Message édité par torpe23 le 10-04-2004 à 00:19:58
mood
Publicité
Posté le 10-04-2004 à 00:18:58  profilanswer
 

n°697579
nraynaud
lol
Posté le 11-04-2004 à 20:46:37  profilanswer
 

perso, j'ai toujours utilisé JLex/JavaCup, et j'ai jamais senti le besoin d'utiliser autre chose.
 
La grammaire des expressions dans un langage est généralement la partie la plus facile donc pas de pb.


---------------
trainoo.com, c'est fini
n°697703
souk
Tourist
Posté le 12-04-2004 à 04:09:39  profilanswer
 

+1 sur le couple JLex/JavaCup, que je prefere de loin a JavaCC :jap:

n°697729
LajioT
Posté le 12-04-2004 à 15:17:08  profilanswer
 

Merci pour vos réponses.
Concernant JavaCC, après maintes lectures, je le trouve plutôt assez clair, et simple d'utilisation. Je n'ai pas encore réalisé ce que je devais, mais les exemples que j'ai vu ne me paraissent pas trop complexe.
Je crois que je vais aller jeter un coup d'oeil à JLex/JavaCup pour vérifier vos dires. ;)

n°777066
docwario
Alea jacta est
Posté le 24-06-2004 à 22:37:34  profilanswer
 

euh si j ai bien compris,  
tu dois simplement executer une expression mathematique ?
 
pour faire simple recuperer le resultat de :
(56-0)*4-4+2*(46/(34+5)-5)
c'est ca ? (en rajoutant des fonctions du type sin() cos()..)
 
si oui, tu peux tu faire un parseur en C en 3 fonctions recursives indirectes.
ou alors essaie avec la fonction eval() de perl.

n°862863
spokup
Posté le 02-10-2004 à 14:19:21  profilanswer
 

si tu veut jai fait un analyser syntaxique complet en Actionscript donc c'est la meme syntaxe que le java. je pourrai te donner les sources

n°863195
Joel F
Real men use unique_ptr
Posté le 02-10-2004 à 22:48:44  profilanswer
 

spokup a écrit :

si tu veut jai fait un analyser syntaxique complet en Actionscript donc c'est la meme syntaxe que le java. je pourrai te donner les sources


 
 :sweat: j'ai mal lu ou ....

n°863406
spokup
Posté le 03-10-2004 à 15:22:41  profilanswer
 

Je ne suis pas un fan de la programmation sous flash loin de la. Je fait juste un stage dans une boite ou pour l'instant je fait du flash alors je m'amuse un peu. Cet analyseur syntaxique la je l'ai fait aussi en C++ mais la il veut du java alors ...

n°866893
pains-aux-​raisins
Fatal error
Posté le 07-10-2004 à 09:51:56  profilanswer
 

[:drapal] drapal ! :lol:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Algo

  Analyse syntaxique d'opérations mathématiques

 

Sujets relatifs
[Java] Créer un editeur de texte gérant la coloration syntaxiqueAnalyse d'images : algo de Resenfeld
analyse d'une chaine lettre par lettrefonction d'analyse d'un champs de base de donnée
[MYSQL] Opérations sur PhpMyAdminAnalyse XML comment faire ? [Resolu]
(Visual C++ 6) Cmt conserver la coloration syntaxique à l'impression ?[C] operations en ANSI ?
Verification syntaxique expression logique[JAVA] Question simple sur l'analyse XML
Plus de sujets relatifs à : Analyse syntaxique d'opérations mathématiques


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR