|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--kmy.jint.parser.Parser
This class can parse Jint (or Java) token stream and produce a parsing tree. It also calls ClassConsumer methods as it encounters corresponding constructions. Generally, one should create this class (giving it a token stream), set some properties (like errorStorage) and call parseStatement in a loop till the end of token stream.
Inner Class Summary | |
(package private) static class |
Parser.LabelExpression
This is bogus expression node that expression parser returns when it encounters labeled statement. |
(package private) static class |
Parser.LocalMethodExpression
This is bogus expression node that expression parser returns when it encounters method definition. |
(package private) static class |
Parser.LocalVariableExpression
This is bogus expression node that expression parser returns when it encounters variable/member definition. |
Field Summary | |
private ClassConsumer |
classConsumer
|
private IdentifierNode[] |
commonImports
|
private java.lang.Object |
currentClassHandle
|
private Identifier |
currentClassName
|
private ErrorStorage |
errorStorage
|
(package private) static java.lang.Boolean |
FALSE
|
private boolean |
fresh
|
private AbstractTokenizer |
in
|
private boolean |
inInterface
|
private boolean |
looseExceptionCheck
|
private int |
nextInlineClassName
|
private boolean |
processed
|
private java.lang.Object |
publicScope
|
(package private) static java.lang.Boolean |
TRUE
|
private java.lang.Object |
upperLevelClassHandle
|
Fields inherited from interface kmy.jint.constants.DefinitionConst |
ABSTRACT_FLAG,
ACC_ABSTRACT,
ACC_FINAL,
ACC_INTERFACE,
ACC_MASK,
ACC_NATIVE,
ACC_PRIVATE,
ACC_PROTECTED,
ACC_PUBLIC,
ACC_STATIC,
ACC_SUPER,
ACC_SYNCHRONIZED,
ACC_TRANSIENT,
ACC_VOLATILE,
CONST_FLAG,
EXPLICIT_FLAG,
FINAL_FLAG,
INTERFACE_FLAG,
METHOD_SCOPE_FLAG,
MUST_BE_CLASS_FLAG,
NATIVE_FLAG,
PACKAGE_PRIVATE_FLAG,
PRIVATE_FLAG,
PROTECTED_FLAG,
PUBLIC_FLAG,
SCRIPT_STYLE_FLAG,
SELF_USED_FLAG,
STATIC_FLAG,
STRICT_FLAG,
SYNCHRONIZED_FLAG,
TRANSIENT_FLAG,
VOLATILE_FLAG,
WHERE_FLAG,
WORLD_FLAG |
Constructor Summary | |
Parser(AbstractTokenizer t)
Creates a new parser that will parse the given token stream. |
|
Parser(AbstractTokenizer t,
ClassConsumer cc)
Creates a new parser that will parse the given token stream and call the given ClassConsumer as it parses. |
Method Summary | |
(package private) void |
assertToken(char tType)
Asserts that next token is of type tType. |
(package private) void |
assertToken(int tType,
java.lang.String vis)
Asserts that next token is of type tType. |
private void |
consumeToken()
Marks token as consumed, so next call to nextToken() will read a new one. |
void |
forcePublic(boolean force)
Report all future subscopes of outermost scope as public. |
java.lang.Object |
getClassHandle()
Returns current class handle. |
boolean |
getLooseExceptionCheck()
|
private int |
getPriority(int token)
Returns infix operator priority. |
private Identifier |
nextInnerClassIdentifier()
Generates a new name for inner class. |
private Identifier |
nextInnerClassIdentifier(java.lang.String patt)
The same as nextInnerClassIdentifier() without args, but appends "m_" + given string to the newly generated name; also uses ___F_ instead of ___C_. |
private Identifier |
nextRegexClassIdentifier()
The same as nextInnerClassIdentifier() without args, but appends "r" to the newly generated name; also uses ___R_ instead of ___C_. |
private void |
nextToken()
Reads new token from the stream if needed. |
(package private) ExpressionNode |
opCall(int filePos,
ExpressionNode expr,
ExpressionNode[] args)
|
(package private) ExpressionNode |
opCast(int filePos,
IdentifierNode type,
ExpressionNode arg)
|
(package private) ExpressionNode |
opCond(int filePos,
ExpressionNode head,
ExpressionNode arg1,
ExpressionNode arg2)
|
(package private) ExpressionNode |
opInfix(int filePos,
int op,
ExpressionNode head,
ExpressionNode arg)
|
(package private) ExpressionNode |
opPostfix(int filePos,
int op,
ExpressionNode arg)
|
(package private) ExpressionNode |
opPrefix(int filePos,
int op,
ExpressionNode arg)
|
private ExpressionNode[] |
parseArgs()
Parses comma-separated list of expressions. |
private ArrayValueNode |
parseArrayValue(IdentifierNode type)
Parses array expression (comma-separated expression list inside '{ }'). |
private ExpressionNode |
parseBlock()
Parses Jint block (statement list inside '[ ]'). |
(package private) ClassNode |
parseClass(int flags)
Parses class or interface. |
(package private) ClassNode |
parseClassBody(IdentifierNode className,
IdentifierNode[] parentArray,
IdentifierNode[] interfaceArray,
ClassNode[] whereArray,
int flags)
Parses class body starting with '{'. |
(package private) DefinitionNode |
parseDefinition(int flags)
Parses method, field or class definition, starting with modifiers (if any). |
(package private) ExpressionNode |
parseExpression()
Parses an expression. |
(package private) ExpressionNode |
parseExpression(int finPriority)
Parses a subexpression that contains operators of priority less or equal to finPriority. |
(package private) StatementNode |
parseExpressionStatement()
Parses expression statement and certain other types of statements. |
private IdentifierNode |
parseIdentifier()
Parses qualified identifier. |
private IdentifierNode |
parseIdentifier(boolean starAllowed)
Parses qualified identifier. |
private IdentifierNode |
parseIdentifier(boolean starAllowed,
boolean indexAllowed)
Parses qualified identifier. |
(package private) IdentifierNode[] |
parseIdentifierList()
Parses comma-separated identifier list. |
(package private) MethodNode |
parseMethodBody(IdentifierNode type,
IdentifierNode name,
ParameterNode[] paramArray,
int flags)
Parses method body starting with token that follows ')' that closes formal parameter list. |
(package private) BodyNode |
parseOpenBody()
Parses startement list inside '{...}' (but not brackets themselves). |
(package private) BreakNode |
parseOpenBreak()
Parses break statement (not including 'break' keyword). |
(package private) ContinueNode |
parseOpenContinue()
Parses continue statement (not including 'continue' keyword). |
(package private) DoNode |
parseOpenDo()
Parses do statement (not including 'do' keyword). |
(package private) ForNode |
parseOpenFor()
Parses for statement (not including 'for' keyword). |
(package private) IfNode |
parseOpenIf()
Parses if statement (not including 'if' keyword). |
(package private) ImportStatementNode |
parseOpenImport()
Parses import statement (not including 'import' keyword). |
(package private) MemberNode |
parseOpenMember(IdentifierNode type,
IdentifierNode name)
Parses field (or variable) definition starting with token that follows variable name. |
(package private) MethodNode |
parseOpenMethod(IdentifierNode type,
IdentifierNode name,
int flags)
Parses method definition starting with '(' that follows method name. |
(package private) PackageStatementNode |
parseOpenPackage()
Parses package statement (not including 'package' keyword). |
(package private) ReturnNode |
parseOpenReturn()
Parses return statement (not including 'return' keyword). |
(package private) SwitchNode |
parseOpenSwitch()
Parses switch statement (not including 'switch' keyword). |
(package private) SynchronizedNode |
parseOpenSynchronized()
Parses synchronized statement (not including 'synchronized' keyword). |
(package private) ThrowNode |
parseOpenThrow()
Parses throw statement (not including 'throw' keyword). |
(package private) TryNode |
parseOpenTry()
Parses try statement (not including 'try' keyword). |
(package private) ExpressionNode[] |
parseOpenVariableList(IdentifierNode name)
Parses comma-separated variable name or initialization list starting with the first name. |
(package private) WhileNode |
parseOpenWhile()
Parses while statement (not including 'while' keyword). |
(package private) ParameterNode |
parseParameter()
Parses single formal parameter. |
StatementNode |
parseStatement()
Parses a single statement. |
(package private) StatementNode[] |
parseStatementList()
Parsers a list of statements. |
void |
setClassHandle(java.lang.Object handle)
This method initializes outermost scope handle, so the code parser gets is treated in the context of the given scope. |
void |
setErrorStorage(ErrorStorage errorStorage)
Assigns an ErrorStorage that this parser will use to report errors. |
void |
setLooseExceptionCheck(boolean t)
Exceptions should be treated loosely. |
void |
storeError(CompilerException e)
|
private void |
storeError(int code,
int filePos)
|
private void |
storeError(int code,
int filePos,
java.lang.Object info)
|
private IdentifierNode |
toType(ExpressionNode t)
Converts indexed expression with empty indexes (array type name) to identifier node. |
Methods inherited from class java.lang.Object |
|
Field Detail |
private AbstractTokenizer in
private boolean processed
private boolean fresh
private ClassConsumer classConsumer
private int nextInlineClassName
private java.lang.Object upperLevelClassHandle
private java.lang.Object currentClassHandle
private Identifier currentClassName
private IdentifierNode[] commonImports
private ErrorStorage errorStorage
private boolean inInterface
private java.lang.Object publicScope
private boolean looseExceptionCheck
static final java.lang.Boolean TRUE
static final java.lang.Boolean FALSE
Constructor Detail |
public Parser(AbstractTokenizer t)
public Parser(AbstractTokenizer t, ClassConsumer cc)
Method Detail |
public void setLooseExceptionCheck(boolean t)
public boolean getLooseExceptionCheck()
public void setErrorStorage(ErrorStorage errorStorage)
public void setClassHandle(java.lang.Object handle)
public java.lang.Object getClassHandle()
public void forcePublic(boolean force)
private Identifier nextInnerClassIdentifier()
private Identifier nextInnerClassIdentifier(java.lang.String patt)
private Identifier nextRegexClassIdentifier()
private final void nextToken()
private final void consumeToken()
private void storeError(int code, int filePos)
private void storeError(int code, int filePos, java.lang.Object info)
public void storeError(CompilerException e)
void assertToken(int tType, java.lang.String vis)
tType
- expected token typevis
- string representation of expected token type for error reportingvoid assertToken(char tType)
tType
- expected token typeClassNode parseClass(int flags)
flags
- modifiers (parsed by caller and passed as flags)IdentifierNode[] parseIdentifierList()
ClassNode parseClassBody(IdentifierNode className, IdentifierNode[] parentArray, IdentifierNode[] interfaceArray, ClassNode[] whereArray, int flags)
DefinitionNode parseDefinition(int flags)
MethodNode parseOpenMethod(IdentifierNode type, IdentifierNode name, int flags)
MethodNode parseMethodBody(IdentifierNode type, IdentifierNode name, ParameterNode[] paramArray, int flags)
ParameterNode parseParameter()
MemberNode parseOpenMember(IdentifierNode type, IdentifierNode name)
ExpressionNode[] parseOpenVariableList(IdentifierNode name)
BodyNode parseOpenBody()
StatementNode[] parseStatementList()
public StatementNode parseStatement()
ImportStatementNode parseOpenImport()
PackageStatementNode parseOpenPackage()
ReturnNode parseOpenReturn()
ThrowNode parseOpenThrow()
BreakNode parseOpenBreak()
ContinueNode parseOpenContinue()
IfNode parseOpenIf()
WhileNode parseOpenWhile()
DoNode parseOpenDo()
SynchronizedNode parseOpenSynchronized()
SwitchNode parseOpenSwitch()
TryNode parseOpenTry()
ForNode parseOpenFor()
StatementNode parseExpressionStatement()
private final int getPriority(int token)
ExpressionNode parseExpression()
ExpressionNode parseExpression(int finPriority)
private ExpressionNode[] parseArgs()
private IdentifierNode toType(ExpressionNode t)
private ExpressionNode parseBlock()
private ArrayValueNode parseArrayValue(IdentifierNode type)
private IdentifierNode parseIdentifier()
private IdentifierNode parseIdentifier(boolean starAllowed)
private IdentifierNode parseIdentifier(boolean starAllowed, boolean indexAllowed)
ExpressionNode opCall(int filePos, ExpressionNode expr, ExpressionNode[] args)
ExpressionNode opInfix(int filePos, int op, ExpressionNode head, ExpressionNode arg)
ExpressionNode opPrefix(int filePos, int op, ExpressionNode arg)
ExpressionNode opPostfix(int filePos, int op, ExpressionNode arg)
ExpressionNode opCond(int filePos, ExpressionNode head, ExpressionNode arg1, ExpressionNode arg2)
ExpressionNode opCast(int filePos, IdentifierNode type, ExpressionNode arg)
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |