From: Miguel <mi...@jm...> - 2004-06-13 03:40:57
|
Bob wrote: > Miguel, can you point me to the code responsible for the > > select > > command? src/org/openscience/jmol/viewer/script/Eval.java search for 'void select' There is not much going on here. Mostly some special-case handling for the select statement when it has no arguments. The real meat is in the routine expression(...) go to the top of the file and search for 'bitset expression' This routine evaluates an arbitrary expression and returns a BitSet that represents the atoms which are selected. Don't get bogged down with BitSet ... just think of it as a set of non-negative integers. If you prefer to think in terms of implementation, it is an array of flags where all the entries from 0 to infinity are initially set to false. We can go through and set arbitrary entries to true. In our case, the atoms are numbered from 0 through atomCount - 1, so some arbitrary set of those integers will be returned by this routine. The expression that is evaluated is in reverse polish notation for a push-down automaton ... aka stack machine. During the script compilation process, the tokens are transformed from infix to postfix notation. Most tokens push one thing on the stack. Binary operators pop the top two entries off the stack and push their result onto the stack. At the end of expression evaluation, there had better be 1 BitSet on the stack. Otherwise, there is a compiler bug ... the compiler is not allowed to send invalid expressions to be evaluated. Miguel |