Package com.googlecode.aviator.parser
Class ExpressionParser
java.lang.Object
com.googlecode.aviator.parser.ExpressionParser
- All Implemented Interfaces:
Parser
Syntex parser for expression
-
Nested Class Summary
Nested Classes -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final booleanprivate CodeGeneratorprivate intprivate booleanprivate final AviatorEvaluatorInstancestatic final CharTokenprivate final ExpressionLexerprivate Token<?> private intprivate final ArrayDeque<Token<?>> static final CharTokenprivate ScopeInfo -
Constructor Summary
ConstructorsConstructorDescriptionExpressionParser(AviatorEvaluatorInstance instance, ExpressionLexer lexer, CodeGenerator codeGenerator) -
Method Summary
Modifier and TypeMethodDescriptionvoidand()private DelegateTokenprivate voidarray()private booleanvoidback()voidbitAnd()voidbitOr()private voidCall __reducer_break()private voidcheckFunctionName(Token<?> token, boolean warnOnExists) private voidcheckVariableName(Token<?> token) private voidcheckVarIsInit(Token<?> prevToken, ExpressionParser.StatementType stmtType) private voidprivate voidCall __reducer_cont(nil)private Token<?> private Stringprivate booleanelseBody(boolean inheritEnv) private booleanelseStatement(boolean isWhile, boolean isElsif, boolean ifBodyHasReturn) private voidprivate voidensureFeatureEnabled(Feature feature) private voidensureNoStatementAfterReturn(ExpressionParser.StatementType statementType) enterScope(boolean inNewScope) voidequality()private booleanexpectChar(char ch) voidexponent()voidexpr()voidfactor()private booleanfactor0()private voidprivate voidfor x in coll { ...body...private final CodeGeneratorToken<?> private intprivate intprivate StringgetLoopKeyword(boolean isWhile) private StringgetParamExp(int lastTokenIndex) intToken<?> private booleanifStatement(boolean isWhile, boolean isElsif) if(test) { ...if-body...static booleanisConstant(Token<?> token, AviatorEvaluatorInstance instance) static final booleanTest whether a given string is a valid Java identifier.static booleanisLiteralToken(Token<?> token, AviatorEvaluatorInstance instance) booleanisOPVariable(Token<?> token) private booleanvoidjoin()private voidlambda(boolean fn) private FunctionParamlambdaArgument(int index) private FunctionParamlambdaArgument0(int index, boolean isVariadic) private voidprivate voidprivate voidvoidmove(boolean analyse) private voidparse()parse(boolean reportErrorIfNotEOF) private voidpattern()voidrel()voidreportSyntaxError(String message) voidrestoreScope(ScopeInfo info) (non-Javadoc)voidCall __reducer_return(result)private booleanvoidsetCodeGenerator(CodeGenerator codeGenerator) voidshift()private ExpressionParser.StatementTypeprivate ExpressionParser.StatementTypevoidterm()booleanternary()private voidprivate voidvoidunary()private voidprivate Token<?> value2token(Object val) private voidwhile(test) { ...body...private voidwildcard()private voidprivate voidwithMetaEnd(Object key, Object val) private booleanvoidxor()
-
Field Details
-
lexer
-
lookhead
-
prevTokens
-
codeGenerator
-
scope
-
parsedTokens
private int parsedTokens -
inPattern
private boolean inPattern -
instance
-
captureFuncArgs
private final boolean captureFuncArgs -
featureSet
-
LEFT_PAREN
-
RIGHT_PAREN
-
getCGTimes
private int getCGTimes
-
-
Constructor Details
-
ExpressionParser
public ExpressionParser(AviatorEvaluatorInstance instance, ExpressionLexer lexer, CodeGenerator codeGenerator)
-
-
Method Details
-
getPrevToken
-
getCodeGenerator
- Specified by:
getCodeGeneratorin interfaceParser
-
getLookhead
-
getSymbolTable
- Specified by:
getSymbolTablein interfaceParser
-
setCodeGenerator
- Specified by:
setCodeGeneratorin interfaceParser
-
enterScope
- Specified by:
enterScopein interfaceParser
-
restoreScope
(non-Javadoc)- Specified by:
restoreScopein interfaceParser- See Also:
-
ensureFeatureEnabled
-
returnStatement
public void returnStatement()Call __reducer_return(result) -
ternary
public boolean ternary() -
join
public void join() -
expectChar
private boolean expectChar(char ch) -
bitOr
public void bitOr() -
xor
public void xor() -
bitAnd
public void bitAnd() -
and
public void and() -
equality
public void equality() -
checkVarIsInit
-
rel
public void rel() -
shift
public void shift() -
expr
public void expr() -
exponent
public void exponent() -
term
public void term() -
unary
public void unary() -
getLookheadStartIndex
private int getLookheadStartIndex() -
getLookheadLexemeLength
private int getLookheadLexemeLength() -
getParamExp
-
isOPVariable
-
factor
public void factor() -
factor0
private boolean factor0() -
lambda
private void lambda(boolean fn) -
currentTokenLexeme
-
lambdaArgument
-
lambdaArgument0
-
arrayAccess
private boolean arrayAccess() -
array
private void array() -
checkVariableName
-
methodInvokeOrArrayAccess
private void methodInvokeOrArrayAccess() -
method
-
isJavaIdentifier
Test whether a given string is a valid Java identifier.- Parameters:
id- string which should be checked- Returns:
trueif a valid identifier
-
pattern
private void pattern() -
reportSyntaxError
-
isValidLookhead
private boolean isValidLookhead() -
move
public void move(boolean analyse) -
getParsedTokens
public int getParsedTokens() -
back
public void back() -
parse
-
parse
-
breakStatement
private void breakStatement()Call __reducer_break() -
continueStatement
private void continueStatement()Call __reducer_cont(nil) -
whileStatement
private void whileStatement()while(test) { ...body... } ...statements...===>__reducer_callcc(__reducer_loop, lambda() -> if(test) { ...body... }else { break; } end, lambda()- > ...statements... end); -
letStatement
private void letStatement() -
fnStatement
private void fnStatement() -
checkFunctionName
-
currentToken
-
scopeStatement
private boolean scopeStatement() -
tryStatement
private void tryStatement() -
throwStatement
private void throwStatement() -
newStatement
private void newStatement() -
className
private void className() -
useStatement
private void useStatement() -
wildcard
private void wildcard() -
statement
-
withMetaBegin
private void withMetaBegin() -
withMetaEnd
-
value2token
-
forStatement
private void forStatement()for x in coll { ...body... } ...statements...===>__reducer_callcc(seq, lambda(x) -> ...body... end, lambda()- > ...statements... end); -
statements
-
ensureNoStatementAfterReturn
-
ifStatement
private boolean ifStatement(boolean isWhile, boolean isElsif) if(test) { ...if-body... }else { ...else-body... } ...statements...===>__if_callcc(test ? (lambda() -> ...if-body... end)() : (lambda() -> ...else-body... end)(), lambda()- > ...statements... end); -
getLoopKeyword
-
elseStatement
private boolean elseStatement(boolean isWhile, boolean isElsif, boolean ifBodyHasReturn) -
withoutElse
private boolean withoutElse() -
elseBody
private boolean elseBody(boolean inheritEnv) -
anonymousMethodName
-
ensureDepthState
private void ensureDepthState() -
isConstant
-
isLiteralToken
-
getCodeGeneratorWithTimes
-