Thanks Stewart,
I was aware of those, but the problem is how do you find out which variables are undefined and need to be set? The set of variables available is not canonical.
I have got something working by subclassing NameSpace with a custom getVariableImpl implementation that builds a list of undefined variables. When an expression is created, I do a test evaluation and record the list of undefined variables. When the expression is to be evaluated for real, I use bind the known undefined variables to the current property values.

This seems to be working fine for the limited use of evaluating a single expression. My next task is to implement a more general script object. What I really need to work out is how to dynamically reference property values in my main application from within beanscript. Slowly getting there.



*********** REPLY SEPARATOR ***********

On 23/06/2008 at 11:21 AM Stewart Cambridge wrote:

Check the bsh.Interpreter class. The methods set(), unset() and eval() may help you.

2008/6/22 Brent Easton <>:

I am trying to work out the best way to integrate Beanshell into my application. I want to use Beanshell to add the ability to parse and evaluate arbitrarily complex expressions typed in by users.

For example

 20 * xpos + ypos/2

The expressions are entered and validated at one point of time, but are evaluated much later, in a different phase of operation of the program when xpos and ypos will have determinable values.

I have successfully used the Parser to parse and validate the structure of expression.

My problem is determining and binding values to the variables in the expression at runtime. The variables 'xpos' and 'ypos' (plus a host of other 'variables') are not predetermined at the time the expression is created.

At evaluation time, I need to determine what variables are used in the expression are undefined, then bind them to values from my application, evaluate the expression and then return the result to my application.

Any pointers would be appreciated.


Check out the new Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
Beanshell-users mailing list

Brent Easton                      
University of Western Sydney