org.jmol.viewer
Class ScriptMathProcessor

java.lang.Object
  extended by org.jmol.viewer.ScriptMathProcessor

 class ScriptMathProcessor
extends java.lang.Object


Field Summary
private  boolean asVector
           
private  int braceCount
           
private  ScriptEvaluator eval
           
private  int ifPt
           
private  char[] ifStack
           
private  int incrementX
           
private  boolean isArrayItem
           
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
private  boolean logMessages
           
private  int oPt
           
private  Token[] oStack
           
private  int parenCount
           
private  int ptid
           
private  int ptx
           
private  boolean skipping
           
private  int squareCount
           
private  Viewer viewer
           
private  boolean wasX
           
private  int xPt
           
private  ScriptVariable[] xStack
           
 
Constructor Summary
ScriptMathProcessor(ScriptEvaluator eval, boolean isArrayItem, boolean asVector)
           
 
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
 

Field Detail

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

ScriptMathProcessor

ScriptMathProcessor(ScriptEvaluator eval,
                    boolean isArrayItem,
                    boolean asVector)
Method Detail

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