Why not just use the scripting language support that is built into Java?

For instance, you can use Rhino to evaluate javascript expressions in a
controlled environment.  Other options include jython, groovy, beanshell,
jruby, BSF, and many, many others.

http://java-source.net/open-source/scripting-languages/sics

Why re-implement this all again?

On Fri, Aug 17, 2012 at 2:26 AM, Guillaume CHAUVET <
guillaume.chau...@qualiformed.com> wrote:

> > Hi
> > [...]
> > Could you provide a few small examples of what the usage would look like?
> > Also, some use-cases in "real" applications would be welcome in order to
> > figure out whether this functionality would fit in Commons Math.
> > Thanks,
> > Gilles
>
> Hello,
> I apologize for not having replied earlier, due to a lack of time :/
> We develop softwares solutions for automatic analyses and traceability of
> quality controls in radiation therapy and medical imaging : radiotherapy
> machines treatment (linacs), scanners, gamma-cameras, Digitalized radiology
> installations, and MRI. We need to provide mathematical formulas used in
> software and allow medical physicists to customize theses formulas, for
> legal reasons.
>
> Below, my first sketch of using this potential feature:
>
> Expression.java : Interface
> =======================================================
> public void addExpression(ExpressionInsertion ei, TerminalExpression te);
> public void addExpression(ExpressionInsertion ei, NonTerminalExpression
> nte);
> public void addExpression(ExpressionInsertion ei, FunctionExpression nte,
> Expression... args);
> public void addExpression(FunctionExpression nte, Expression... args);
> public void setVariable(String name, double value);
> public void removeVariable(String name);
>
> Snippet :
> =======================================================
> ExpressionBuilder eb = ExpressionBuilderFactory.getInstance().create();
>
> // Creating a custom function with 2 parameters to our ExpressionBuilder
> Operator testFunction = new FunctionExpression("test", new
> FunctionAdapter(new BivariateFunction() {
>     double value(double x, double y) {
>        return (x + x) * (y + y) + 5;
>     }
> });
>
> // Create a new Expression :
> Expression exp = eb.createExpression(new ConstantExpression(22));
> // exp = "22"
> exp.setVariable("var1", 1.0);
> exp.addExpression(ExpressionInsertion.RIGHT, new AddExpression(20));
> // exp = "22 + 20"
> exp.addExpression(ExpressionInsertion.RIGHT, new
> MulExpression(exp.getVariable("var1")));
> // exp = "(22 + 20) * ${var1}"
> exp.addExpression(new SqrtExpression());
> // exp = " sqrt((22 + 20) * ${var1})"
> exp.addExpression(ExpressionInsertion.LEFT, new ConstantExpression(20));
> // exp = "20 + sqrt((22 + 20) * ${var1})"
> exp.addExpression(testFunction, 10, exp.getCurrentExpression);
> // exp = "test(10, 20 + sqrt((22 + 20) * ${var1}))"
>
> // We can connect to another expression, builded separatly :
> Expression exp2 = eb.createExpression(new testFunction, 1, 2);
> //exp2 = " test(1, 2)"
> exp2.setVariable("var2", 5.0);
> exp2.addExpression(ExpressionInsertion.LEFT, new
> AddOperation(exp2.getVariable("var2"));
> // exp2 = "${var2} + test(1, 2)"
> exp.addExpression(ExpressionInsertion.LEFT, exp2);
> // exp2 = "(${var2} + test(1, 2)) + test(10, 20 + sqrt((22 + 20) *
> ${var1}))"
>
> // Custom visitor who build a string representation of this expression
> ExpressionVisitor sev = new StringExpressionVisitor();
> exp.accept(exp);
> try {
> System.out.println("result for expression '" + exp.toString() + "' = " +
> exp.evaluate());
> } catch (MathParseException ex) {
> // [...]
> }
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> For additional commands, e-mail: dev-h...@commons.apache.org
>
>

Reply via email to