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 class
ExpressionParser.StatementType
-
Field Summary
Fields Modifier and Type Field Description private boolean
captureFuncArgs
private CodeGenerator
codeGenerator
private java.util.Set<Feature>
featureSet
private int
getCGTimes
private boolean
inPattern
private AviatorEvaluatorInstance
instance
static CharToken
LEFT_PAREN
private ExpressionLexer
lexer
private Token<?>
lookhead
private int
parsedTokens
private java.util.ArrayDeque<Token<?>>
prevTokens
static CharToken
RIGHT_PAREN
private ScopeInfo
scope
-
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 void
and()
private DelegateToken
anonymousMethodName()
private void
array()
private boolean
arrayAccess()
void
back()
void
bitAnd()
void
bitOr()
private void
breakStatement()
Call __reducer_break()private void
checkFunctionName(Token<?> token, boolean warnOnExists)
private void
checkVariableName(Token<?> token)
private void
checkVarIsInit(Token<?> prevToken, ExpressionParser.StatementType stmtType)
private void
className()
private void
continueStatement()
Call __reducer_cont(nil)private Token<?>
currentToken()
private java.lang.String
currentTokenLexeme()
private boolean
elseBody(boolean inheritEnv)
private boolean
elseStatement(boolean isWhile, boolean isElsif, boolean ifBodyHasReturn)
private void
ensureDepthState()
private void
ensureFeatureEnabled(Feature feature)
private void
ensureNoStatementAfterReturn(ExpressionParser.StatementType statementType)
ScopeInfo
enterScope(boolean inNewScope)
void
equality()
private boolean
expectChar(char ch)
void
exponent()
void
expr()
void
factor()
private boolean
factor0()
private void
fnStatement()
private void
forStatement()
for x in coll { ...body...CodeGenerator
getCodeGenerator()
private CodeGenerator
getCodeGeneratorWithTimes()
Token<?>
getLookhead()
private int
getLookheadLexemeLength()
private int
getLookheadStartIndex()
private java.lang.String
getLoopKeyword(boolean isWhile)
private java.lang.String
getParamExp(int lastTokenIndex)
int
getParsedTokens()
Token<?>
getPrevToken()
SymbolTable
getSymbolTable()
private boolean
ifStatement(boolean isWhile, boolean isElsif)
if(test) { ...if-body...static boolean
isConstant(Token<?> token, AviatorEvaluatorInstance instance)
static boolean
isJavaIdentifier(java.lang.String id)
Test whether a given string is a valid Java identifier.static boolean
isLiteralToken(Token<?> token, AviatorEvaluatorInstance instance)
boolean
isOPVariable(Token<?> token)
private boolean
isValidLookhead()
void
join()
private void
lambda(boolean fn)
private FunctionParam
lambdaArgument(int index)
private FunctionParam
lambdaArgument0(int index, boolean isVariadic)
private void
letStatement()
private void
method(Token<?> methodName)
private void
methodInvokeOrArrayAccess()
void
move(boolean analyse)
private void
newStatement()
Expression
parse()
Expression
parse(boolean reportErrorIfNotEOF)
private void
pattern()
void
rel()
void
reportSyntaxError(java.lang.String message)
void
restoreScope(ScopeInfo info)
(non-Javadoc)void
returnStatement()
Call __reducer_return(result)private boolean
scopeStatement()
void
setCodeGenerator(CodeGenerator codeGenerator)
void
shift()
private ExpressionParser.StatementType
statement()
private ExpressionParser.StatementType
statements()
void
term()
boolean
ternary()
private void
throwStatement()
private void
tryStatement()
void
unary()
private void
useStatement()
private Token<?>
value2token(java.lang.Object val)
private void
whileStatement()
while(test) { ...body...private void
wildcard()
private void
withMetaBegin()
private void
withMetaEnd(java.lang.Object key, java.lang.Object val)
private boolean
withoutElse()
void
xor()
-
-
-
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:
getCodeGenerator
in interfaceParser
-
getLookhead
public Token<?> getLookhead()
-
getSymbolTable
public SymbolTable getSymbolTable()
- Specified by:
getSymbolTable
in interfaceParser
-
setCodeGenerator
public void setCodeGenerator(CodeGenerator codeGenerator)
- Specified by:
setCodeGenerator
in interfaceParser
-
enterScope
public ScopeInfo enterScope(boolean inNewScope)
- Specified by:
enterScope
in interfaceParser
-
restoreScope
public void restoreScope(ScopeInfo info)
(non-Javadoc)- Specified by:
restoreScope
in 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:
true
if 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()
-
-