ScriptExpr
Date: 2019-10-22

org.jmol.script

## Class ScriptExpr

- java.lang.Object
- - org.jmol.script.ScriptError
  - - org.jmol.script.ScriptParam
    - - org.jmol.script.ScriptExpr

- All Implemented Interfaces:
    JmolScriptEvaluator
  Direct Known Subclasses:
    ScriptEval

      abstract class ScriptExpr
      extends ScriptParam

  The ScriptExpr class holds the main functions for processing mathematical and atom selection expressions. The two methods, parameterExpression and atomExpression are the key starting points for this processing.

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `private CmdExt` | `cmdExt`
    `boolean` | `debugHigh`
    `private IsoExt` | `isoExt`
    `private MathExt` | `mathExt`
    `private javajs.util.P3` | `ptTemp`
    `private SmilesExt` | `smilesExt`
    `protected T[]` | `tempStatement`

    - ### Fields inherited from class org.jmol.script.ScriptParam

      `contextVariables, coordinatesAreFractional, fractionalPoint, isBondSet, iToken, pt1, pt2, pt3, slen, st, theTok, theToken, thisContext`

    - ### Fields inherited from class org.jmol.script.ScriptError

      `chk, error, ERROR_axisExpected, ERROR_backgroundModelError, ERROR_badArgumentCount, ERROR_badMillerIndices, ERROR_badRGBColor, ERROR_booleanExpected, ERROR_booleanOrNumberExpected, ERROR_booleanOrWhateverExpected, ERROR_cannotSet, ERROR_colorExpected, ERROR_colorOrPaletteRequired, ERROR_commandExpected, ERROR_coordinateOrNameOrExpressionRequired, ERROR_drawObjectNotDefined, ERROR_endOfStatementUnexpected, ERROR_expressionExpected, ERROR_expressionOrIntegerExpected, ERROR_filenameExpected, ERROR_fileNotFoundException, ERROR_incompatibleArguments, ERROR_insufficientArguments, ERROR_integerExpected, ERROR_integerOutOfRange, ERROR_invalidArgument, ERROR_invalidParameterOrder, ERROR_keywordExpected, ERROR_moCoefficients, ERROR_moIndex, ERROR_moModelError, ERROR_moOccupancy, ERROR_moOnlyOne, ERROR_multipleModelsDisplayedNotOK, ERROR_multipleModelsNotOK, ERROR_noData, ERROR_noPartialCharges, ERROR_noUnitCell, ERROR_numberExpected, ERROR_numberMustBe, ERROR_numberOutOfRange, ERROR_objectNameExpected, ERROR_planeExpected, ERROR_propertyNameExpected, ERROR_spaceGroupNotFound, ERROR_stringExpected, ERROR_stringOrIdentifierExpected, ERROR_tooManyPoints, ERROR_tooManyScriptLevels, ERROR_unrecognizedAtomProperty, ERROR_unrecognizedBondProperty, ERROR_unrecognizedCommand, ERROR_unrecognizedExpression, ERROR_unrecognizedObject, ERROR_unrecognizedParameter, ERROR_unrecognizedParameterWarning, ERROR_unrecognizedShowParameter, ERROR_what, ERROR_writeWhat, errorMessage, errorMessageUntranslated, errorType, iCommandError, ignoreError, vwr`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `ScriptExpr()`

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `javajs.util.BS` | `atomExpression(T[] code, int pcStart, int pcStop, boolean allowRefresh, boolean allowUnderflow, java.lang.Object[] ret, boolean andNotDeleted)`
    `javajs.util.BS` | `atomExpressionAt(int index)`
    `private javajs.util.BS` | `bitSetForModelFileNumber(int m)`
    `protected boolean` | `compareFloat(int tokOperator, float a, float b)`
    `protected javajs.util.BS` | `compareFloatData(int tokWhat, float[] data, int tokOperator, float comparisonFloat)`
    `private javajs.util.BS` | `compareInt(int tokWhat, int tokOperator, int ival)`
    `private javajs.util.BS` | `compareString(int tokWhat, int tokOperator, java.lang.String comparisonString)`
    `private boolean` | `compareStringValues(int tokOperator, java.lang.String propertyValue, java.lang.String comparisonValue)`
    `protected java.util.Map<java.lang.String,java.lang.Object>` | `getAssocArray(int i)`
    `protected javajs.util.BS` | `getAtomBits(int tokType, java.lang.Object specInfo)`
    `java.lang.Object` | `getBitsetProperty(javajs.util.BS bs, javajs.util.Lst<SV> pts, int tok, javajs.util.P3 ptRef, javajs.util.P4 planeRef, java.lang.Object tokenValue, java.lang.Object opValue, boolean useAtomMap, int index, boolean asVectorIfAll)`
    `private SV` | `getBitsetPropertySelector(int i, int xTok)`
    `CmdExt` | `getCmdExt()`
    `private javajs.util.BS` | `getComparison(T t, int tokWhat, int tokOp, java.lang.String strOp, float[] data)`
    `private java.lang.Object` | `getExt(java.lang.String type)`
    `IsoExt` | `getIsoExt()`
    `MathExt` | `getMathExt()`
    `protected static int` | `getSeqCode(T instruction)`
    `SmilesExt` | `getSmilesExt()`
    `private java.lang.Object` | `getStringObjectAsVariable(java.lang.Object obj)`
    `protected javajs.util.Lst<SV>` | `listBS(javajs.util.BS bs)`
    `protected boolean` | `noCopy(int i, int dir)`
    `private java.lang.Object` | `parameterExpression(int pt, int ptMax, java.lang.String key, boolean ignoreComma, boolean asVector, int ptAtom, boolean isArrayItem, java.util.Map<java.lang.String,SV> localVars, java.lang.String localVar, boolean isSpecialAssignment)` This is the primary driver of the RPN (reverse Polish notation) expression processor.
    `protected boolean` | `parameterExpressionBoolean(int pt, int ptMax)`
    `protected javajs.util.Lst<SV>` | `parameterExpressionList(int pt, int ptAtom, boolean isArrayItem)`
    `protected boolean` | `parameterExpressionSelect(java.util.Map<java.lang.String,SV> h, T[] where)`
    `protected java.lang.String` | `parameterExpressionString(int pt, int ptMax)`
    `protected SV` | `parameterExpressionToken(int pt)`
    `private void` | `setBitsetProperty(javajs.util.BS bs, int tok, int iValue, float fValue, T tokenValue)`
    `protected boolean` | `setStatement(T[] st0, int pt0)` provides support for @x and @{....} in statements.
    `protected SV` | `setVariable(int pt, int ptMax, java.lang.String key, boolean isSet)`

    - ### Methods inherited from class org.jmol.script.ScriptParam

      `atomCenterOrCoordinateParameter, centerParameter, centerParameterForModel, checkLast, checkLength, checkLength23, checkLength34, checkLengthErrorPt, checkToken, floatParameter, floatParameterRange, floatParameterSet, getArgbParam, getArgbParamLast, getArgbParamOrNone, getBondOrderFromString, getContextVariableAsVariable, getFloatEncodedInt, getHklPlane, getMadParameter, getParameter, getPartialBondOrderFromFloatEncodedInt, getPoint3f, getPoint4f, getPointArray, getPointOrCenterVector, getPointOrPlane, getPointVector, getQuaternionParameter, getToken, getVarParameter, hklParameter, intParameter, intParameterRange, isArrayParameter, isCenterParameter, isColorParam, isFloatParameter, isPoint3f, listParameter, listParameter4, modelNumberParameter, objectNameParameter, optParameterAsString, paramAsStr, planeParameter, setBooleanProperty, setFloatProperty, setIntProperty, setStringProperty, stringParameter, stringParameterSet, tickParamAsStr, tokAt, xypParameter, xyzpParameter`

    - ### Methods inherited from class org.jmol.script.ScriptError

      `bad, error, errorMore, errorStr, errorStr2, errorString, evalError, getErrorLineMessage, getErrorMessage, getErrorMessageUntranslated, integerOutOfRange, invArg, numberOutOfRange, setCursorWait, setErrorMessage, showStringPrint, warning`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

    - ### Methods inherited from interface org.jmol.api.JmolScriptEvaluator

      `checkScriptSilent, checkSelect, compileScriptFile, compileScriptString, deleteAtomsInVariables, evalFunctionFloat, evalParallel, evaluateCompiledScript, evaluateExpression, getAllowJSThreads, getAtomBitSet, getNextStatement, getScript, getScriptContext, getThisContext, haltExecution, isExecuting, isPaused, isStateScript, isStepping, isStopped, loadFileResourceAsync, notifyResumeStatus, pauseExecution, pushContextDown, resumeEval, resumePausedExecution, runScript, runScriptBuffer, setCompiler, setDebugging, setObjectPropSafe, setStatic, setViewer, stepPausedExecution, stopScriptThreads`

- - ### Field Detail

    - #### debugHigh

          public boolean debugHigh

    - #### cmdExt

          private CmdExt cmdExt

    - #### isoExt

          private IsoExt isoExt

    - #### mathExt

          private MathExt mathExt

    - #### smilesExt

          private SmilesExt smilesExt

    - #### tempStatement

          protected T[] tempStatement

    - #### ptTemp

          private javajs.util.P3 ptTemp

  - ### Constructor Detail

    - #### ScriptExpr

          ScriptExpr()

  - ### Method Detail

    - #### getCmdExt

          public CmdExt getCmdExt()

    - #### getIsoExt

          public IsoExt getIsoExt()

    - #### getMathExt

          public MathExt getMathExt()

    - #### getSmilesExt

          public SmilesExt getSmilesExt()

    - #### getExt

          private java.lang.Object getExt(java.lang.String type)

    - #### parameterExpressionList

          protected javajs.util.Lst<SV> parameterExpressionList(int pt,
                                                                int ptAtom,
                                                                boolean isArrayItem)
                                                         throws ScriptException

      Throws:
        `ScriptException`

    - #### parameterExpressionString

          protected java.lang.String parameterExpressionString(int pt,
                                                               int ptMax)
                                                        throws ScriptException

      Throws:
        `ScriptException`

    - #### parameterExpressionBoolean

          protected boolean parameterExpressionBoolean(int pt,
                                                       int ptMax)
                                                throws ScriptException

      Throws:
        `ScriptException`

    - #### parameterExpressionToken

          protected SV parameterExpressionToken(int pt)
                                         throws ScriptException

      Throws:
        `ScriptException`

    - #### parameterExpressionSelect

          protected boolean parameterExpressionSelect(java.util.Map<java.lang.String,SV> h,
                                                      T[] where)
                                               throws ScriptException

      Throws:
        `ScriptException`

    - #### parameterExpression

          private java.lang.Object parameterExpression(int pt,
                                                       int ptMax,
                                                       java.lang.String key,
                                                       boolean ignoreComma,
                                                       boolean asVector,
                                                       int ptAtom,
                                                       boolean isArrayItem,
                                                       java.util.Map<java.lang.String,SV> localVars,
                                                       java.lang.String localVar,
                                                       boolean isSpecialAssignment)
                                                throws ScriptException

      This is the primary driver of the RPN (reverse Polish notation) expression processor. It handles all math outside of a "traditional" Jmol SELECT/RESTRICT context. [Object atomExpression() takes care of that, and also uses the RPN class.]
      Parameters:
        `pt` - token index in statement start of expression or negative for one expression only.
        `ptMax` - token index in statement end of expression
        `key` - variable name for debugging reference only -- null indicates return Boolean -- "" indicates return String
        `ignoreComma` -
        `asVector` - a flag passed on to RPN;
        `ptAtom` - this is a for() or select() function with a specific atom selected
        `isArrayItem` - we are storing A[x] = ... so we need to deliver "x" as well
        `localVars` - see below -- lists all nested for(x, {exp}, select(y, {ex},...)) variables
        `localVar` - x or y in above for(), select() examples
        `isSpecialAssignment` - x[n] = ....
      Returns:
        either a vector or a value, caller's choice.
      Throws:
        `ScriptException` - errors are thrown directly to the Eval error system.

    - #### atomExpressionAt

          public javajs.util.BS atomExpressionAt(int index)
                                          throws ScriptException

      Throws:
        `ScriptException`

    - #### atomExpression

          public javajs.util.BS atomExpression(T[] code,
                                               int pcStart,
                                               int pcStop,
                                               boolean allowRefresh,
                                               boolean allowUnderflow,
                                               java.lang.Object[] ret,
                                               boolean andNotDeleted)
                                        throws ScriptException

      Parameters:
        `code` -
        `pcStart` -
        `pcStop` -
        `allowRefresh` -
        `allowUnderflow` -
        `ret` - -- true return value; may not be a BS
        `andNotDeleted` - IGNORED
      Returns:
        atom bitset
      Throws:
        `ScriptException`

    - #### getComparison

          private javajs.util.BS getComparison(T t,
                                               int tokWhat,
                                               int tokOp,
                                               java.lang.String strOp,
                                               float[] data)
                                        throws ScriptException

      Throws:
        `ScriptException`

    - #### noCopy

          protected boolean noCopy(int i,
                                   int dir)

    - #### getAssocArray

          protected java.util.Map<java.lang.String,java.lang.Object> getAssocArray(int i)
                                                                            throws ScriptException

      Throws:
        `ScriptException`

    - #### listBS

          protected javajs.util.Lst<SV> listBS(javajs.util.BS bs)

    - #### compareFloatData

          protected javajs.util.BS compareFloatData(int tokWhat,
                                                    float[] data,
                                                    int tokOperator,
                                                    float comparisonFloat)

      Parameters:
        `tokWhat` -
        `data` -
        `tokOperator` -
        `comparisonFloat` -
      Returns:
        BitSet

    - #### compareFloat

          protected boolean compareFloat(int tokOperator,
                                         float a,
                                         float b)

    - #### compareString

          private javajs.util.BS compareString(int tokWhat,
                                               int tokOperator,
                                               java.lang.String comparisonString)
                                        throws ScriptException

      Throws:
        `ScriptException`

    - #### compareStringValues

          private boolean compareStringValues(int tokOperator,
                                              java.lang.String propertyValue,
                                              java.lang.String comparisonValue)
                                       throws ScriptException

      Throws:
        `ScriptException`

    - #### compareInt

          private javajs.util.BS compareInt(int tokWhat,
                                            int tokOperator,
                                            int ival)

    - #### getBitsetPropertySelector

          private SV getBitsetPropertySelector(int i,
                                               int xTok)
                                        throws ScriptException

      Throws:
        `ScriptException`

    - #### getBitsetProperty

          public java.lang.Object getBitsetProperty(javajs.util.BS bs,
                                                    javajs.util.Lst<SV> pts,
                                                    int tok,
                                                    javajs.util.P3 ptRef,
                                                    javajs.util.P4 planeRef,
                                                    java.lang.Object tokenValue,
                                                    java.lang.Object opValue,
                                                    boolean useAtomMap,
                                                    int index,
                                                    boolean asVectorIfAll)
                                             throws ScriptException

      Throws:
        `ScriptException`

    - #### bitSetForModelFileNumber

          private javajs.util.BS bitSetForModelFileNumber(int m)

    - #### getStringObjectAsVariable

          private java.lang.Object getStringObjectAsVariable(java.lang.Object obj)

    - #### getAtomBits

          protected javajs.util.BS getAtomBits(int tokType,
                                               java.lang.Object specInfo)

    - #### getSeqCode

          protected static int getSeqCode(T instruction)

    - #### setVariable

          protected SV setVariable(int pt,
                                   int ptMax,
                                   java.lang.String key,
                                   boolean isSet)
                            throws ScriptException

      Parameters:
        `pt` - starting point in command token sequence
        `ptMax` - ending point in command token sequenec, possibly -1 for "all"
        `key` - the variable name to save the result in. This must be a standard user variable, either local or global
        `isSet` - from Set ... or Var .... or just xxx ....
      Returns:
        a variable or null
      Throws:
        `ScriptException`

    - #### setBitsetProperty

          private void setBitsetProperty(javajs.util.BS bs,
                                         int tok,
                                         int iValue,
                                         float fValue,
                                         T tokenValue)
                                  throws ScriptException

      Throws:
        `ScriptException`

    - #### setStatement

          protected boolean setStatement(T[] st0,
                                         int pt0)
                                  throws ScriptException

      provides support for @x and @{....} in statements. The compiler passes on these, because they must be integrated with the statement dynamically.
      Parameters:
        `st0` - aaToken[i]
        `pt0` -
      Returns:
        a fixed token set -- with possible overrun of unused null tokens
      Throws:
        `ScriptException`