Package com.googlecode.aviator.parser
Class ExpressionParser
- java.lang.Object
-
- com.googlecode.aviator.parser.ExpressionParser
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static classExpressionParser.StatementType
-
Field Summary
Fields Modifier and Type Field Description private booleancaptureFuncArgsprivate CodeGeneratorcodeGeneratorprivate java.util.Set<Feature>featureSetprivate intgetCGTimesprivate booleaninPatternprivate AviatorEvaluatorInstanceinstancestatic CharTokenLEFT_PARENprivate ExpressionLexerlexerprivate Token<?>lookheadprivate intparsedTokensprivate java.util.ArrayDeque<Token<?>>prevTokensstatic CharTokenRIGHT_PARENprivate ScopeInfoscope
-
Constructor Summary
Constructors Constructor Description ExpressionParser(AviatorEvaluatorInstance instance, ExpressionLexer lexer, CodeGenerator codeGenerator)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidand()private DelegateTokenanonymousMethodName()private voidarray()private booleanarrayAccess()voidback()voidbitAnd()voidbitOr()private voidbreakStatement()Call __reducer_break()private voidcheckFunctionName(Token<?> token, boolean warnOnExists)private voidcheckVariableName(Token<?> token)private voidcheckVarIsInit(Token<?> prevToken, ExpressionParser.StatementType stmtType)private voidclassName()private voidcontinueStatement()Call __reducer_cont(nil)private Token<?>currentToken()private java.lang.StringcurrentTokenLexeme()private booleanelseBody(boolean inheritEnv)private booleanelseStatement(boolean isWhile, boolean isElsif, boolean ifBodyHasReturn)private voidensureDepthState()private voidensureFeatureEnabled(Feature feature)private voidensureNoStatementAfterReturn(ExpressionParser.StatementType statementType)ScopeInfoenterScope(boolean inNewScope)voidequality()private booleanexpectChar(char ch)voidexponent()voidexpr()voidfactor()private booleanfactor0()private voidfnStatement()private voidforStatement()for x in coll { ...body...CodeGeneratorgetCodeGenerator()private CodeGeneratorgetCodeGeneratorWithTimes()Token<?>getLookhead()private intgetLookheadLexemeLength()private intgetLookheadStartIndex()private java.lang.StringgetLoopKeyword(boolean isWhile)private java.lang.StringgetParamExp(int lastTokenIndex)intgetParsedTokens()Token<?>getPrevToken()SymbolTablegetSymbolTable()private booleanifStatement(boolean isWhile, boolean isElsif)if(test) { ...if-body...static booleanisConstant(Token<?> token, AviatorEvaluatorInstance instance)static booleanisJavaIdentifier(java.lang.String id)Test whether a given string is a valid Java identifier.static booleanisLiteralToken(Token<?> token, AviatorEvaluatorInstance instance)booleanisOPVariable(Token<?> token)private booleanisValidLookhead()voidjoin()private voidlambda(boolean fn)private FunctionParamlambdaArgument(int index)private FunctionParamlambdaArgument0(int index, boolean isVariadic)private voidletStatement()private voidmethod(Token<?> methodName)private voidmethodInvokeOrArrayAccess()voidmove(boolean analyse)private voidnewStatement()Expressionparse()Expressionparse(boolean reportErrorIfNotEOF)private voidpattern()voidrel()voidreportSyntaxError(java.lang.String message)voidrestoreScope(ScopeInfo info)(non-Javadoc)voidreturnStatement()Call __reducer_return(result)private booleanscopeStatement()voidsetCodeGenerator(CodeGenerator codeGenerator)voidshift()private ExpressionParser.StatementTypestatement()private ExpressionParser.StatementTypestatements()voidterm()booleanternary()private voidthrowStatement()private voidtryStatement()voidunary()private voiduseStatement()private Token<?>value2token(java.lang.Object val)private voidwhileStatement()while(test) { ...body...private voidwildcard()private voidwithMetaBegin()private voidwithMetaEnd(java.lang.Object key, java.lang.Object val)private booleanwithoutElse()voidxor()
-
-
-
Field Detail
-
lexer
private final ExpressionLexer lexer
-
lookhead
private Token<?> lookhead
-
prevTokens
private final java.util.ArrayDeque<Token<?>> prevTokens
-
codeGenerator
private CodeGenerator codeGenerator
-
scope
private ScopeInfo scope
-
parsedTokens
private int parsedTokens
-
inPattern
private boolean inPattern
-
instance
private final AviatorEvaluatorInstance instance
-
captureFuncArgs
private final boolean captureFuncArgs
-
featureSet
private final java.util.Set<Feature> featureSet
-
LEFT_PAREN
public static final CharToken LEFT_PAREN
-
RIGHT_PAREN
public static final CharToken RIGHT_PAREN
-
getCGTimes
private int getCGTimes
-
-
Constructor Detail
-
ExpressionParser
public ExpressionParser(AviatorEvaluatorInstance instance, ExpressionLexer lexer, CodeGenerator codeGenerator)
-
-
Method Detail
-
getPrevToken
public Token<?> getPrevToken()
-
getCodeGenerator
public CodeGenerator getCodeGenerator()
- Specified by:
getCodeGeneratorin interfaceParser
-
getLookhead
public Token<?> getLookhead()
-
getSymbolTable
public SymbolTable getSymbolTable()
- Specified by:
getSymbolTablein interfaceParser
-
setCodeGenerator
public void setCodeGenerator(CodeGenerator codeGenerator)
- Specified by:
setCodeGeneratorin interfaceParser
-
enterScope
public ScopeInfo enterScope(boolean inNewScope)
- Specified by:
enterScopein interfaceParser
-
restoreScope
public void restoreScope(ScopeInfo info)
(non-Javadoc)- Specified by:
restoreScopein interfaceParser- See Also:
com.googlecode.aviator.parser.Parser#restoreScope(com.googlecode.aviator.parser.ExpressionParser.DepthInfo)
-
ensureFeatureEnabled
private void ensureFeatureEnabled(Feature feature)
-
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
private void checkVarIsInit(Token<?> prevToken, ExpressionParser.StatementType stmtType)
-
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
private java.lang.String getParamExp(int lastTokenIndex)
-
isOPVariable
public boolean isOPVariable(Token<?> token)
-
factor
public void factor()
-
factor0
private boolean factor0()
-
lambda
private void lambda(boolean fn)
-
currentTokenLexeme
private java.lang.String currentTokenLexeme()
-
lambdaArgument
private FunctionParam lambdaArgument(int index)
-
lambdaArgument0
private FunctionParam lambdaArgument0(int index, boolean isVariadic)
-
arrayAccess
private boolean arrayAccess()
-
array
private void array()
-
checkVariableName
private void checkVariableName(Token<?> token)
-
methodInvokeOrArrayAccess
private void methodInvokeOrArrayAccess()
-
method
private void method(Token<?> methodName)
-
isJavaIdentifier
public static final boolean isJavaIdentifier(java.lang.String id)
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
public void reportSyntaxError(java.lang.String message)
-
isValidLookhead
private boolean isValidLookhead()
-
move
public void move(boolean analyse)
-
getParsedTokens
public int getParsedTokens()
-
back
public void back()
-
parse
public Expression parse(boolean reportErrorIfNotEOF)
-
parse
public Expression 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
private void checkFunctionName(Token<?> token, boolean warnOnExists)
-
currentToken
private Token<?> 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
private ExpressionParser.StatementType statement()
-
withMetaBegin
private void withMetaBegin()
-
withMetaEnd
private void withMetaEnd(java.lang.Object key, java.lang.Object val)
-
value2token
private Token<?> value2token(java.lang.Object val)
-
forStatement
private void forStatement()
for x in coll { ...body... } ...statements...===>__reducer_callcc(seq, lambda(x) -> ...body... end, lambda()- > ...statements... end);
-
statements
private ExpressionParser.StatementType statements()
-
ensureNoStatementAfterReturn
private void ensureNoStatementAfterReturn(ExpressionParser.StatementType statementType)
-
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
private java.lang.String getLoopKeyword(boolean isWhile)
-
elseStatement
private boolean elseStatement(boolean isWhile, boolean isElsif, boolean ifBodyHasReturn)
-
withoutElse
private boolean withoutElse()
-
elseBody
private boolean elseBody(boolean inheritEnv)
-
anonymousMethodName
private DelegateToken anonymousMethodName()
-
ensureDepthState
private void ensureDepthState()
-
isConstant
public static boolean isConstant(Token<?> token, AviatorEvaluatorInstance instance)
-
isLiteralToken
public static boolean isLiteralToken(Token<?> token, AviatorEvaluatorInstance instance)
-
getCodeGeneratorWithTimes
private final CodeGenerator getCodeGeneratorWithTimes()
-
-