2010-11-21 7 views
0

Guten Tag alle,Benutzer inputed Formel Parsen (eval)

ich herauszufinden versuche, wie Benutzer zu ermöglichen, ein Verfahren auf einigen bestimmten Daten zu nennen.

Ich möchte einen vordefinierten Satz von Funktionen zur Verfügung:

  • Durchschnitt, Moving_AVE (x, 5) ..would auf x 5 Tage gleitenden Durchschnitt sein.
  • 3 * x + y .... und so weiter ...

Also im Grunde, ich werde die Benutzer mit verschiedener Datenreihe bietet (x, y, z ....) und eine Reihe von Funktionen moving_ave, + -/* .... und sie sollten in der Lage sein, einfache Formeln zu schreiben (beschränkt auf die Funktionen, die ich anbiete).

Wie kann dies getan werden?

Ich werde dies auf App Engine für Java bereitstellen.

so dass ich über JSR-223 herausgefunden habe ... aber ich bin mir nicht sicher, ob es angemessen ist? Ich denke, dass ich die Eval-Funktion verwenden kann.

Danke,

Antwort

1

Es klingt wie, was Sie wollen, ist ein Interpreter für eine einfache Grammatik. Seien Sie vorsichtig bei Ansätzen, wie sie von Aerosteak vorgeschlagen wurden; Es ist gefährlich, Ihrem Benutzer den direkten Aufruf von Funktionen in Ihrem Code zu erlauben, und es ist leicht, Fehler im Sandboxing zu machen, was zu Sicherheitslücken führt. Außerdem müssen Sie einen eigenen Parser schreiben.

Der einfachste Ansatz ist wahrscheinlich, eine vorhandene Sprache zu verwenden - Javascript passt wahrscheinlich sehr gut, und Sie können Rhino, einen Javascript-Interpreter in Java geschrieben verwenden.

0

Sie müssen Reflexion verwenden unknow Methode aufzurufen. Schau dir Apache BeanUtil an.

Sie können ein TextBox mit dem Wert haben: 1,2,3, Konvertieren Sie diese Werte in Object Array.

Haben Sie eine andere ComBo-Box mit allen möglichen Methoden, die Sie anrufen können.

Verwenden Sie dann Bean Util, um die Methode mit dem Object Array aufzurufen.

z.Bsp:

Klasse MyMathManager {

public void doCalculationType1 (Object args ...) {..} public void doCalculationType2 (Object args ...) {..} public void doCalculationType3 (Objektargumente ...) {..}

Dann schauen Sie sich das Java von BeanUtil an, um diese Methode aufzurufen.

Viel Glück.

+0

Danke für die Antwort! nicht ganz das, wonach ich suche. –

0

Das klingt nach etwas, das wahrscheinlich eher auf dem Client als auf dem Server ausgeführt werden könnte.Sie könnten ein paar handliche JavaScript-Funktionen schreiben, die eine erholsame API auf dem Server aufrufen, um die benötigten Daten für einige weitere praktische JavaScript-Funktionen bereitzustellen, die die nützlichen Berechnungen ausführen. Es ist fast immer sicher, Benutzern zu erlauben, auf ihren eigenen Klienten zu prüfen. Sie können es in jedem Fall tun.