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 > >