begin process at 2010 02 09 16:05:36
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Java

 > 

Archives

 > 

Maths & Algorithmes

 > 

Expressions régulières et mathématiques


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Expressions régulières et mathématiques

lundi 12 janvier 2004 à 23:17:00 | Expressions régulières et mathématiques

georhan

Bonjour à tous :)

Je dois faire pour dans quelques jours (oulà ! déjà !! :p) un TP de gestion et manipulation et gestion d'expressions mathématiques. Par exemple, l'utilisateur rentre une expression (sous forme de chaîne) telle que "2*x-5*cos(y)", et je dois dériver par rapport à une variable, évaluer pour des valeurs données de x et y, etc...
J'en suis actuellement au point de vérification de syntaxe (pour voir si y'a pas d'erreur dans la saisie) et en même temps je transforme l'expression en arbre.
Je dois faire ce TP en JAVA et j'ai choisi les expressions régulières pour analyser la syntaxe de l'expression.

Mon problème se situe à ce niveau : pour reconnaître une expression du type E1 + E2 (ou E1 - E2), comment faut-il faire pour ne pas prendre n'importe quel signe (un signe qui n'est pas entre ( ), et aussi en fait pour prendre le bon ?

Par exemple "(.+)(-)(.+)" marche pour l'expression "3-(2+5)", mais pas pour "3-(2-5)" (car JAVA prend alors en compte uniquement 2-5. (Je mets trois fois des () pour l'analyse récursive).

Merci d'avance pour vos réponses :)

Géorhan

Il n'y a pas de mauvais programmeur. C'est cette p..... de machine de m... qui n'en fait qu'à sa tête !
mardi 13 janvier 2004 à 15:34:22 | Re : Expressions régulières et mathématiques

fred4

Salut,

Ton probleme viens je pense du fait que telle que tu l'ecris l'ER est ambigue et matche le "mauvais" '-'. Je ne comprends pas bien qu'est ce que te retourne java et qu'est ce que tu souhaites. Peux tu préciser le resultat que tu recuperes dans les 3 groupes ?

Pour ma part si j'avais à récuperer une operation entre deux expressions cela ressemblerais à cela :
(\\([^(]*(\\(.*\\))*[^)]*)\\)|\\w)([-+/*])(\\([^(]*(\\(.*\\))*[^)]*)\\)|\\w)

Soit (E)([-+/*])(E)

Avec E = (\\([^(]*(\\(.*\\))*[^)]*)\\)|\\w)

qui veut simplement dire que l'on prend ce qui se trouve entre la premier parenthese ouvrante et la parenthese fermante correspondante (ou bien un mot si il n'y a pas de parenthese)

Je suis peut etre a cote de la plaque mais si ca aide tant mieux...

Fred



mardi 13 janvier 2004 à 15:38:29 | Re : Expressions régulières et mathématiques

fred4

Correctif / Precision

Je me rends compte que dans mon message ci dessus mes backslash on été "re backslashés" à la publication du message. mon ER ne comporte bie nque des backslash simples.

/* test :
un backslash : \2 backslash : \\\*/

mardi 13 janvier 2004 à 16:25:32 | Re : Expressions régulières et mathématiques

georhan

Merci de ta réponse.

- JAVA analyse la chaîne et retourne les derniers patterns correspondant à l'expression régulière (c'est pour cela que c'est coupé au niveau du dernier signe) ;
- Si l'expression est (1-2)-(4-5) :
- 1er groupe : (1-2)-(4
- 2ème groupe : -
- 3ème groupe : 5)
- Mon problème viens bien a priori comme tu le dis d'une ER ambigüe...
- Dans ton écriture de E, il manque une (... où dois-je la placer ?

Encore merci :)

Georhan

Il n'y a pas de mauvais programmeur. C'est cette p..... de machine de m... qui n'en fait qu'à sa tête !
mardi 13 janvier 2004 à 23:14:57 | Re : Expressions régulières et mathématiques

GodConan


GodConan

ouai moi ;o) chui pas daccord avec la derniere phrase ;o) c tous ...


++
mercredi 14 janvier 2004 à 22:55:30 | Re : Expressions régulières et mathématiques

fred4


Ton Probleme vient bien du fait que par defaut une expression reguliere lors de son cherche à faire matcher dans chacun de ces groupes la plus grandes zones possible en commencant par la premiere.

Mon expression est effectivement incorrecte. Il manque une parenthese ouvrante au debut et la parenthese fermante backslashée doit etre deplacée d'un cran vers la gauche :

E=((\\([^(]*(\\(.*?\\))*[^)]*\\))|\\w)
Il faut noter que tu recupereras les valeurs qui t interressent dans $1 $5 et $6.
Cette fois ci c est teste et ca marche sur les expressions avec 1 niveau d imbrication de parenthese.

Tu n'arriveras a mon avis pas faire une expression générique fonctionnant pour tous les niveaux d'imbrication. Cela necessite une recursivite que n'offre pas les ER.

La solution la plus simple a ton probleme reste de faire de l'analyse char par char, en conmptant les parentheses et ce dans une fonction recursive.

Bon courage.


Fred.
jeudi 15 janvier 2004 à 09:20:12 | Re : Expressions régulières et mathématiques

georhan

Salut ,

En fait deux possibilités s'offraient à moi :
- La première, c'était d'installer et configurer un analyseur syntaxique et/ou grammatical por java (du genre JFlex ou BYacc-Java). Comme je dois rendre ce projet jundi, ça faisait un peu court, même que j'ai déjà fait de ça mais avec du C...
- J'ai donc choisi la deuxième qui, comme tu le dis, consiste à faire une fonction récursive : je prends d'abord tous les signes '+' ou '-' de l'expression, puis je les regarde un par un : s'il est entre des ( ), je l'ignore, sinon c'est une possibilité de "cassure" donc je retiens sa position et les 2 parties de l'expression qui l'entourent. Si tous les signes sont entre ( ), c'est que l'expression est de la forme (E) car je n'accepte pas (...)(...) pour (...)*(...) comme syntaxe. Le fait de garder le signe le plus à droite permet de gérer les chaînes du type 3-2-1 (il faut d'abord casser en "3-2", "-" et "1" cas sinon ça fait 3-(2-1) !!). Puis je fais pareil pour * et /, puis pour ^. Ceci permet de gérer la proirité de ^sur * et / et sur + et -.

J'espère juste que ce raisonnement et correct (je n'ai pas encore fait de tests, mais ça arrive). J'en reparle une fois mon TP fini pour les éventuels futurs intéressés :)

Encore merci pour ton aide !! :)

Georhan


Il n'y a pas de mauvais programmeur. C'est cette p..... de machine de m... qui n'en fait qu'à sa tête !
samedi 19 mars 2005 à 20:22:58 | Re : Expressions régulières et mathématiques

pichu914

Membre Club

Salut!
j'ai moi aussi un Tp à faire en java pour analyser une expression simple et la dériver (l'intégrer aussi d'ailleurs...) et je suis un peu à la rue en java! Pourrais-tu mette sur le forum ton code source et/ou tes commentaires sur l'analyseur...je me tue sur ces parenthèses à la con à analyser!

merci!



Cette discussion est classée dans : expression, expressions, tp, régulières, mathématiques


Répondre à ce message

Sujets en rapport avec ce message

expressions régulières, split [ par akrobat1664 ] Salut à tous,j'essaye de faire un split au moyen d'expressions régulières :l'idée est la suivante :j'ai des termes qui peuvent se composer de ........ Expressions régulières Java !! Help !! [ par lolo80000 ] Bonjour à tous,Voila j'ai un peit souci que je n'arrive pas à resoudre, voila j'ai une chaine de caractère du type "65*22/12-6+2..." et j'aimerai effe parseur d'expressions mathématiques: problème des BigDécimaux [ par KHABOU ] Bonjour,je dois réaliser un parseur d'expr math, j'ai pensé à utiliser JEP, j'ai réalisé un plugin Eclipse qui embarque ce fichier jar et une interfac avis aux Experts en Expressions Régulières (correction) [ par fanteris ] Bonjour à tous,Je veux remplacer "&" par "&", dans une chaine pouvant contenir d'autres expressions du type "é".Le but est de remplacer uniquement les java et expressions régulières [ par manal906 ] Bonjour, Je cherche un programme en java qui supprime les balises HTML d'un fichier et garde le contenu (du fichier HTML) dans un autre fichier et cel Expressions régulieres et balise script [ par phloam ] Bonjour, j'essaye désésperement d'eliminer des balises script et leur contenu dans une string qui contient un fichier html balise ,j'ai écrit l'expres package qui contient des fonctions mathématiques [ par othland ] slt tlmje veux savoir s'il existe un package ou je peux trouver des fonctions de proba comme la loi normale par exemple ou la distribution binomiale.. Pattern [ par sheorogath ] bonjour, je suis en train de me faire mon parseur xml et pour cela je compte recuperer les balise avec une expression reguliere ce qui revient a recup expression d entres /sorties en java [ par jarule123 ] salut tt le monde je vx de documentation apropos les expression d entres sorties en java si qq connait un site web  ou bien un tutoriel detaille sur c expression régulière [ par amel2006 ] j'ai ce mot "ou" que je cherche dans cet phrase "The American Heritage Dictionary of the English Language: Fourth Edition.2000." qui n'existe pas mai


Nos sponsors


Sondage...

Comparez les prix


HTC Hero

Entre 550€ et 550€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,714 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales