org.jmol.script
Class ScriptCompiler

java.lang.Object
  extended by org.jmol.script.ScriptCompilationTokenParser
      extended by org.jmol.script.ScriptCompiler

public class ScriptCompiler
extends ScriptCompilationTokenParser


Field Summary
private  Token[][] aatokenCompiled
           
private  int braceCount
           
private  int bracketCount
           
private  int cchScript
           
private  int cchToken
           
(package private)  char chFirst
           
private  java.lang.String comment
           
private  java.util.Hashtable contextVariables
           
private static int CONTINUE
           
private  boolean endOfLine
           
private static int EOL
           
private static int ERROR
           
private  java.lang.String filename
           
private  ScriptFlowContext flowContext
           
private  int forPoint3
           
private  boolean haveComments
           
private  int iBrace
           
private  int ichBrace
           
private  boolean iHaveQuotedString
           
private  boolean isCheckOnly
           
private  boolean isEndOfCommand
           
private  boolean isShowCommand
           
private  boolean isShowScriptOutput
           
private  boolean isSilent
           
private  boolean isUserToken
           
private  int[][] lineIndices
           
private  short[] lineNumbers
           
private  java.util.List lltoken
           
private  int lnLength
           
private static java.lang.String LOAD_TYPES
          The Compiler class is really two parts -- Compiler.class going from characters to tokens CompilationTokenParser further syntax checking and modifications The data structures follow the following sequences: String script ==> List lltoken[][] --> Token[][] aatokenCompiled[][] A given command goes through the sequence: String characters --> Token token --> List ltoken[] --> Token[][] aatokenCompiled[][]
private  java.util.List ltoken
           
private  boolean needRightParen
           
private  int nSemiSkip
           
private static int OK
           
private static int OK2
           
private  int parenCount
           
private  boolean preDefining
           
private  int ptSemi
           
(package private)  int pushCount
           
(package private)  java.lang.String scriptExtensions
           
private  int setBraceCount
           
private  int setEqualPt
           
private  ScriptFunction thisFunction
           
private  int tokLastMath
           
private  java.util.List vBraces
           
private  java.util.List vFunctionStack
           
(package private)  java.util.List vPush
           
 
Fields inherited from class org.jmol.script.ScriptCompilationTokenParser
atokenInfix, ERROR_badArgumentCount, ERROR_badContext, ERROR_commandExpected, ERROR_endOfCommandUnexpected, ERROR_invalidExpressionToken, ERROR_missingEnd, ERROR_tokenExpected, ERROR_tokenUnexpected, ERROR_unrecognizedParameter, ERROR_unrecognizedToken, errorLine, errorMessage, errorMessageUntranslated, errorType, haveString, htUserFunctions, ichComment, ichCurrentCommand, ichEnd, ichToken, iCommand, isCommaAsOrAllowed, isEmbeddedExpression, isMathExpressionCommand, isNewSet, isSetBrace, isSetOrDefine, isStateScript, itokenInfix, lastFlowCommand, lastToken, lineCurrent, logMessages, nTokens, ptNewSetModifier, script, theTok, theToken, tokCommand, tokenAndEquals, tokenCommand, viewer
 
Constructor Summary
ScriptCompiler(ScriptCompiler compiler)
           
ScriptCompiler(Viewer viewer)
           
 
Method Summary
(package private) static void addContextVariable(java.util.Hashtable contextVariables, java.lang.String ident)
           
private  void addContextVariable(java.lang.String ident)
           
private  void addTokenToPrefix(Token token)
           
private  boolean charToken()
           
private  boolean checkFlowCommand(java.lang.String ident)
           
private  boolean checkFlowEnd(int tok, java.lang.String ident, int pt1)
           
private  int checkFlowEndBrace()
           
private  boolean checkFlowStartBrace(boolean atEnd)
           
private  boolean checkNewSetCommand()
           
private  int checkSpecialParameterSyntax()
           
private  void checkUnquotedFileName()
           
private  java.lang.String cleanScriptComments(java.lang.String script)
          allows for three kinds of comments.
(package private)  ScriptContext compile(java.lang.String filename, java.lang.String script, boolean isPredefining, boolean isSilent, boolean debugScript, boolean isCheckOnly)
           
private  boolean compile0(boolean isFull)
           
private  boolean compileCommand()
           
private  boolean eol(char ch)
           
(package private) static boolean eol(char ch, int nSkip)
           
private  int ERROR(int error)
           
private  int ERROR(int error, java.lang.String value)
           
private  int forceFlowEnd(Token token)
           
private  boolean getData(java.lang.String key)
           
static java.lang.String getEmbeddedScript(java.lang.String script)
           
private  java.lang.String getPrefixToken()
           
(package private)  java.lang.String getUnescapedStringLiteral()
           
private  boolean handleError()
           
static int ichMathTerminator(java.lang.String script, int ichT, int len)
          For @{....}
private  int incrementLineCount(java.lang.String str)
           
(package private) static boolean isBreakableContext(int tok)
           
private  boolean isContextVariable(java.lang.String ident)
           
private  boolean isLineContinuation(int ichT, boolean checkMathop)
           
private static boolean isSpaceOrTab(char ch)
           
(package private)  java.util.BitSet lookingAtBitset()
           
private  boolean lookingAtBraceSyntax()
           
private  int lookingAtComment()
           
private  boolean lookingAtDecimal()
           
private  boolean lookingAtEndOfLine()
           
private  boolean lookingAtEndOfStatement()
           
private  float lookingAtExponential()
           
private  boolean lookingAtImpliedString(boolean allowSpace)
          An "implied string" is a parameter that is not quoted but because of its position in a command is implied to be a string.
private  int lookingAtInteger()
           
private  boolean lookingAtLeadingWhitespace()
           
private  boolean lookingAtLoadFormat()
           
private  boolean lookingAtLookupToken(int ichT)
           
private  boolean lookingAtMathContinuation(int ichT)
           
private  java.lang.Object lookingAtMatrix()
           
private  boolean lookingAtObjectID(boolean allowWildID)
           
private  boolean lookingAtSeqcode()
           
private  boolean lookingAtString(boolean allowPrime)
           
private  int nCharNewLine(int ichT)
           
private  char nextChar()
           
private  int parseCommandParameter(java.lang.String ident)
           
private  int parseKnownToken(java.lang.String ident)
           
private  ScriptContext parseScript(boolean doFull)
           
(package private)  ScriptContext parseScriptForTokens(java.lang.String script)
          return a structure that is only the first part of the process - identifying lines and commands for the scriptEditor
private  int processTokenList(short iLine, boolean doCompile)
           
private  void replaceCommand(Token token)
           
private  void setAaTokenCompiled()
           
private  Token setCommand(Token token)
           
private  Token setNewSetCommand(boolean isSetBrace, java.lang.String ident)
           
static java.lang.String[] splitCommandLine(java.lang.String cmd)
          used by app to separate a command line into three sections: prefix....;cmd ........
protected  int tokAt(int i)
           
private  Token tokenAt(int i)
           
 
Methods inherited from class org.jmol.script.ScriptCompilationTokenParser
commandExpected, compileExpression, compileExpressions, error, error, error, error, errorString, isUserFunction, tokenAttr
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

LOAD_TYPES

private static final java.lang.String LOAD_TYPES
The Compiler class is really two parts -- Compiler.class going from characters to tokens CompilationTokenParser further syntax checking and modifications The data structures follow the following sequences: String script ==> List lltoken[][] --> Token[][] aatokenCompiled[][] A given command goes through the sequence: String characters --> Token token --> List ltoken[] --> Token[][] aatokenCompiled[][]

See Also:
Constant Field Values

filename

private java.lang.String filename

isSilent

private boolean isSilent

contextVariables

private java.util.Hashtable contextVariables

aatokenCompiled

private Token[][] aatokenCompiled

lineNumbers

private short[] lineNumbers

lineIndices

private int[][] lineIndices

lnLength

private int lnLength

preDefining

private boolean preDefining

isShowScriptOutput

private boolean isShowScriptOutput

isCheckOnly

private boolean isCheckOnly

haveComments

private boolean haveComments

scriptExtensions

java.lang.String scriptExtensions

thisFunction

private ScriptFunction thisFunction

flowContext

private ScriptFlowContext flowContext

ltoken

private java.util.List ltoken

lltoken

private java.util.List lltoken

vBraces

private java.util.List vBraces

ichBrace

private int ichBrace

cchToken

private int cchToken

cchScript

private int cchScript

nSemiSkip

private int nSemiSkip

parenCount

private int parenCount

braceCount

private int braceCount

setBraceCount

private int setBraceCount

bracketCount

private int bracketCount

ptSemi

private int ptSemi

forPoint3

private int forPoint3

setEqualPt

private int setEqualPt

iBrace

private int iBrace

iHaveQuotedString

private boolean iHaveQuotedString

isEndOfCommand

private boolean isEndOfCommand

needRightParen

private boolean needRightParen

endOfLine

private boolean endOfLine

comment

private java.lang.String comment

OK

private static final int OK
See Also:
Constant Field Values

OK2

private static final int OK2
See Also:
Constant Field Values

CONTINUE

private static final int CONTINUE
See Also:
Constant Field Values

EOL

private static final int EOL
See Also:
Constant Field Values

ERROR

private static final int ERROR
See Also:
Constant Field Values

tokLastMath

private int tokLastMath

vFunctionStack

private java.util.List vFunctionStack

isShowCommand

private boolean isShowCommand

isUserToken

private boolean isUserToken

vPush

java.util.List vPush

pushCount

int pushCount

chFirst

char chFirst
Constructor Detail

ScriptCompiler

public ScriptCompiler(Viewer viewer)

ScriptCompiler

public ScriptCompiler(ScriptCompiler compiler)
Method Detail

parseScriptForTokens

ScriptContext parseScriptForTokens(java.lang.String script)
return a structure that is only the first part of the process - identifying lines and commands for the scriptEditor

Parameters:
script -
Returns:
ScriptContext

parseScript

private ScriptContext parseScript(boolean doFull)

compile

ScriptContext compile(java.lang.String filename,
                      java.lang.String script,
                      boolean isPredefining,
                      boolean isSilent,
                      boolean debugScript,
                      boolean isCheckOnly)

addContextVariable

private void addContextVariable(java.lang.String ident)

addContextVariable

static void addContextVariable(java.util.Hashtable contextVariables,
                               java.lang.String ident)

isContextVariable

private boolean isContextVariable(java.lang.String ident)

cleanScriptComments

private java.lang.String cleanScriptComments(java.lang.String script)
allows for three kinds of comments. NOTE: closing involves asterisks and slash together, but that can't be shown here. 1) /** .... ** / super-comment 2) /* ..... * / may be INSIDE /**....** /). 3) \n//.....\n single-line comments -- like #, but removed entirely The reason is that /* ... * / will appear as standard in MOVETO command but we still might want to escape it, so around that you can have /** .... ** / The terminator is not necessary -- so you can quickly escape anything in a file after /** or /* In addition, we can have [/*|/**] .... **** Jmol Embedded Script **** [script commands] [** /|* /] Then ONLY that script is taken. This is a powerful and simple way then to include Jmol scripting in any file -- including, for example, HTML as an HTML comment. Just send the whole file to Jmol, and it will find its script!

Parameters:
script -
Returns:
cleaned script

getEmbeddedScript

public static java.lang.String getEmbeddedScript(java.lang.String script)

addTokenToPrefix

private void addTokenToPrefix(Token token)

compile0

private boolean compile0(boolean isFull)

setAaTokenCompiled

private void setAaTokenCompiled()

lookingAtLeadingWhitespace

private boolean lookingAtLeadingWhitespace()

isLineContinuation

private boolean isLineContinuation(int ichT,
                                   boolean checkMathop)

lookingAtMathContinuation

private boolean lookingAtMathContinuation(int ichT)

lookingAtEndOfLine

private boolean lookingAtEndOfLine()

nCharNewLine

private int nCharNewLine(int ichT)

lookingAtEndOfStatement

private boolean lookingAtEndOfStatement()

lookingAtComment

private int lookingAtComment()

processTokenList

private int processTokenList(short iLine,
                             boolean doCompile)

compileCommand

private boolean compileCommand()

tokenAt

private Token tokenAt(int i)

tokAt

protected int tokAt(int i)
Overrides:
tokAt in class ScriptCompilationTokenParser

setCommand

private Token setCommand(Token token)

replaceCommand

private void replaceCommand(Token token)

getPrefixToken

private java.lang.String getPrefixToken()

checkSpecialParameterSyntax

private int checkSpecialParameterSyntax()

lookingAtMatrix

private java.lang.Object lookingAtMatrix()

parseKnownToken

private int parseKnownToken(java.lang.String ident)

checkNewSetCommand

private boolean checkNewSetCommand()

parseCommandParameter

private int parseCommandParameter(java.lang.String ident)

setNewSetCommand

private Token setNewSetCommand(boolean isSetBrace,
                               java.lang.String ident)

nextChar

private char nextChar()

checkUnquotedFileName

private void checkUnquotedFileName()

checkFlowStartBrace

private boolean checkFlowStartBrace(boolean atEnd)

checkFlowEndBrace

private int checkFlowEndBrace()

forceFlowEnd

private int forceFlowEnd(Token token)

isBreakableContext

static boolean isBreakableContext(int tok)

checkFlowCommand

private boolean checkFlowCommand(java.lang.String ident)

checkFlowEnd

private boolean checkFlowEnd(int tok,
                             java.lang.String ident,
                             int pt1)

getData

private boolean getData(java.lang.String key)

incrementLineCount

private int incrementLineCount(java.lang.String str)

isSpaceOrTab

private static boolean isSpaceOrTab(char ch)

eol

private boolean eol(char ch)

eol

static boolean eol(char ch,
                   int nSkip)

lookingAtBraceSyntax

private boolean lookingAtBraceSyntax()

lookingAtString

private boolean lookingAtString(boolean allowPrime)

getUnescapedStringLiteral

java.lang.String getUnescapedStringLiteral()

lookingAtLoadFormat

private boolean lookingAtLoadFormat()

lookingAtImpliedString

private boolean lookingAtImpliedString(boolean allowSpace)
An "implied string" is a parameter that is not quoted but because of its position in a command is implied to be a string. First we must exclude @xxxx. Then we consume the entire math syntax @{......} or any set of characters not involving white space. echo, hover, label, message, pause are odd-valued; no initial parsing of variables for them.

Parameters:
allowSpace -
Returns:
true or false

ichMathTerminator

public static int ichMathTerminator(java.lang.String script,
                                    int ichT,
                                    int len)
For @{....}

Parameters:
script -
ichT -
len -
Returns:
position of "}"

lookingAtExponential

private float lookingAtExponential()

lookingAtDecimal

private boolean lookingAtDecimal()

lookingAtSeqcode

private boolean lookingAtSeqcode()

lookingAtInteger

private int lookingAtInteger()

lookingAtBitset

java.util.BitSet lookingAtBitset()

lookingAtObjectID

private boolean lookingAtObjectID(boolean allowWildID)

lookingAtLookupToken

private boolean lookingAtLookupToken(int ichT)

charToken

private boolean charToken()

ERROR

private int ERROR(int error)

ERROR

private int ERROR(int error,
                  java.lang.String value)

handleError

private boolean handleError()

splitCommandLine

public static java.lang.String[] splitCommandLine(java.lang.String cmd)
used by app to separate a command line into three sections: prefix....;cmd ........ token where token can be a just-finished single or double quote or a string of characters

Parameters:
cmd -
Returns:
String[] {prefix, cmd..... token}