org.jmol.viewer
Class ScriptMathProcessor
java.lang.Object
org.jmol.viewer.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)
|
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(ScriptVariable x)
|
(package private) boolean |
addXNum(ScriptVariable x)
|
private boolean |
doBitsetSelect()
|
(package private) void |
dumpStacks(java.lang.String message)
|
private boolean |
evaluateArray(ScriptVariable[] args)
|
private boolean |
evaluateBin(ScriptVariable[] args)
|
private boolean |
evaluateBoundBox(ScriptVariable x2)
|
private boolean |
evaluateConnected(ScriptVariable[] args)
|
private boolean |
evaluateCross(ScriptVariable[] args)
|
private boolean |
evaluateData(ScriptVariable[] args)
|
private boolean |
evaluateDistance(ScriptVariable[] args,
int tok)
|
private boolean |
evaluateFind(ScriptVariable[] args)
|
private boolean |
evaluateFunction()
|
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,
boolean isAngle)
|
private boolean |
evaluatePlane(ScriptVariable[] args)
|
private boolean |
evaluatePoint(ScriptVariable[] args)
|
private boolean |
evaluatePointOrBitsetOperation(Token op,
ScriptVariable x2)
|
private boolean |
evaluateRandom(ScriptVariable[] args)
|
private boolean |
evaluateReplace(ScriptVariable[] args)
|
private boolean |
evaluateScript(ScriptVariable[] args,
int tok)
|
private boolean |
evaluateString(int tok,
ScriptVariable[] args)
|
private boolean |
evaluateSubstructure(ScriptVariable[] args)
|
private boolean |
evaluateSymop(ScriptVariable[] args,
boolean haveBitSet)
|
private boolean |
evaluateUserFunction(java.lang.String name,
ScriptVariable[] args,
int tok,
boolean isSelector)
|
private boolean |
evaluateWithin(ScriptVariable[] args)
|
private boolean |
evaluateWrite(ScriptVariable[] args)
|
(package private) ScriptVariable |
getResult(boolean allowUnderflow,
java.lang.String key)
|
private ScriptVariable |
getX()
|
private static boolean |
isOpFunc(Token op)
|
private boolean |
operate()
|
private javax.vecmath.Point4f |
planeValue(Token x)
|
private javax.vecmath.Point3f |
ptValue(ScriptVariable x)
|
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
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
ptid
private int ptid
ptx
private int ptx
skipping
private boolean skipping
ScriptMathProcessor
ScriptMathProcessor(ScriptEvaluator eval,
boolean isArrayItem,
boolean asVector)
getResult
ScriptVariable getResult(boolean allowUnderflow,
java.lang.String key)
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)
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()
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
evaluateDistance
private boolean evaluateDistance(ScriptVariable[] args,
int tok)
throws ScriptEvaluator.ScriptException
- Throws:
ScriptEvaluator.ScriptException
ptValue
private javax.vecmath.Point3f ptValue(ScriptVariable x)
throws ScriptEvaluator.ScriptException
- Throws:
ScriptEvaluator.ScriptException
planeValue
private javax.vecmath.Point4f planeValue(Token x)
evaluateMeasure
private boolean evaluateMeasure(ScriptVariable[] args,
boolean isAngle)
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)
evaluatePoint
private boolean evaluatePoint(ScriptVariable[] args)
evaluatePlane
private boolean evaluatePlane(ScriptVariable[] args)
throws ScriptEvaluator.ScriptException
- Throws:
ScriptEvaluator.ScriptException
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
evaluateArray
private boolean evaluateArray(ScriptVariable[] args)
evaluateMath
private boolean evaluateMath(ScriptVariable[] args,
int tok)
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)
evaluateConnected
private boolean evaluateConnected(ScriptVariable[] args)
evaluateSubstructure
private boolean evaluateSubstructure(ScriptVariable[] args)
throws ScriptEvaluator.ScriptException
- Throws:
ScriptEvaluator.ScriptException
operate
private boolean operate()
throws ScriptEvaluator.ScriptException
- Throws:
ScriptEvaluator.ScriptException
evaluateBoundBox
private boolean evaluateBoundBox(ScriptVariable x2)
evaluatePointOrBitsetOperation
private boolean evaluatePointOrBitsetOperation(Token op,
ScriptVariable x2)
throws ScriptEvaluator.ScriptException
- Throws:
ScriptEvaluator.ScriptException