org.jmol.script
Class ScriptMathProcessor
java.lang.Object
org.jmol.script.ScriptMathProcessor
class ScriptMathProcessor
- extends java.lang.Object
Method Summary |
(package private) boolean |
addOp(Token op)
addOp The primary driver of the Reverse Polish Notation evaluation engine. |
(package private) boolean |
addOp(Token op,
boolean allowMathFunc)
|
(package private) boolean |
addX(java.util.BitSet bs)
|
private boolean |
addX(boolean x)
|
private boolean |
addX(float x)
|
private boolean |
addX(int x)
|
(package private) boolean |
addX(java.lang.Object x)
|
(package private) boolean |
addX(javax.vecmath.Point3f pt)
|
(package private) boolean |
addX(ScriptVariable x)
|
(package private) boolean |
addXNum(ScriptVariable x)
|
private boolean |
doBitsetSelect()
|
(package private) void |
dumpStacks(java.lang.String message)
|
private boolean |
evaluateArray(ScriptVariable[] args,
boolean allowMatrix)
|
private boolean |
evaluateBin(ScriptVariable[] args)
|
private boolean |
evaluateColor(ScriptVariable[] args)
|
private boolean |
evaluateCompare(ScriptVariable[] args)
|
private boolean |
evaluateConnected(ScriptVariable[] args)
|
private boolean |
evaluateCross(ScriptVariable[] args)
|
private boolean |
evaluateData(ScriptVariable[] args)
|
private boolean |
evaluateDot(ScriptVariable[] args,
int tok)
|
private boolean |
evaluateFind(ScriptVariable[] args)
|
private boolean |
evaluateFunction(int tok)
|
private boolean |
evaluateGetProperty(ScriptVariable[] args)
|
private boolean |
evaluateHelix(ScriptVariable[] args)
|
private boolean |
evaluateLabel(int intValue,
ScriptVariable[] args)
|
private boolean |
evaluateList(int tok,
ScriptVariable[] args)
|
private boolean |
evaluateLoad(ScriptVariable[] args,
int tok)
|
private boolean |
evaluateMath(ScriptVariable[] args,
int tok)
|
private boolean |
evaluateMeasure(ScriptVariable[] args,
int tok)
|
private boolean |
evaluatePlane(ScriptVariable[] args,
int tok)
|
private boolean |
evaluatePoint(ScriptVariable[] args)
|
private boolean |
evaluatePrompt(ScriptVariable[] args)
|
private boolean |
evaluateQuaternion(ScriptVariable[] args,
int tok)
|
private boolean |
evaluateRandom(ScriptVariable[] args)
|
private boolean |
evaluateReplace(ScriptVariable[] args)
|
private boolean |
evaluateRowCol(ScriptVariable[] args,
int tok)
|
private boolean |
evaluateScript(ScriptVariable[] args,
int tok)
|
private boolean |
evaluateSort(ScriptVariable[] args)
|
private boolean |
evaluateString(int tok,
ScriptVariable[] args)
|
private boolean |
evaluateSubstructure(ScriptVariable[] args,
int tok)
|
private boolean |
evaluateSymop(ScriptVariable[] args,
boolean haveBitSet)
|
private boolean |
evaluateUserFunction(java.lang.String name,
ScriptVariable[] args,
int tok,
boolean isSelector)
|
private boolean |
evaluateVolume(ScriptVariable[] args)
|
private boolean |
evaluateWithin(ScriptVariable[] args)
|
private boolean |
evaluateWrite(ScriptVariable[] args)
|
private boolean |
getBoundBox(ScriptVariable x2)
|
(package private) static javax.vecmath.Matrix4f |
getMatrix4f(javax.vecmath.Matrix3f matRotate,
javax.vecmath.Tuple3f vTranslate)
|
private static java.lang.Object |
getMinMax(java.lang.Object floatOrSVArray,
int tok)
|
private static java.lang.Object |
getMinMaxPoint(java.lang.Object pointOrSVArray,
int tok)
calculates the statistical value for x, y, and z independently |
private static java.lang.Object |
getMinMaxQuaternion(java.lang.Object quaternionOrSVData,
int tok)
|
private boolean |
getPointOrBitsetOperation(Token op,
ScriptVariable x2)
|
protected static Quaternion[] |
getQuaternionArray(java.lang.Object quaternionOrSVData)
|
(package private) ScriptVariable |
getResult(boolean allowUnderflow)
|
private ScriptVariable |
getX()
|
private static boolean |
isOpFunc(Token op)
|
private boolean |
operate()
|
private javax.vecmath.Point4f |
planeValue(Token x)
|
javax.vecmath.Point3f |
ptValue(ScriptVariable x,
boolean allowFloat)
|
private void |
putIf(char c)
|
private void |
putOp(Token op)
|
private void |
putX(ScriptVariable x)
|
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
isSyntaxCheck
private boolean isSyntaxCheck
- Reverse Polish Notation Engine for IF, SET, and %{...} -- Bob Hanson
2/16/2007 Just a (not so simple?) RPN processor that can handle boolean,
int, float, String, Point3f, and BitSet
hansonr@stolaf.edu
wasSyntaxCheck
private boolean wasSyntaxCheck
logMessages
private boolean logMessages
eval
private ScriptEvaluator eval
viewer
private Viewer viewer
oStack
private Token[] oStack
xStack
private ScriptVariable[] xStack
ifStack
private char[] ifStack
ifPt
private int ifPt
oPt
private int oPt
xPt
private int xPt
parenCount
private int parenCount
squareCount
private int squareCount
braceCount
private int braceCount
wasX
private boolean wasX
incrementX
private int incrementX
isArrayItem
private boolean isArrayItem
asVector
private boolean asVector
asBitSet
private boolean asBitSet
ptid
private int ptid
ptx
private int ptx
skipping
private boolean skipping
haveSpaceBeforeSquare
private boolean haveSpaceBeforeSquare
equalCount
private int equalCount
ScriptMathProcessor
ScriptMathProcessor(ScriptEvaluator eval,
boolean isArrayItem,
boolean asVector,
boolean asBitSet)
getResult
ScriptVariable getResult(boolean allowUnderflow)
throws ScriptEvaluator.ScriptException
- Throws:
ScriptEvaluator.ScriptException
putX
private void putX(ScriptVariable x)
putOp
private void putOp(Token op)
putIf
private void putIf(char c)
addX
boolean addX(ScriptVariable x)
addX
boolean addX(java.lang.Object x)
addX
boolean addX(java.util.BitSet bs)
addX
boolean addX(javax.vecmath.Point3f pt)
addXNum
boolean addXNum(ScriptVariable x)
throws ScriptEvaluator.ScriptException
- Throws:
ScriptEvaluator.ScriptException
addX
private boolean addX(boolean x)
addX
private boolean addX(int x)
addX
private boolean addX(float x)
isOpFunc
private static boolean isOpFunc(Token op)
addOp
boolean addOp(Token op)
throws ScriptEvaluator.ScriptException
- addOp The primary driver of the Reverse Polish Notation evaluation engine.
This method loads operators onto the oStack[] and processes them based on a
precedence system. Operands are added by addX() onto the xStack[].
We check here for syntax issues that were not caught in the compiler. I
suppose that should be done at compilation stage, but this is how it is for
now.
The processing of functional arguments and (___?___:___) constructs is
carried out by pushing markers onto the stacks that later can be used to
fill argument lists or turn "skipping" on or off. Note that in the case of
skipped sections of ( ? : ) no attempt is made to do syntax checking.
[That's not entirely true -- when syntaxChecking is true, that is, when the
user is typing at the Jmol application console, then this code is being
traversed with dummy variables. That could be improved, for sure.
Actually, there's plenty of room for improvement here. I did this based on
what I learned in High School in 1974 -- 35 years ago! -- when I managed to
build a mini FORTRAN compiler from scratch in machine code. That was fun.
(This was fun, too.)
-- Bob Hanson, hansonr@stolaf.edu 6/9/2009
- Parameters:
op
-
- Returns:
- false if an error condition arises
- Throws:
ScriptEvaluator.ScriptException
addOp
boolean addOp(Token op,
boolean allowMathFunc)
throws ScriptEvaluator.ScriptException
- Throws:
ScriptEvaluator.ScriptException
doBitsetSelect
private boolean doBitsetSelect()
dumpStacks
void dumpStacks(java.lang.String message)
getX
private ScriptVariable getX()
throws ScriptEvaluator.ScriptException
- Throws:
ScriptEvaluator.ScriptException
evaluateFunction
private boolean evaluateFunction(int tok)
throws ScriptEvaluator.ScriptException
- Throws:
ScriptEvaluator.ScriptException
evaluateCompare
private boolean evaluateCompare(ScriptVariable[] args)
throws ScriptEvaluator.ScriptException
- Throws:
ScriptEvaluator.ScriptException
evaluateVolume
private boolean evaluateVolume(ScriptVariable[] args)
throws ScriptEvaluator.ScriptException
- Throws:
ScriptEvaluator.ScriptException
evaluateSort
private boolean evaluateSort(ScriptVariable[] args)
throws ScriptEvaluator.ScriptException
- Throws:
ScriptEvaluator.ScriptException
evaluateSymop
private boolean evaluateSymop(ScriptVariable[] args,
boolean haveBitSet)
throws ScriptEvaluator.ScriptException
- Throws:
ScriptEvaluator.ScriptException
evaluateBin
private boolean evaluateBin(ScriptVariable[] args)
throws ScriptEvaluator.ScriptException
- Throws:
ScriptEvaluator.ScriptException
evaluateHelix
private boolean evaluateHelix(ScriptVariable[] args)
throws ScriptEvaluator.ScriptException
- Throws:
ScriptEvaluator.ScriptException
evaluateDot
private boolean evaluateDot(ScriptVariable[] args,
int tok)
throws ScriptEvaluator.ScriptException
- Throws:
ScriptEvaluator.ScriptException
ptValue
public javax.vecmath.Point3f ptValue(ScriptVariable x,
boolean allowFloat)
throws ScriptEvaluator.ScriptException
- Throws:
ScriptEvaluator.ScriptException
planeValue
private javax.vecmath.Point4f planeValue(Token x)
evaluateMeasure
private boolean evaluateMeasure(ScriptVariable[] args,
int tok)
throws ScriptEvaluator.ScriptException
- Throws:
ScriptEvaluator.ScriptException
evaluateUserFunction
private boolean evaluateUserFunction(java.lang.String name,
ScriptVariable[] args,
int tok,
boolean isSelector)
throws ScriptEvaluator.ScriptException
- Throws:
ScriptEvaluator.ScriptException
evaluateFind
private boolean evaluateFind(ScriptVariable[] args)
throws ScriptEvaluator.ScriptException
- Throws:
ScriptEvaluator.ScriptException
evaluateGetProperty
private boolean evaluateGetProperty(ScriptVariable[] args)
evaluatePlane
private boolean evaluatePlane(ScriptVariable[] args,
int tok)
throws ScriptEvaluator.ScriptException
- Throws:
ScriptEvaluator.ScriptException
evaluatePoint
private boolean evaluatePoint(ScriptVariable[] args)
evaluatePrompt
private boolean evaluatePrompt(ScriptVariable[] args)
evaluateReplace
private boolean evaluateReplace(ScriptVariable[] args)
throws ScriptEvaluator.ScriptException
- Throws:
ScriptEvaluator.ScriptException
evaluateString
private boolean evaluateString(int tok,
ScriptVariable[] args)
throws ScriptEvaluator.ScriptException
- Throws:
ScriptEvaluator.ScriptException
evaluateList
private boolean evaluateList(int tok,
ScriptVariable[] args)
throws ScriptEvaluator.ScriptException
- Throws:
ScriptEvaluator.ScriptException
evaluateRowCol
private boolean evaluateRowCol(ScriptVariable[] args,
int tok)
throws ScriptEvaluator.ScriptException
- Throws:
ScriptEvaluator.ScriptException
evaluateArray
private boolean evaluateArray(ScriptVariable[] args,
boolean allowMatrix)
evaluateMath
private boolean evaluateMath(ScriptVariable[] args,
int tok)
evaluateQuaternion
private boolean evaluateQuaternion(ScriptVariable[] args,
int tok)
throws ScriptEvaluator.ScriptException
- Throws:
ScriptEvaluator.ScriptException
evaluateRandom
private boolean evaluateRandom(ScriptVariable[] args)
evaluateCross
private boolean evaluateCross(ScriptVariable[] args)
evaluateLoad
private boolean evaluateLoad(ScriptVariable[] args,
int tok)
evaluateWrite
private boolean evaluateWrite(ScriptVariable[] args)
throws ScriptEvaluator.ScriptException
- Throws:
ScriptEvaluator.ScriptException
evaluateScript
private boolean evaluateScript(ScriptVariable[] args,
int tok)
throws ScriptEvaluator.ScriptException
- Throws:
ScriptEvaluator.ScriptException
evaluateData
private boolean evaluateData(ScriptVariable[] args)
evaluateLabel
private boolean evaluateLabel(int intValue,
ScriptVariable[] args)
throws ScriptEvaluator.ScriptException
- Throws:
ScriptEvaluator.ScriptException
evaluateWithin
private boolean evaluateWithin(ScriptVariable[] args)
throws ScriptEvaluator.ScriptException
- Throws:
ScriptEvaluator.ScriptException
evaluateColor
private boolean evaluateColor(ScriptVariable[] args)
evaluateConnected
private boolean evaluateConnected(ScriptVariable[] args)
evaluateSubstructure
private boolean evaluateSubstructure(ScriptVariable[] args,
int tok)
throws ScriptEvaluator.ScriptException
- Throws:
ScriptEvaluator.ScriptException
operate
private boolean operate()
throws ScriptEvaluator.ScriptException
- Throws:
ScriptEvaluator.ScriptException
getMatrix4f
static javax.vecmath.Matrix4f getMatrix4f(javax.vecmath.Matrix3f matRotate,
javax.vecmath.Tuple3f vTranslate)
getBoundBox
private boolean getBoundBox(ScriptVariable x2)
getPointOrBitsetOperation
private boolean getPointOrBitsetOperation(Token op,
ScriptVariable x2)
throws ScriptEvaluator.ScriptException
- Throws:
ScriptEvaluator.ScriptException
getMinMax
private static java.lang.Object getMinMax(java.lang.Object floatOrSVArray,
int tok)
getMinMaxPoint
private static java.lang.Object getMinMaxPoint(java.lang.Object pointOrSVArray,
int tok)
- calculates the statistical value for x, y, and z independently
- Parameters:
pointOrSVArray
- tok
-
- Returns:
- Point3f or "NaN"
getMinMaxQuaternion
private static java.lang.Object getMinMaxQuaternion(java.lang.Object quaternionOrSVData,
int tok)
getQuaternionArray
protected static Quaternion[] getQuaternionArray(java.lang.Object quaternionOrSVData)