Package org.jmol.script
Class ScriptCompiler
java.lang.Object
org.jmol.script.ScriptTokenParser
org.jmol.script.ScriptCompiler
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate T[][]private intprivate intprivate booleanprivate intprivate intprivate intprivate intprivate booleanprivate charprivate Stringprivate static final intprivate booleanprivate static final intprivate static final intprivate Stringprivate ScriptFlowContextprivate ScriptFlowContextprivate intprivate booleanprivate booleanprivate intprivate intprivate Stringprivate Stringprivate booleanprivate booleanprivate booleanprivate booleanprivate booleanprivate booleanprivate booleanprivate booleanprivate booleanprivate booleanprivate booleanprivate booleanprivate booleanprivate int[][]private short[]private javajs.util.Lst<T[]>private intprivate javajs.util.Lst<T>private booleanprivate intprivate static final intprivate static final intprivate intprivate booleanprivate intprivate intprivate static final int(package private) Stringprivate intprivate intprivate ScriptFunctionprivate intprivate intprivate javajs.util.Lst<T>private javajs.util.Lst<ScriptFunction>private javajs.util.Lst<T>Fields inherited from class org.jmol.script.ScriptTokenParser
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, haveMacro, 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, vwr -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate void(package private) static voidaddContextVariable(Map<String, SV> contextVariables, String name) private voidprivate voidaddTokenToPrefix(T token) private charcharAt(int i) private intcheckFlowCommand(String ident) private booleancheckFlowEnd(int tok, String ident, int pt1, boolean isExplicitEnd) private intprocess a pending explicit right brace }private booleancheckFlowStartBrace(boolean atEnd) private booleanprivate intCheck for special parameters, including: +, -, \, *, /, &, |, =, period, or [, single or double quote, command-specific parameters, $....private voidprivate StringcleanScriptComments(String script) allows for three kinds of comments.(package private) ScriptContextcompile(String filename, String script, boolean isPredefining, boolean isSilent, boolean debugScript, boolean isCheckOnly) private booleancompile0(boolean isFull) private booleanprivate booleaneol(char ch) look for end-of-line character \r, \n, or ; that is not within a command such as for (var i=0;i < 10; i++)private intERROR(int error) private intprivate voidfixFlowAddLine(ScriptFlowContext flowContext) private Tprivate intforceFlowEnd(T token) private booleanprivate intprivate StringgetUnescapedStringLiteral(boolean isFileName) lookingAtString returned true, and we need to unescape any t, r, n, ", ', x, u, or backslash after a backslashprivate booleanprivate intincrementLineCount(String str) (package private) static booleanisBreakableContext(int tok) private booleanisContextVariable(String ident) private booleancheck for proper sequence: if...[any number of elseif]...[zero or one else]...[endif]private booleanisLineContinuation(int ichT, boolean checkMathop) private static booleanisSpaceOrTab(char ch) private booleanCheck for a set of characters that does not start with double quote or at-sign and terminates with #, }, or an end of line.(package private) javajs.util.BSprivate intprivate booleanprivate booleanLook for end of script or a new line.private Floatprivate booleanlookingAtImpliedString(boolean allowSpace, boolean allowEquals, boolean allowSptParen) 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 intprivate booleanprivate booleanlookingAtLoadFormat(boolean allchar) private booleanlookingAtLookupToken(int ichT) private booleanlookingAtMathContinuation(int ichT) private Objectprivate booleanLook for a valid $...private booleanprivate booleanlook for '{' at the start of a command, allowing for syntaxes {xxx}.yyy = ...private booleanlookingAtString(boolean allowPrime) look for a quoted string, possibly allowing single quotes.private booleanLook for valid terminating semicolon -- one not within for(), for example.private intnCharNewLine(int ichT) Check for line ending at this point in script.private voidnewContextVariable(String ident) private intparseCommandParameter(short iLine, boolean isFull) private intprivate intprocessTokenList(short iLine, boolean doCompile) private voidpushContext(T t) private voidreplaceCommand(T token) private voidprivate TsetCommand(T token) private voidsetFlowEnd(int tokCommand, String ident) generate a new end token with pointer to the start or to default as the intValue and set it as the command tokenprivate TsetNewSetCommand(boolean isSetBrace, String ident) protected inttokAt(int i) private TtokenAt(int i) private voidtokenizePlusPlus(int tok, boolean isPlusPlusX) static StringunescapeString(String script, int ich, int nChar) private booleanCheck for improperly parsed implied script command: only two tokens: [implied script] xxx.SORT/REVERSE/PUSH/POP more than two tokens: xxxx.spt(3,4,5)Methods inherited from class org.jmol.script.ScriptTokenParser
commandExpected, compileExpression, compileExpressions, error, errorIntStr2, errorStr, errorStr2, errorString, isUserFunction, tokenAttr
-
Field Details
-
filename
-
isSilent
private boolean isSilent -
contextVariables
-
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 -
isPrivateFunc
private boolean isPrivateFunc -
isPrivateScript
private boolean isPrivateScript -
scriptExtensions
String scriptExtensions -
thisFunction
-
flowContext
-
ltoken
-
lltoken
-
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
-
OK
private static final int OK- See Also:
-
OK2
private static final int OK2- See Also:
-
CONTINUE
private static final int CONTINUE- See Also:
-
EOL
private static final int EOL- See Also:
-
ERROR
private static final int ERROR- See Also:
-
RESTART
private static final int RESTART- See Also:
-
tokLastMath
private int tokLastMath -
checkImpliedScriptCmd
private boolean checkImpliedScriptCmd -
vFunctionStack
-
allowMissingEnd
private boolean allowMissingEnd -
isShowCommand
private boolean isShowCommand -
isComment
private boolean isComment -
isUserToken
private boolean isUserToken -
implicitString
private boolean implicitString -
tokInitialPlusPlus
private int tokInitialPlusPlus -
afterWhite
private int afterWhite -
isDotDot
private boolean isDotDot -
ident
-
identLC
-
vPush
-
pushCount
private int pushCount -
forceFlowContext
-
isWhere
private boolean isWhere -
haveENDIF
private boolean haveENDIF -
chFirst
private char chFirst -
afterMath
private int afterMath
-
-
Constructor Details
-
ScriptCompiler
- Parameters:
vwr-
-
-
Method Details
-
compile
ScriptContext compile(String filename, String script, boolean isPredefining, boolean isSilent, boolean debugScript, boolean isCheckOnly) -
newContextVariable
-
addContextVariable
-
isContextVariable
-
cleanScriptComments
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
-
addTokenToPrefix
-
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()Look for end of script or a new line. Set ichEnd to this point or end of string; if found, set cchToken to the number of eol characters;- Returns:
- true if eol
-
nCharNewLine
private int nCharNewLine(int ichT) Check for line ending at this point in script.- Parameters:
ichT-- Returns:
- 1 if \n or \r, 2 if \r\n, or 0 otherwise (including end of script)
-
lookingAtTerminator
private boolean lookingAtTerminator()Look for valid terminating semicolon -- one not within for(), for example.- Returns:
- true if valid semi
-
lookingAtComment
private int lookingAtComment() -
charAt
private char charAt(int i) -
processTokenList
private int processTokenList(short iLine, boolean doCompile) -
addBrace
- Parameters:
t- could be { or } or a command such as FOR or WHILE
-
pushContext
-
wasImpliedScript
private boolean wasImpliedScript()Check for improperly parsed implied script command: only two tokens: [implied script] xxx.SORT/REVERSE/PUSH/POP more than two tokens: xxxx.spt(3,4,5)- Returns:
- true if found
-
compileCommand
private boolean compileCommand() -
tokenAt
-
tokAt
protected int tokAt(int i) - Overrides:
tokAtin classScriptTokenParser
-
setCommand
-
replaceCommand
-
getPrefixToken
private int getPrefixToken() -
checkSpecialParameterSyntax
private int checkSpecialParameterSyntax()Check for special parameters, including: +, -, \, *, /, &, |, =, period, or [, single or double quote, command-specific parameters, $.... identifiers, exponential notation, decimal numbers, sequence codes, integers, bitsets ({....}) or [{....}], or matrices- Returns:
- OK, CONTINUE, or ERROR
-
addNumber
-
lookingAtMatrix
-
parseKnownToken
private int parseKnownToken() -
tokenizePlusPlus
private void tokenizePlusPlus(int tok, boolean isPlusPlusX) -
checkNewSetCommand
private boolean checkNewSetCommand() -
parseCommandParameter
private int parseCommandParameter(short iLine, boolean isFull) -
setNewSetCommand
-
checkUnquotedFileName
private void checkUnquotedFileName() -
checkFlowStartBrace
private boolean checkFlowStartBrace(boolean atEnd) -
checkFlowEndBrace
private int checkFlowEndBrace()process a pending explicit right brace }- Returns:
- continuation status
-
forceFlowEnd
-
flowStart
-
isBreakableContext
static boolean isBreakableContext(int tok) -
checkFlowCommand
-
setFlowEnd
generate a new end token with pointer to the start or to default as the intValue and set it as the command token- Parameters:
tokCommand- end or endifident- "end" or "endif"
-
isFlowIfContextOK
check for proper sequence: if...[any number of elseif]...[zero or one else]...[endif]- Parameters:
f-- Returns:
- true if OK
-
checkFlowEnd
- Parameters:
tok- the XXX in END XXXident-pt1-isExplicitEnd- actual END IF or END FOR, etc.- Returns:
- true if no error
-
fixFlowAddLine
-
getData
-
incrementLineCount
-
isSpaceOrTab
private static boolean isSpaceOrTab(char ch) -
eol
private boolean eol(char ch) look for end-of-line character \r, \n, or ; that is not within a command such as for (var i=0;i < 10; i++)- Parameters:
ch-- Returns:
- true if end of line
-
lookingAtSetBraceSyntax
private boolean lookingAtSetBraceSyntax()look for '{' at the start of a command, allowing for syntaxes {xxx}.yyy = ... or {xxx}[yy] = ...- Returns:
- true only if found
-
lookingAtString
private boolean lookingAtString(boolean allowPrime) look for a quoted string, possibly allowing single quotes.- Parameters:
allowPrime- cd, echo, gotocmd, help, hover, javascript, label, message, and pause all are implicitly strings. You CAN use "..." but you don't have to, and you cannot use '...'. This way the introduction of single quotes as an equivalent of double quotes cannot break existing scripts. -- BH 06/2009- Returns:
- true only if found
-
getUnescapedStringLiteral
lookingAtString returned true, and we need to unescape any t, r, n, ", ', x, u, or backslash after a backslash- Parameters:
isFileName- in certain cases, such as load "c:\temp\myfile.xyz" we only want to decode unicode, not other characters.- Returns:
- quoted string
-
unescapeString
-
lookingAtLoadFormat
private boolean lookingAtLoadFormat(boolean allchar) -
lookingAtImpliedString
private boolean lookingAtImpliedString(boolean allowSpace, boolean allowEquals, boolean allowSptParen) 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 the- Parameters:
allowSpace- as in commands such as echoallowEquals- as in the load command, first parameter load =xxx but NOT any other commandallowSptParen- specifically for script/load command, first parameter xxx.spt(3,4,4)- Returns:
- true or false
-
lookingAtExponential
-
lookingAtDecimal
private boolean lookingAtDecimal() -
lookingAtSeqcode
private boolean lookingAtSeqcode() -
lookingAtInteger
private int lookingAtInteger() -
lookingAtBitset
javajs.util.BS lookingAtBitset() -
lookingAtObjectID
private boolean lookingAtObjectID()Look for a valid $... sequence. This must be alphanumeric or _ or ~ only. We skip any $"...". That will be handled later.- Returns:
- true only if valid $....
-
lookingAtLookupToken
private boolean lookingAtLookupToken(int ichT) -
lookForSyncID
private boolean lookForSyncID()Check for a set of characters that does not start with double quote or at-sign and terminates with #, }, or an end of line. Only used for the SYNC command's second character.- Returns:
- true if ID is found.
-
ERROR
private int ERROR(int error) -
ERROR
-
handleError
private boolean handleError()
-