2010-10-27 30 views
4

Bonjour, je développe souvent JTableModels dans lequel certaines cellules doivent contenir le résultat de l'application d'une certaine formule mathématique simple. Ces formules peuvent avoir:Java 1.5: parseur de formule mathématique

  • opérateurs (+, -, *, /)
  • Nombre Constantes
  • Autres références de cellules (qui contient les numéros)
  • Paramètres (numéros avec un nom de référence comme « INTEREST_RATE ")

Je le résous souvent en faisant une petite classe de calculatrice qui analyse la formule, quelle syntaxe je définis. La classe calculatrice utilise une pile pour les calculs, et la syntaxe utilise toujours une notation polonaise.

Mais la notation polonaise n'est pas naturelle pour moi et pour mes utilisateurs. Donc ma question est ...

Existe-t-il une lib qui s'exécute dans 1.5 jvm et peut gérer mes requeriments et utiliser la notation normale (avec des parenthèses, je ne connais pas le nom de ce style de notation) pour les formules?

P.D il est supposé que les formules sont AllWays syntaxe correcte et je peux prétraiter les chiffres qui ne sont pas constantes pour fournir leurs valeurs

Répondre

3

Avez-vous pensé au sujet des avantages de JSR-223? en quelques mots, cette spécification allows Java developers s'intègre très facilement dynamic languages and their parsers. En utilisant un tel analyseur, votre besoin de définir un analyseur se transforme en la nécessité de définir un internal DSL, qui se résout en créant simplement une bonne API, et en laissant votre utilisateur choisir s'il préfère la syntaxe Javascript/Groovy/Scala/WTF qu'il préfère.

+0

Cela semble une bonne approche, je vais l'étudier, mais malheureusement, j'ai besoin de courir dans JVM 1.5.Je vais mettre à jour ma question – Telcontar

+0

Cela fonctionne vraiment, mais je ne peux pas l'utiliser parce que la restriction 1.5. Si personne n'offre une meilleure réponse pour java 1.5 je vais changer la question en l'acceptant et en acceptant votre réponse – Telcontar

+0

Enfin, comme je l'ai lu dans le deuxième lien que vous fournissez, ScriptingEngine peut être utilisé en 1.5 si vous téléchargez l'implémentation de référence de http: //jcp.org/aboutJava/communityprocess/final/jsr223/index.html – Telcontar

1

Essayez JEP.

Vous pouvez définir de nouvelles variables à l'analyseur, par conséquent, il peut contenir des noms de référence comme "INTEREST_RATE" .Mais vous devez le définir avant main. En ce qui concerne les références de cellules, vous devrez extraire les nombres et éditer l'expression en conséquence ou probablement il y a peut-être des options dont je ne suis pas encore conscient.

0

Si vous ne pouvez pas utiliser Java 6 et sa prise en charge de scripts, jetez un coup d'œil au Apache Bean Scripting Framework (BSF). De cette page:

... BSF 3.x fonctionnera sur Java 1.4+, permettant l'accès aux scripts JSR-223 pour Java 1.4 et Java 1.5.

+0

Je peux utiliser int à partir de 1.5 en utilisant l'implémentation de référence JSR-223, mais merci pour la réponse – Telcontar

0

Il y a un outil commercial appelé formula4j qui peut être utile à certains.

Il n'a pas d'aide directe pour les références de cellules. Vous devrez les gérer vous-même et traduire les références de cellule en valeurs.