Class Parser
'JLS7' refers to the Java Language Specification, Java SE 7 Edition.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic enumThe kinds of context where a class declaration can occur.static enumThe kinds of context where an interface declaration can occur.static enumThe kinds of context where a method declaration can occur. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected final CompileExceptioncompileException(String message) Convenience method for throwing aCompileException.protected static CompileExceptioncompileException(String message, Location location) Convenience method for throwing aCompileException.doc()Gets the text of the doc comment (a.k.a.location()CompilationUnit := [ PackageDeclaration ] { ImportDeclaration } { TypeDeclaration }AdditiveExpression := MultiplicativeExpression { ( '+' | '-' ) MultiplicativeExpression }AndExpression := EqualityExpression { '&' EqualityExpression }parseAnnotationTypeDeclarationRest(String docComment, Java.Modifier[] modifiers, Parser.InterfaceDeclarationContext context) AnnotationTypeDeclarationRest := Identifier AnnotationTypeBodyArgumentList := Expression { ',' Expression }Arguments := '(' [ ArgumentList ] ')'ArrayInitializer := '{' [ VariableInitializer { ',' VariableInitializer } [ ',' ] '}'AssertStatement := 'assert' Expression [ ':' Expression ] ';'AssignmentExpression := ConditionalExpression [ AssignmentOperator AssignmentExpression ] AssignmentOperator := '=' | '*=' | '/=' | '%=' | '+=' | '-=' | '<<=' | '>>=' | '>>>=' | '&=' | '^=' | '|='Block := '{' BlockStatements '}'BlockStatement := Statement | (1) 'class' ...BlockStatements := { BlockStatement }BreakStatement := 'break' [ Identifier ] ';'CatchFormalParameter := { VariableModifier } CatchType VariableDeclaratorId CatchType := UnannClassType { '|' ClassType } VariableModifier := Annotation | 'final' VariableDeclaratorId := Identifier [ Dims ] Dims := { Annotation } '[' ']' { { Annotation } '[' ']' } UnannClassType := Identifier [ TypeArguments ] | UnannClassOrInterfaceType '.' { Annotation } Identifier [ TypeArguments ] UnannInterfaceType := UnannClassType UnannClassOrInterfaceType := UnannClassType | UnannInterfaceType ClassType := { Annotation } Identifier [ TypeArguments ] | ClassOrInterfaceType '.' { Annotation } Identifier [ TypeArguments ]voidparseClassBody(Java.AbstractClassDeclaration classDeclaration) ClassBody := '{' { ClassBodyDeclaration } '}'voidparseClassBodyDeclaration(Java.AbstractClassDeclaration classDeclaration) ClassBodyDeclaration := ';' | ModifiersOpt ( Block | // Instance (JLS7 8.6) or static initializer (JLS7 8.7) 'void' Identifier MethodDeclarationRest | 'class' ClassDeclarationRest | 'interface' InterfaceDeclarationRest | ConstructorDeclarator | [ TypeArguments ] Type Identifier MethodDeclarationRest | Type Identifier FieldDeclarationRest ';' )parseClassDeclarationRest(String docComment, Java.Modifier[] modifiers, Parser.ClassDeclarationContext context) ClassDeclarationRest := Identifier [ typeParameters ] [ 'extends' ReferenceType ] [ 'implements' ReferenceTypeList ] ClassBodyConditionalAndExpression := InclusiveOrExpression { '&&' InclusiveOrExpression }ConditionalExpression := ConditionalOrExpression [ '?' Expression ':' ConditionalExpression ]ConditionalOrExpression := ConditionalAndExpression { '||' ConditionalAndExpression ]parseConstructorDeclarator(String docComment, Java.Modifier[] modifiers) ConstructorDeclarator := Identifier FormalParameters [ 'throws' ReferenceTypeList ] '{' [ 'this' Arguments ';' | 'super' Arguments ';' | Primary '.' 'super' Arguments ';' ] BlockStatements '}'ContinueStatement := 'continue' [ Identifier ] ';'DimExpr := '[' Expression ']'DimExprs := DimExpr { DimExpr }DoStatement := 'do' Statement 'while' '(' Expression ')' ';'EmptyStatement := ';'voidparseEnumBody(Java.EnumDeclaration enumDeclaration) EnumBody := '{' [ EnumConstant { ',' EnumConstant } [ ',' ] [ ';' ] { ClassBodyDeclaration } '}'EnumConstant := [ Annotations ] Identifier [ Arguments ] [ ClassBody ]parseEnumDeclarationRest(String docComment, Java.Modifier[] modifiers, Parser.ClassDeclarationContext context) EnumDeclarationRest := Identifier [ 'implements' ReferenceTypeList ] EnumBodyEqualityExpression := RelationalExpression { ( '==' | '!=' ) RelationalExpression }ExclusiveOrExpression := AndExpression { '^' AndExpression }Expression := AssignmentExpression | LambdaExpressionExpressionList := Expression { ',' Expression }ExpressionStatement := Expression ';'FieldDeclarationRest := VariableDeclaratorRest { ',' VariableDeclarator }parseFormalParameter(boolean[] hasEllipsis) FormalParameter := [ 'final' ] Type FormalParameterRestFormalParameterList := FormalParameter { ',' FormalParameter }parseFormalParameterListRest(Java.Type firstParameterType) FormalParameterListRest := Identifier { ',' FormalParameter }parseFormalParameterRest(Java.Modifier[] modifiers, Java.Type type, boolean[] hasEllipsis) FormalParameterRest := [ '.' '.' '.' ] Identifier BracketsOptFormalParameters := '(' [ FormalParameterList ] ')'ForStatement := 'for' '(' [ ForInit ] ';' [ Expression ] ';' [ ExpressionList ] ')' Statement | 'for' '(' FormalParameter ':' Expression ')' Statement ForInit := Modifiers Type VariableDeclarators | ModifiersOpt PrimitiveType VariableDeclarators | Expression VariableDeclarators (1) | Expression { ',' Expression }IfStatement := 'if' '(' Expression ')' Statement [ 'else' Statement ]ImportDeclaration := 'import' ImportDeclarationBody ';'ImportDeclarationBody := [ 'static' ] Identifier { '.' Identifier } [ '.' '*' ]InclusiveOrExpression := ExclusiveOrExpression { '|' ExclusiveOrExpression }voidparseInterfaceBody(Java.InterfaceDeclaration interfaceDeclaration) InterfaceBody := '{' { ';' | ModifiersOpt ( 'void' Identifier MethodDeclarationRest | 'class' ClassDeclarationRest | 'interface' InterfaceDeclarationRest | Type Identifier ( MethodDeclarationRest | FieldDeclarationRest ) ) } '}'parseInterfaceDeclarationRest(String docComment, Java.Modifier[] modifiers, Parser.InterfaceDeclarationContext context) InterfaceDeclarationRest := Identifier [ typeParameters ] [ 'extends' ReferenceTypeList ] InterfaceBodyLabeledStatement := Identifier ':' StatementLiteral := IntegerLiteral | FloatingPointLiteral | BooleanLiteral | CharacterLiteral | StringLiteral | NullLiteralMethodBody := BlockEquivalent withparseMethodDeclaration(false, MethodDeclarationContext.CLASS_DECLARATION).parseMethodDeclaration(boolean allowDefaultClause, Parser.MethodDeclarationContext context) MethodDeclaration := [ DocComment ] Modifiers [ TypeParameters ] VoidOrType Identifier MethodDeclarationRestparseMethodDeclarationRest(String docComment, Java.Modifier[] modifiers, Java.TypeParameter[] typeParameters, Java.Type type, String name, boolean allowDefaultClause, Parser.MethodDeclarationContext context) MethodDeclarationRest := FormalParameters { '[' ']' } [ 'throws' ReferenceTypeList ] [ 'default' expression ] ( ';' | MethodBody )Modifiers := { Modifier }parseModuleDeclarationRest(Java.Modifier[] modifiers) ModuleDeclarationRest := [ 'open' ] 'module' identifier { '.' identifier} '{' { ModuleDirective } '}'MultiplicativeExpression := UnaryExpression { ( '*' | '/' | '%' ) UnaryExpression }Modifier := Annotation | 'public' | 'protected' | 'private' | 'static' | 'abstract' | 'final' | 'native' | 'synchronized' | 'transient' | 'volatile' | 'strictfp' | 'default'PackageDeclaration := 'package' QualifiedIdentifier ';'parsePackageDeclarationRest(String docComment, Java.Modifier[] modifiers) PackageDeclaration := { PackageModifier } 'package' identifier { '.' identifier} ';'PackageMemberTypeDeclaration := ModifiersOpt PackageMemberTypeDeclarationRestPrimary := CastExpression | // CastExpression 15.16 '(' Expression ')' | // ParenthesizedExpression 15.8.5 Literal | // Literal 15.8.1 Name | // AmbiguousName Name Arguments | // MethodInvocation Name '[]' { '[]' } | // ArrayType 10.1 Name '[]' { '[]' } '.' 'class' | // ClassLiteral 15.8.2 'this' | // This 15.8.3 'this' Arguments | // Alternate constructor invocation 8.8.5.1 'super' Arguments | // Unqualified superclass constructor invocation 8.8.5.1 'super' '.' Identifier | // SuperclassFieldAccess 15.11.2 'super' '.' Identifier Arguments | // SuperclassMethodInvocation 15.12.4.9 NewClassInstance | NewAnonymousClassInstance | // ClassInstanceCreationExpression 15.9 NewArray | // ArrayCreationExpression 15.10 NewInitializedArray | // ArrayInitializer 10.6 PrimitiveType { '[]' } | // Type PrimitiveType { '[]' } '.' 'class' | // ClassLiteral 15.8.2 'void' '.' 'class' | // ClassLiteral 15.8.2 MethodReference // MethodReference JLS9 15.13 Name := Identifier { '.' Identifier } CastExpression := '(' PrimitiveType { '[]' } ')' UnaryExpression | '(' Expression ')' UnaryExpression NewClassInstance := 'new' ReferenceType Arguments NewAnonymousClassInstance := 'new' ReferenceType Arguments [ ClassBody ] NewArray := 'new' Type DimExprs { '[]' } NewInitializedArray := 'new' ArrayType ArrayInitializerString[]QualifiedIdentifier := Identifier { '.' Identifier }ReferenceType := { Annotation } QualifiedIdentifier [ TypeArguments ]ReferenceTypeList := ReferenceType { ',' ReferenceType }RelationalExpression := ShiftExpression { 'instanceof' ReferenceType | '<' ShiftExpression [ { ',' TypeArgument } '>' ] | '<' TypeArgument [ { ',' TypeArgument } '>' ] | ( '>' | '<=' | '>=' ) ShiftExpression }ReturnStatement := 'return' [ Expression ] ';'parseSelector(Java.Atom atom) Selector := '.' Identifier | // FieldAccess 15.11.1 '.' Identifier Arguments | // MethodInvocation '.' '<' TypeList '>' 'super' Arguments // Superconstructor invocation (?) '.' '<' TypeList '>' 'super' '.' .ShiftExpression := AdditiveExpression { ( '<<' | '>>' | '>>>' ) AdditiveExpression }Statement := LabeledStatement | Block | IfStatement | ForStatement | WhileStatement | DoStatement | TryStatement | 'switch' ...SwitchStatement := 'switch' '(' Expression ')' '{' { SwitchLabels BlockStatements } '}' SwitchLabels := SwitchLabels { SwitchLabels } SwitchLabel := 'case' Expression ':' | 'default' ':'SynchronizedStatement := 'synchronized' '(' expression ')' BlockThrowStatement := 'throw' Expression ';'TryStatement := 'try' Block Catches [ Finally ] | 'try' Block Finally Catches := CatchClause { CatchClause } CatchClause := 'catch' '(' FormalParameter ')' Block Finally := 'finally' BlockType := ( 'byte' | 'short' | 'char' | 'int' | 'long' | 'float' | 'double' | 'boolean' | ReferenceType ) { '[' ']' }UnaryExpression := { PrefixOperator } Primary { Selector } { PostfixOperator } PrefixOperator := '++' | '--' | '+' | '-' | '~' | '!' PostfixOperator := '++' | '--'VariableDeclarator := Identifier VariableDeclaratorRestVariableDeclaratorRest := { '[' ']' } [ '=' VariableInitializer ]VariableDeclarators := VariableDeclarator { ',' VariableDeclarator }VariableInitializer := ArrayInitializer | ExpressionVoidOrType := 'void' | TypeWhileStatement := 'while' '(' Expression ')' Statementpeek()booleanintbooleanintbooleanpeekNextButOne(String suspected) booleanpeekNextButOne(TokenType suspected) booleanintread()voidintvoidsetSourceVersion(int version) voidsetWarningHandler(WarningHandler warningHandler) By default, warnings are discarded, but an application my install aWarningHandler.
-
Constructor Details
-
Parser
-
Parser
-
-
Method Details
-
doc
Gets the text of the doc comment (a.k.a. "JAVADOC comment") preceding the next token.- Returns:
nullif the next token is not preceded by a doc comment
-
getScanner
- Returns:
- The scanner that produces the tokens for this parser.
-
parseAbstractCompilationUnit
public Java.AbstractCompilationUnit parseAbstractCompilationUnit() throws CompileException, IOExceptionCompilationUnit := [ PackageDeclaration ] { ImportDeclaration } { TypeDeclaration }- Throws:
CompileExceptionIOException
-
parseModuleDeclarationRest
public Java.ModuleDeclaration parseModuleDeclarationRest(Java.Modifier[] modifiers) throws CompileException, IOException ModuleDeclarationRest := [ 'open' ] 'module' identifier { '.' identifier} '{' { ModuleDirective } '}'- Throws:
CompileExceptionIOException
-
parsePackageDeclaration
PackageDeclaration := 'package' QualifiedIdentifier ';'
- Throws:
CompileExceptionIOException
-
parsePackageDeclarationRest
public Java.PackageDeclaration parsePackageDeclarationRest(@Nullable String docComment, Java.Modifier[] modifiers) throws CompileException, IOException PackageDeclaration := { PackageModifier } 'package' identifier { '.' identifier} ';'- Throws:
CompileExceptionIOException
-
parseImportDeclaration
public Java.AbstractCompilationUnit.ImportDeclaration parseImportDeclaration() throws CompileException, IOExceptionImportDeclaration := 'import' ImportDeclarationBody ';'
- Throws:
CompileExceptionIOException
-
parseImportDeclarationBody
public Java.AbstractCompilationUnit.ImportDeclaration parseImportDeclarationBody() throws CompileException, IOExceptionImportDeclarationBody := [ 'static' ] Identifier { '.' Identifier } [ '.' '*' ]- Throws:
CompileExceptionIOException
-
parseQualifiedIdentifier
QualifiedIdentifier := Identifier { '.' Identifier }- Throws:
CompileExceptionIOException
-
parsePackageMemberTypeDeclaration
public Java.PackageMemberTypeDeclaration parsePackageMemberTypeDeclaration() throws CompileException, IOExceptionPackageMemberTypeDeclaration := ModifiersOpt PackageMemberTypeDeclarationRest
- Throws:
CompileExceptionIOException
-
parseModifiers
Modifiers := { Modifier }Includes the case "no modifiers".
- Throws:
CompileExceptionIOException
-
parseOptionalModifier
Modifier := Annotation | 'public' | 'protected' | 'private' | 'static' | 'abstract' | 'final' | 'native' | 'synchronized' | 'transient' | 'volatile' | 'strictfp' | 'default'- Throws:
CompileExceptionIOException
-
parseClassDeclarationRest
public Java.NamedClassDeclaration parseClassDeclarationRest(@Nullable String docComment, Java.Modifier[] modifiers, Parser.ClassDeclarationContext context) throws CompileException, IOException ClassDeclarationRest := Identifier [ typeParameters ] [ 'extends' ReferenceType ] [ 'implements' ReferenceTypeList ] ClassBody- Throws:
CompileExceptionIOException
-
parseEnumDeclarationRest
public Java.EnumDeclaration parseEnumDeclarationRest(@Nullable String docComment, Java.Modifier[] modifiers, Parser.ClassDeclarationContext context) throws CompileException, IOException EnumDeclarationRest := Identifier [ 'implements' ReferenceTypeList ] EnumBody
- Throws:
CompileExceptionIOException
-
parseClassBody
public void parseClassBody(Java.AbstractClassDeclaration classDeclaration) throws CompileException, IOException ClassBody := '{' { ClassBodyDeclaration } '}'- Throws:
CompileExceptionIOException
-
parseEnumBody
public void parseEnumBody(Java.EnumDeclaration enumDeclaration) throws CompileException, IOException EnumBody := '{' [ EnumConstant { ',' EnumConstant } [ ',' ] [ ';' ] { ClassBodyDeclaration } '}'- Throws:
CompileExceptionIOException
-
parseEnumConstant
EnumConstant := [ Annotations ] Identifier [ Arguments ] [ ClassBody ]
- Throws:
CompileExceptionIOException
-
parseClassBodyDeclaration
public void parseClassBodyDeclaration(Java.AbstractClassDeclaration classDeclaration) throws CompileException, IOException ClassBodyDeclaration := ';' | ModifiersOpt ( Block | // Instance (JLS7 8.6) or static initializer (JLS7 8.7) 'void' Identifier MethodDeclarationRest | 'class' ClassDeclarationRest | 'interface' InterfaceDeclarationRest | ConstructorDeclarator | [ TypeArguments ] Type Identifier MethodDeclarationRest | Type Identifier FieldDeclarationRest ';' )- Throws:
CompileExceptionIOException
-
parseInterfaceDeclarationRest
public Java.InterfaceDeclaration parseInterfaceDeclarationRest(@Nullable String docComment, Java.Modifier[] modifiers, Parser.InterfaceDeclarationContext context) throws CompileException, IOException InterfaceDeclarationRest := Identifier [ typeParameters ] [ 'extends' ReferenceTypeList ] InterfaceBody- Throws:
CompileExceptionIOException
-
parseAnnotationTypeDeclarationRest
public Java.AnnotationTypeDeclaration parseAnnotationTypeDeclarationRest(@Nullable String docComment, Java.Modifier[] modifiers, Parser.InterfaceDeclarationContext context) throws CompileException, IOException AnnotationTypeDeclarationRest := Identifier AnnotationTypeBody
- Throws:
CompileExceptionIOException
-
parseInterfaceBody
public void parseInterfaceBody(Java.InterfaceDeclaration interfaceDeclaration) throws CompileException, IOException InterfaceBody := '{' { ';' | ModifiersOpt ( 'void' Identifier MethodDeclarationRest | 'class' ClassDeclarationRest | 'interface' InterfaceDeclarationRest | Type Identifier ( MethodDeclarationRest | FieldDeclarationRest ) ) } '}'- Throws:
CompileExceptionIOException
-
parseConstructorDeclarator
public Java.ConstructorDeclarator parseConstructorDeclarator(@Nullable String docComment, Java.Modifier[] modifiers) throws CompileException, IOException ConstructorDeclarator := Identifier FormalParameters [ 'throws' ReferenceTypeList ] '{' [ 'this' Arguments ';' | 'super' Arguments ';' | Primary '.' 'super' Arguments ';' ] BlockStatements '}'- Throws:
CompileExceptionIOException
-
parseMethodDeclaration
Equivalent withparseMethodDeclaration(false, MethodDeclarationContext.CLASS_DECLARATION).- Throws:
CompileExceptionIOException- See Also:
-
parseMethodDeclaration
public Java.MethodDeclarator parseMethodDeclaration(boolean allowDefaultClause, Parser.MethodDeclarationContext context) throws CompileException, IOException MethodDeclaration := [ DocComment ] Modifiers [ TypeParameters ] VoidOrType Identifier MethodDeclarationRest- Parameters:
allowDefaultClause- Whether a "default clause" for an "annotation type element" (JLS8 9.6.2) should be parsed- Throws:
CompileExceptionIOException
-
parseVoidOrType
VoidOrType := 'void' | Type
- Throws:
CompileExceptionIOException
-
parseMethodDeclarationRest
public Java.MethodDeclarator parseMethodDeclarationRest(@Nullable String docComment, Java.Modifier[] modifiers, @Nullable Java.TypeParameter[] typeParameters, Java.Type type, String name, boolean allowDefaultClause, Parser.MethodDeclarationContext context) throws CompileException, IOException MethodDeclarationRest := FormalParameters { '[' ']' } [ 'throws' ReferenceTypeList ] [ 'default' expression ] ( ';' | MethodBody )- Parameters:
allowDefaultClause- Whether a "default clause" for an "annotation type element" (JLS8 9.6.2) should be parsed- Throws:
CompileExceptionIOException
-
parseVariableInitializer
public Java.ArrayInitializerOrRvalue parseVariableInitializer() throws CompileException, IOExceptionVariableInitializer := ArrayInitializer | Expression- Throws:
CompileExceptionIOException
-
parseArrayInitializer
ArrayInitializer := '{' [ VariableInitializer { ',' VariableInitializer } [ ',' ] '}'- Throws:
CompileExceptionIOException
-
parseFormalParameters
public Java.FunctionDeclarator.FormalParameters parseFormalParameters() throws CompileException, IOExceptionFormalParameters := '(' [ FormalParameterList ] ')'- Throws:
CompileExceptionIOException
-
parseFormalParameterList
public Java.FunctionDeclarator.FormalParameters parseFormalParameterList() throws CompileException, IOExceptionFormalParameterList := FormalParameter { ',' FormalParameter }- Throws:
CompileExceptionIOException
-
parseFormalParameterListRest
public Java.FunctionDeclarator.FormalParameters parseFormalParameterListRest(Java.Type firstParameterType) throws CompileException, IOException FormalParameterListRest := Identifier { ',' FormalParameter }- Throws:
CompileExceptionIOException
-
parseFormalParameter
public Java.FunctionDeclarator.FormalParameter parseFormalParameter(boolean[] hasEllipsis) throws CompileException, IOException FormalParameter := [ 'final' ] Type FormalParameterRest
- Throws:
CompileExceptionIOException
-
parseFormalParameterRest
public Java.FunctionDeclarator.FormalParameter parseFormalParameterRest(Java.Modifier[] modifiers, Java.Type type, boolean[] hasEllipsis) throws CompileException, IOException FormalParameterRest := [ '.' '.' '.' ] Identifier BracketsOpt
- Parameters:
hasEllipsis- After return, the zeroth element indicates whether the formal parameter was declared with an ellipsis- Throws:
CompileExceptionIOException
-
parseCatchParameter
CatchFormalParameter := { VariableModifier } CatchType VariableDeclaratorId CatchType := UnannClassType { '|' ClassType } VariableModifier := Annotation | 'final' VariableDeclaratorId := Identifier [ Dims ] Dims := { Annotation } '[' ']' { { Annotation } '[' ']' } UnannClassType := Identifier [ TypeArguments ] | UnannClassOrInterfaceType '.' { Annotation } Identifier [ TypeArguments ] UnannInterfaceType := UnannClassType UnannClassOrInterfaceType := UnannClassType | UnannInterfaceType ClassType := { Annotation } Identifier [ TypeArguments ] | ClassOrInterfaceType '.' { Annotation } Identifier [ TypeArguments ]- Throws:
CompileExceptionIOException
-
parseMethodBody
MethodBody := Block
- Throws:
CompileExceptionIOException
-
parseBlock
Block := '{' BlockStatements '}'- Throws:
CompileExceptionIOException
-
parseBlockStatements
BlockStatements := { BlockStatement }- Throws:
CompileExceptionIOException
-
parseBlockStatement
BlockStatement := Statement | (1) 'class' ... | (2) Modifiers Type VariableDeclarators ';' | Expression ';' | Expression BracketsOpt VariableDeclarators ';' (3)(1) Includes the "labeled statement".
(2) Local class declaration.
(3) Local variable declaration statement; "Expression" must pose a type, and has optional trailing brackets.
- Throws:
CompileExceptionIOException
-
parseVariableDeclarators
VariableDeclarators := VariableDeclarator { ',' VariableDeclarator }- Throws:
CompileExceptionIOException
-
parseFieldDeclarationRest
public Java.VariableDeclarator[] parseFieldDeclarationRest(String name) throws CompileException, IOException FieldDeclarationRest := VariableDeclaratorRest { ',' VariableDeclarator }- Throws:
CompileExceptionIOException
-
parseVariableDeclarator
VariableDeclarator := Identifier VariableDeclaratorRest
- Throws:
CompileExceptionIOException
-
parseVariableDeclaratorRest
public Java.VariableDeclarator parseVariableDeclaratorRest(String name) throws CompileException, IOException VariableDeclaratorRest := { '[' ']' } [ '=' VariableInitializer ]Used by field declarations and local variable declarations.
- Throws:
CompileExceptionIOException
-
parseStatement
Statement := LabeledStatement | Block | IfStatement | ForStatement | WhileStatement | DoStatement | TryStatement | 'switch' ... | 'synchronized' ... | ReturnStatement | ThrowStatement | BreakStatement | ContinueStatement | EmptyStatement | ExpressionStatement- Throws:
CompileExceptionIOException
-
parseLabeledStatement
LabeledStatement := Identifier ':' Statement
- Throws:
CompileExceptionIOException
-
parseIfStatement
IfStatement := 'if' '(' Expression ')' Statement [ 'else' Statement ]- Throws:
CompileExceptionIOException
-
parseForStatement
ForStatement := 'for' '(' [ ForInit ] ';' [ Expression ] ';' [ ExpressionList ] ')' Statement | 'for' '(' FormalParameter ':' Expression ')' Statement ForInit := Modifiers Type VariableDeclarators | ModifiersOpt PrimitiveType VariableDeclarators | Expression VariableDeclarators (1) | Expression { ',' Expression }(1) "Expression" must pose a type.
- Throws:
CompileExceptionIOException
-
parseWhileStatement
WhileStatement := 'while' '(' Expression ')' Statement- Throws:
CompileExceptionIOException
-
parseDoStatement
DoStatement := 'do' Statement 'while' '(' Expression ')' ';'- Throws:
CompileExceptionIOException
-
parseTryStatement
TryStatement := 'try' Block Catches [ Finally ] | 'try' Block Finally Catches := CatchClause { CatchClause } CatchClause := 'catch' '(' FormalParameter ')' Block Finally := 'finally' Block- Throws:
CompileExceptionIOException
-
parseSwitchStatement
SwitchStatement := 'switch' '(' Expression ')' '{' { SwitchLabels BlockStatements } '}' SwitchLabels := SwitchLabels { SwitchLabels } SwitchLabel := 'case' Expression ':' | 'default' ':'- Throws:
CompileExceptionIOException
-
parseSynchronizedStatement
SynchronizedStatement := 'synchronized' '(' expression ')' Block- Throws:
CompileExceptionIOException
-
parseReturnStatement
ReturnStatement := 'return' [ Expression ] ';'
- Throws:
CompileExceptionIOException
-
parseThrowStatement
ThrowStatement := 'throw' Expression ';'
- Throws:
CompileExceptionIOException
-
parseBreakStatement
BreakStatement := 'break' [ Identifier ] ';'
- Throws:
CompileExceptionIOException
-
parseContinueStatement
ContinueStatement := 'continue' [ Identifier ] ';'
- Throws:
CompileExceptionIOException
-
parseAssertStatement
AssertStatement := 'assert' Expression [ ':' Expression ] ';'
- Throws:
CompileExceptionIOException
-
parseEmptyStatement
EmptyStatement := ';'
- Throws:
CompileExceptionIOException
-
parseExpressionList
ExpressionList := Expression { ',' Expression }- Throws:
CompileExceptionIOException
-
parseType
Type := ( 'byte' | 'short' | 'char' | 'int' | 'long' | 'float' | 'double' | 'boolean' | ReferenceType ) { '[' ']' }- Throws:
CompileExceptionIOException
-
parseReferenceType
ReferenceType := { Annotation } QualifiedIdentifier [ TypeArguments ]- Throws:
CompileExceptionIOException
-
parseReferenceTypeList
ReferenceTypeList := ReferenceType { ',' ReferenceType }- Throws:
CompileExceptionIOException
-
parseExpression
Expression := AssignmentExpression | LambdaExpression
Notice that all other kinds of lambda expressions are parsed in
parsePrimary().- Throws:
CompileExceptionIOException
-
parseExpressionOrType
- Throws:
CompileExceptionIOException
-
parseAssignmentExpression
AssignmentExpression := ConditionalExpression [ AssignmentOperator AssignmentExpression ] AssignmentOperator := '=' | '*=' | '/=' | '%=' | '+=' | '-=' | '<<=' | '>>=' | '>>>=' | '&=' | '^=' | '|='- Throws:
CompileExceptionIOException
-
parseConditionalExpression
ConditionalExpression := ConditionalOrExpression [ '?' Expression ':' ConditionalExpression ]- Throws:
CompileExceptionIOException
-
parseConditionalOrExpression
ConditionalOrExpression := ConditionalAndExpression { '||' ConditionalAndExpression ]- Throws:
CompileExceptionIOException
-
parseConditionalAndExpression
ConditionalAndExpression := InclusiveOrExpression { '&&' InclusiveOrExpression }- Throws:
CompileExceptionIOException
-
parseInclusiveOrExpression
InclusiveOrExpression := ExclusiveOrExpression { '|' ExclusiveOrExpression }- Throws:
CompileExceptionIOException
-
parseExclusiveOrExpression
ExclusiveOrExpression := AndExpression { '^' AndExpression }- Throws:
CompileExceptionIOException
-
parseAndExpression
AndExpression := EqualityExpression { '&' EqualityExpression }- Throws:
CompileExceptionIOException
-
parseEqualityExpression
EqualityExpression := RelationalExpression { ( '==' | '!=' ) RelationalExpression }- Throws:
CompileExceptionIOException
-
parseRelationalExpression
RelationalExpression := ShiftExpression { 'instanceof' ReferenceType | '<' ShiftExpression [ { ',' TypeArgument } '>' ] | '<' TypeArgument [ { ',' TypeArgument } '>' ] | ( '>' | '<=' | '>=' ) ShiftExpression }- Throws:
CompileExceptionIOException
-
parseShiftExpression
ShiftExpression := AdditiveExpression { ( '<<' | '>>' | '>>>' ) AdditiveExpression }- Throws:
CompileExceptionIOException
-
parseAdditiveExpression
AdditiveExpression := MultiplicativeExpression { ( '+' | '-' ) MultiplicativeExpression }- Throws:
CompileExceptionIOException
-
parseMultiplicativeExpression
MultiplicativeExpression := UnaryExpression { ( '*' | '/' | '%' ) UnaryExpression }- Throws:
CompileExceptionIOException
-
parseUnaryExpression
UnaryExpression := { PrefixOperator } Primary { Selector } { PostfixOperator } PrefixOperator := '++' | '--' | '+' | '-' | '~' | '!' PostfixOperator := '++' | '--'- Throws:
CompileExceptionIOException
-
parsePrimary
Primary := CastExpression | // CastExpression 15.16 '(' Expression ')' | // ParenthesizedExpression 15.8.5 Literal | // Literal 15.8.1 Name | // AmbiguousName Name Arguments | // MethodInvocation Name '[]' { '[]' } | // ArrayType 10.1 Name '[]' { '[]' } '.' 'class' | // ClassLiteral 15.8.2 'this' | // This 15.8.3 'this' Arguments | // Alternate constructor invocation 8.8.5.1 'super' Arguments | // Unqualified superclass constructor invocation 8.8.5.1 'super' '.' Identifier | // SuperclassFieldAccess 15.11.2 'super' '.' Identifier Arguments | // SuperclassMethodInvocation 15.12.4.9 NewClassInstance | NewAnonymousClassInstance | // ClassInstanceCreationExpression 15.9 NewArray | // ArrayCreationExpression 15.10 NewInitializedArray | // ArrayInitializer 10.6 PrimitiveType { '[]' } | // Type PrimitiveType { '[]' } '.' 'class' | // ClassLiteral 15.8.2 'void' '.' 'class' | // ClassLiteral 15.8.2 MethodReference // MethodReference JLS9 15.13 Name := Identifier { '.' Identifier } CastExpression := '(' PrimitiveType { '[]' } ')' UnaryExpression | '(' Expression ')' UnaryExpression NewClassInstance := 'new' ReferenceType Arguments NewAnonymousClassInstance := 'new' ReferenceType Arguments [ ClassBody ] NewArray := 'new' Type DimExprs { '[]' } NewInitializedArray := 'new' ArrayType ArrayInitializer- Throws:
CompileExceptionIOException
-
parseSelector
Selector := '.' Identifier | // FieldAccess 15.11.1 '.' Identifier Arguments | // MethodInvocation '.' '<' TypeList '>' 'super' Arguments // Superconstructor invocation (?) '.' '<' TypeList '>' 'super' '.' . Identifier // ??? '.' '<' TypeList '>' 'super' '.' . Identifier Arguments // Supermethod invocation '.' '<' TypeList '>' Identifier Arguments // ExplicitGenericInvocation '.' 'this' // QualifiedThis 15.8.4 '.' 'super' Arguments // Qualified superclass constructor invocation (JLS7 8.8.7.1) '.' 'super' '.' Identifier | // SuperclassFieldReference (JLS7 15.11.2) '.' 'super' '.' Identifier Arguments | // SuperclassMethodInvocation (JLS7 15.12.3) '.' 'new' Identifier Arguments [ ClassBody ] | // QualifiedClassInstanceCreationExpression 15.9 '.' 'class' '[' Expression ']' // ArrayAccessExpression 15.13 ExplicitGenericInvocationSuffix := 'super' SuperSuffix | Identifier Arguments- Throws:
CompileExceptionIOException
-
parseDimExprs
DimExprs := DimExpr { DimExpr }- Throws:
CompileExceptionIOException
-
parseDimExpr
DimExpr := '[' Expression ']'
- Throws:
CompileExceptionIOException
-
parseArguments
Arguments := '(' [ ArgumentList ] ')'- Throws:
CompileExceptionIOException
-
parseArgumentList
ArgumentList := Expression { ',' Expression }- Throws:
CompileExceptionIOException
-
parseLiteral
Literal := IntegerLiteral | FloatingPointLiteral | BooleanLiteral | CharacterLiteral | StringLiteral | NullLiteral- Throws:
CompileExceptionIOException
-
parseExpressionStatement
ExpressionStatement := Expression ';'
- Throws:
CompileExceptionIOException
-
location
- Returns:
- The location of the first character of the previously read (not peeked!) token
-
peek
- Throws:
CompileExceptionIOException
-
read
- Throws:
CompileExceptionIOException
-
peek
- Throws:
CompileExceptionIOException
-
peek
- Throws:
CompileExceptionIOException
-
peek
- Throws:
CompileExceptionIOException
-
peek
- Throws:
CompileExceptionIOException
-
peekNextButOne
- Throws:
CompileExceptionIOException
-
peekNextButOne
- Throws:
CompileExceptionIOException
-
peekNextButOne
- Throws:
CompileExceptionIOException
-
read
- Throws:
CompileExceptionIOException
-
read
- Throws:
CompileExceptionIOException
-
read
- Throws:
CompileExceptionIOException
-
peekRead
- Throws:
CompileExceptionIOException
-
peekRead
- Throws:
CompileExceptionIOException
-
peekRead
- Throws:
CompileExceptionIOException
-
setSourceVersion
public void setSourceVersion(int version) -
setWarningHandler
By default, warnings are discarded, but an application my install aWarningHandler.Notice that there is no
Parser.setErrorHandler()method, but parse errors always throw aCompileException. The reason being is that there is no reasonable way to recover from parse errors and continue parsing, so there is no need to install a custom parse error handler.- Parameters:
warningHandler-nullto indicate that no warnings be issued
-
compileException
Convenience method for throwing aCompileException. -
compileException
Convenience method for throwing aCompileException.
-