public class ScriptCompiler extends ScriptTokenParser
Modifier and Type | Field and Description |
---|---|
private T[][] |
aatokenCompiled |
private int |
afterMath |
private int |
afterWhite |
private boolean |
allowMissingEnd |
private int |
braceCount |
private int |
bracketCount |
private int |
cchScript |
private int |
cchToken |
private boolean |
checkImpliedScriptCmd |
private char |
chFirst |
private java.lang.String |
comment |
private java.util.Map<java.lang.String,SV> |
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 java.lang.String |
ident |
private java.lang.String |
identLC |
private boolean |
iHaveQuotedString |
private boolean |
implicitString |
private boolean |
isCheckOnly |
private boolean |
isComment |
private boolean |
isDotDot |
private boolean |
isEndOfCommand |
private boolean |
isShowCommand |
private boolean |
isShowScriptOutput |
private boolean |
isSilent |
private boolean |
isUserToken |
private int[][] |
lineIndices |
private short[] |
lineNumbers |
private javajs.util.Lst<T[]> |
lltoken |
private int |
lnLength |
private javajs.util.Lst<T> |
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 |
tokInitialPlusPlus |
private int |
tokLastMath |
private javajs.util.Lst<T> |
vBraces |
private javajs.util.Lst<ScriptFunction> |
vFunctionStack |
(package private) javajs.util.Lst<T> |
vPush |
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, vwr
Constructor and Description |
---|
ScriptCompiler(Viewer vwr) |
Modifier and Type | Method and Description |
---|---|
(package private) static void |
addContextVariable(java.util.Map<java.lang.String,SV> contextVariables,
java.lang.String name) |
private void |
addNumber(int tok,
int i,
java.lang.Object v) |
private void |
addTokenToPrefix(T token) |
private char |
charAt(int i) |
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()
Check for special parameters, including:
+, -, \, *, /, &, |, =, period, or [, single or double quote,
command-specific parameters, $....
|
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)
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 int |
ERROR(int error) |
private int |
ERROR(int error,
java.lang.String value) |
private int |
forceFlowEnd(T token) |
private boolean |
getData(java.lang.String key) |
private void |
getPrefixToken() |
private java.lang.String |
getUnescapedStringLiteral(boolean isFileName)
lookingAtString returned true, and we need to unescape any t, r, n, ", ',
x, u, or backslash after a backslash
|
private boolean |
handleError() |
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) |
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.
|
(package private) BS |
lookingAtBitset() |
private int |
lookingAtComment() |
private boolean |
lookingAtDecimal() |
private boolean |
lookingAtEndOfLine()
Look for end of script or a new line.
|
private float |
lookingAtExponential() |
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.
|
private int |
lookingAtInteger() |
private boolean |
lookingAtLeadingWhitespace() |
private boolean |
lookingAtLoadFormat(boolean allchar) |
private boolean |
lookingAtLookupToken(int ichT) |
private boolean |
lookingAtMathContinuation(int ichT) |
private java.lang.Object |
lookingAtMatrix() |
private boolean |
lookingAtObjectID()
Look for a valid $...
|
private boolean |
lookingAtSeqcode() |
private boolean |
lookingAtSetBraceSyntax()
look for '{' at the start of a command, allowing for syntaxes {xxx}.yyy =
...
|
private boolean |
lookingAtString(boolean allowPrime)
look for a quoted string, possibly allowing single quotes.
|
private boolean |
lookingAtTerminator()
Look for valid terminating semicolon -- one not within for(), for example.
|
private int |
nCharNewLine(int ichT)
Check for line ending at this point in script.
|
private void |
newContextVariable(java.lang.String ident) |
private static ScriptFunction |
newScriptParallelProcessor(java.lang.String name,
int tok) |
private int |
parseCommandParameter() |
private int |
parseKnownToken() |
private int |
processTokenList(short iLine,
boolean doCompile) |
private void |
replaceCommand(T token) |
private void |
setAaTokenCompiled() |
private T |
setCommand(T token) |
private T |
setNewSetCommand(boolean isSetBrace,
java.lang.String ident) |
protected int |
tokAt(int i) |
private T |
tokenAt(int i) |
private void |
tokenizePlusPlus(int tok,
boolean isPlusPlusX) |
private boolean |
wasImpliedScript()
Check for improperly parsed implied script command:
only two tokens:
[implied script] xxx.SORT/REVERSE/PUSH/POP
more than two tokens:
not a script function xxxx.spt(3,4,5)
|
commandExpected, compileExpression, compileExpressions, error, errorIntStr2, errorStr, errorStr2, errorString, isUserFunction, tokenAttr
private java.lang.String filename
private boolean isSilent
private java.util.Map<java.lang.String,SV> contextVariables
private T[][] aatokenCompiled
private short[] lineNumbers
private int[][] lineIndices
private int lnLength
private boolean preDefining
private boolean isShowScriptOutput
private boolean isCheckOnly
private boolean haveComments
java.lang.String scriptExtensions
private ScriptFunction thisFunction
private ScriptFlowContext flowContext
private javajs.util.Lst<T> ltoken
private javajs.util.Lst<T[]> lltoken
private javajs.util.Lst<T> vBraces
private int ichBrace
private int cchToken
private int cchScript
private int nSemiSkip
private int parenCount
private int braceCount
private int setBraceCount
private int bracketCount
private int ptSemi
private int forPoint3
private int setEqualPt
private int iBrace
private boolean iHaveQuotedString
private boolean isEndOfCommand
private boolean needRightParen
private boolean endOfLine
private java.lang.String comment
private static final int OK
private static final int OK2
private static final int CONTINUE
private static final int EOL
private static final int ERROR
private int tokLastMath
private boolean checkImpliedScriptCmd
private javajs.util.Lst<ScriptFunction> vFunctionStack
private boolean allowMissingEnd
private boolean isShowCommand
private boolean isComment
private boolean isUserToken
private boolean implicitString
private int tokInitialPlusPlus
private int afterWhite
private boolean isDotDot
private java.lang.String ident
private java.lang.String identLC
javajs.util.Lst<T> vPush
int pushCount
private char chFirst
private int afterMath
public ScriptCompiler(Viewer vwr)
vwr
- ScriptContext compile(java.lang.String filename, java.lang.String script, boolean isPredefining, boolean isSilent, boolean debugScript, boolean isCheckOnly)
private void newContextVariable(java.lang.String ident)
static void addContextVariable(java.util.Map<java.lang.String,SV> contextVariables, java.lang.String name)
private boolean isContextVariable(java.lang.String ident)
private java.lang.String cleanScriptComments(java.lang.String script)
script
- private void addTokenToPrefix(T token)
private boolean compile0(boolean isFull)
private void setAaTokenCompiled()
private boolean lookingAtLeadingWhitespace()
private boolean isLineContinuation(int ichT, boolean checkMathop)
private boolean lookingAtMathContinuation(int ichT)
private boolean lookingAtEndOfLine()
private int nCharNewLine(int ichT)
ichT
- private boolean lookingAtTerminator()
private int lookingAtComment()
private char charAt(int i)
private int processTokenList(short iLine, boolean doCompile)
private boolean wasImpliedScript()
private boolean compileCommand()
private T tokenAt(int i)
protected int tokAt(int i)
tokAt
in class ScriptTokenParser
private void replaceCommand(T token)
private void getPrefixToken()
private int checkSpecialParameterSyntax()
private void addNumber(int tok, int i, java.lang.Object v)
private java.lang.Object lookingAtMatrix()
private int parseKnownToken()
private void tokenizePlusPlus(int tok, boolean isPlusPlusX)
private boolean checkNewSetCommand()
private int parseCommandParameter()
private static ScriptFunction newScriptParallelProcessor(java.lang.String name, int tok)
private T setNewSetCommand(boolean isSetBrace, java.lang.String ident)
private void checkUnquotedFileName()
private boolean checkFlowStartBrace(boolean atEnd)
private int checkFlowEndBrace()
private int forceFlowEnd(T token)
static boolean isBreakableContext(int tok)
private boolean checkFlowCommand(java.lang.String ident)
private boolean checkFlowEnd(int tok, java.lang.String ident, int pt1)
private boolean getData(java.lang.String key)
private int incrementLineCount(java.lang.String str)
private static boolean isSpaceOrTab(char ch)
private boolean eol(char ch)
ch
- private boolean lookingAtSetBraceSyntax()
private boolean lookingAtString(boolean allowPrime)
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/2009private java.lang.String getUnescapedStringLiteral(boolean isFileName)
isFileName
- in certain cases, such as load "c:\temp\myfile.xyz" we only want to
decode unicode, not other characters.private boolean lookingAtLoadFormat(boolean allchar)
private boolean lookingAtImpliedString(boolean allowSpace, boolean allowEquals, boolean allowSptParen)
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)private float lookingAtExponential()
private boolean lookingAtDecimal()
private boolean lookingAtSeqcode()
private int lookingAtInteger()
BS lookingAtBitset()
private boolean lookingAtObjectID()
private boolean lookingAtLookupToken(int ichT)
private boolean lookForSyncID()
private int ERROR(int error)
private int ERROR(int error, java.lang.String value)
private boolean handleError()