org.codehaus.janino
public class Parser extends Object
Nested Class Summary | |
---|---|
static class | Parser.ClassDeclarationContext |
static class | Parser.InterfaceDeclarationContext |
static class | Parser.ParseException
An exception that reflects an error during parsing.
|
Constructor Summary | |
---|---|
Parser(Scanner scanner) |
Method Summary | |
---|---|
void | eatToken() |
Scanner | getScanner() |
Location | location() |
Java.Atom | parseAdditiveExpression()AdditiveExpression := MultiplicativeExpression { ( '+' | '-' ) MultiplicativeExpression } |
Java.Atom | parseAndExpression()AndExpression := EqualityExpression { '&' EqualityExpression } |
Java.Rvalue[] | parseArgumentList()ArgumentList := Expression { ',' Expression } |
Java.Rvalue[] | parseArguments()Arguments := '(' [ ArgumentList ] ')' |
Java.ArrayInitializer | parseArrayInitializer()ArrayInitializer := '{' [ VariableInitializer { ',' VariableInitializer } [ ',' ] '}' |
Java.Atom | parseAssignmentExpression()AssignmentExpression := ConditionalExpression [ AssignmentOperator AssignmentExpression ] AssignmentOperator := '=' | '*=' | '/=' | '%=' | '+=' | '-=' | '<<=' | '>>=' | '>>>=' | '&=' | '^=' | '|=' |
Java.Block | parseBlock()'{' BlockStatements '}' |
Java.BlockStatement | parseBlockStatement()BlockStatement := { Identifier ':' } ( ( Modifiers Type | ModifiersOpt BasicType ) LocalVariableDeclarators ';' | 'class' ... |
List | parseBlockStatements()BlockStatements := { BlockStatement } |
Java.Statement | parseBreakStatement()BreakStatement := 'break' [ Identifier ] ';' |
void | parseClassBody(Java.ClassDeclaration classDeclaration)ClassBody := '{' { ClassBodyDeclaration } '}' |
void | parseClassBodyDeclaration(Java.ClassDeclaration classDeclaration)ClassBodyDeclaration := ';' | ModifiersOpt ( Block | // Instance (JLS2 8.6) or static initializer (JLS2 8.7) 'void' Identifier MethodDeclarationRest | 'class' ClassDeclarationRest | 'interface' InterfaceDeclarationRest | ConstructorDeclarator | Type Identifier ( MethodDeclarationRest | FieldDeclarationRest ';' ) ) |
Java.NamedClassDeclaration | parseClassDeclarationRest(String optionalDocComment, short modifiers, Parser.ClassDeclarationContext context)ClassDeclarationRest := Identifier [ 'extends' ReferenceType ] [ 'implements' ReferenceTypeList ] ClassBody |
Java.CompilationUnit | parseCompilationUnit()CompilationUnit := [ PackageDeclaration ] { ImportDeclaration } { TypeDeclaration } |
Java.Atom | parseConditionalAndExpression()ConditionalAndExpression := InclusiveOrExpression { '&&' InclusiveOrExpression } |
Java.Atom | parseConditionalExpression()ConditionalExpression := ConditionalOrExpression [ '? |
Java.Atom | parseConditionalOrExpression()ConditionalOrExpression := ConditionalAndExpression { '||' ConditionalAndExpression ] |
Java.ConstructorDeclarator | parseConstructorDeclarator(String optionalDocComment, short modifiers)ConstructorDeclarator := Identifier FormalParameters [ 'throws' ReferenceTypeList ] '{' [ 'this' Arguments ';' | 'super' Arguments ';' | Primary '.' 'super' Arguments ';' ] BlockStatements '}' |
Java.Statement | parseContinueStatement()ContinueStatement := 'continue' [ Identifier ] ';' |
Java.Rvalue | parseDimExpr()DimExpr := '[' Expression ']' |
Java.Rvalue[] | parseDimExprs()DimExprs := DimExpr { DimExpr } |
Java.Statement | parseDoStatement()DoStatement := 'do' Statement 'while' '(' Expression ')' ';' |
Java.Statement | parseEmptyStatement()EmptyStatement := ';' |
Java.Atom | parseEqualityExpression()EqualityExpression := RelationalExpression { ( '==' | '! |
Java.Atom | parseExclusiveOrExpression()ExclusiveOrExpression := AndExpression { '^' AndExpression } |
Java.Atom | parseExpression()Expression := AssignmentExpression |
Java.Rvalue[] | parseExpressionList()ExpressionList := Expression { ',' Expression } |
Java.Statement | parseExpressionStatement()ExpressionStatement := Expression ';' |
Java.VariableDeclarator[] | parseFieldDeclarationRest(String name)FieldDeclarationRest := VariableDeclaratorRest { ',' VariableDeclarator } |
Java.FunctionDeclarator.FormalParameter | parseFormalParameter()FormalParameter := [ 'final' ] Type Identifier BracketsOpt |
Java.FunctionDeclarator.FormalParameter[] | parseFormalParameters()FormalParameters := '(' [ FormalParameter { ',' FormalParameter } ] ')' |
Java.Statement | parseForStatement()ForStatement := 'for' '(' [ ForInit ] ';' [ Expression ] ';' [ ExpressionList ] ')' Statement |
Java.Statement | parseIfStatement()IfStatement := 'if' '(' Expression ')' Statement [ 'else' Statement ] |
Java.CompilationUnit.ImportDeclaration | parseImportDeclaration()ImportDeclaration := 'import' ImportDeclarationBody ';' |
Java.CompilationUnit.ImportDeclaration | parseImportDeclarationBody()ImportDeclarationBody := [ 'static' ] Identifier { '.' Identifier } [ '.' '*' ] |
Java.Atom | parseInclusiveOrExpression()InclusiveOrExpression := ExclusiveOrExpression { '|' ExclusiveOrExpression } |
void | parseInterfaceBody(Java.InterfaceDeclaration interfaceDeclaration)InterfaceBody := '{' { ';' | ModifiersOpt ( 'void' Identifier MethodDeclarationRest | 'class' ClassDeclarationRest | 'interface' InterfaceDeclarationRest | Type Identifier ( MethodDeclarationRest | FieldDeclarationRest ) ) } '}' |
Java.InterfaceDeclaration | parseInterfaceDeclarationRest(String optionalDocComment, short modifiers, Parser.InterfaceDeclarationContext context)InterfaceDeclarationRest := Identifier [ 'extends' ReferenceTypeList ] InterfaceBody |
Java.Statement | parseLabeledStatement()LabeledStatement := Identifier ':' Statement |
Java.Atom | parseLiteral() |
Java.VariableDeclarator[] | parseLocalVariableDeclarators()LocalVariableDeclarators := VariableDeclarator { ',' VariableDeclarator } |
Java.Block | parseMethodBody()MethodBody := Block |
Java.MethodDeclarator | parseMethodDeclarationRest(String optionalDocComment, short modifiers, Java.Type type, String name)MethodDeclarationRest := FormalParameters { '[' ']' } [ 'throws' ReferenceTypeList ] ( ';' | MethodBody ) |
short | parseModifiersOpt()ModifiersOpt := { 'public' | 'protected' | 'private' | 'static' | 'abstract' | 'final' | 'native' | 'synchronized' | 'transient' | 'volatile' | 'strictfp' |
Java.Atom | parseMultiplicativeExpression()MultiplicativeExpression := UnaryExpression { ( '*' | '/' | '%' ) UnaryExpression } |
Java.PackageDeclaration | parsePackageDeclaration()PackageDeclaration := 'package' QualifiedIdentifier ';' |
Java.PackageMemberTypeDeclaration | parsePackageMemberTypeDeclaration()PackageMemberTypeDeclaration := ModifiersOpt 'class' ClassDeclarationRest | ModifiersOpt 'interface' InterfaceDeclarationRest |
Java.Atom | 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 BasicType { '[]' } | // Type BasicType { '[]' } '.' 'class' | // ClassLiteral 15.8.2 'void' '.' 'class' // ClassLiteral 15.8.2 CastExpression := '(' PrimitiveType { '[]' } ')' UnaryExpression | '(' Expression ')' UnaryExpression NewClassInstance := 'new' ReferenceType Arguments NewAnonymousClassInstance := 'new' ReferenceType Arguments [ ClassBody ] NewArray := 'new' Type DimExprs { '[]' } NewInitializedArray := 'new' ArrayType ArrayInitializer |
String[] | parseQualifiedIdentifier()
QualifiedIdentifier := Identifier { '.' Identifier } |
Java.ReferenceType | parseReferenceType()ReferenceType := QualifiedIdentifier |
Java.ReferenceType[] | parseReferenceTypeList()ReferenceTypeList := ReferenceType { ',' ReferenceType } |
Java.Atom | parseRelationalExpression()RelationalExpression := ShiftExpression { ( ( '<' | '>' | '<=' | '>=' ) ShiftExpression ) | ( 'instanceof' ReferenceType ) } |
Java.Statement | parseReturnStatement()ReturnStatement := 'return' [ Expression ] ';' |
Java.Atom | parseSelector(Java.Atom atom)Selector := '.' Identifier | // FieldAccess 15.11.1 '.' Identifier Arguments | // MethodInvocation '.' 'this' // QualifiedThis 15.8.4 '.' 'super' Arguments // Qualified superclass constructor invocation (JLS 8.8.5.1) '.' 'super' '.' Identifier | // SuperclassFieldReference (JLS 15.11.2) '.' 'super' '.' Identifier Arguments | // SuperclassMethodInvocation (JLS 15.12.4.9) '.' 'new' Identifier Arguments [ ClassBody ] | // QualifiedClassInstanceCreationExpression 15.9 '.' 'class' '[' Expression ']' // ArrayAccessExpression 15.13 |
Java.Atom | parseShiftExpression()ShiftExpression := AdditiveExpression { ( '<<' | '>>' | '>>>' ) AdditiveExpression } |
Java.Statement | parseStatement()Statement := LabeledStatement | Block | IfStatement | ForStatement | WhileStatement | DoStatement | TryStatement | 'switch' ... |
Java.Statement | parseSwitchStatement()SwitchStatement := 'switch' '(' Expression ')' '{' { SwitchLabels BlockStatements } '}' SwitchLabels := SwitchLabels { SwitchLabels } SwitchLabel := 'case' Expression ':' | 'default' ':' |
Java.Statement | parseSynchronizedStatement()SynchronizedStatement := 'synchronized' '(' expression ')' Block |
Java.Statement | parseThrowStatement()ThrowStatement := 'throw' Expression ';' |
Java.Statement | parseTryStatement()TryStatement := 'try' Block Catches [ Finally ] | 'try' Block Finally Catches := CatchClause { CatchClause } CatchClause := 'catch' '(' FormalParameter ')' Block Finally := 'finally' Block |
Java.Type | parseType()Type := ( 'byte' | 'short' | 'char' | 'int' | 'long' | 'float' | 'double' | 'boolean' | ReferenceType ) { '[' ']' } |
Java.Atom | parseUnaryExpression()UnaryExpression := { PrefixOperator } Primary { Selector } { PostfixOperator } PrefixOperator := '++' | '--' | '+' | '-' | '~' | '! |
Java.VariableDeclarator | parseVariableDeclarator()VariableDeclarator := Identifier VariableDeclaratorRest |
Java.VariableDeclarator | parseVariableDeclaratorRest(String name)VariableDeclaratorRest := { '[' ']' } [ '=' VariableInitializer ]Used by field declarations and local variable declarations. |
Java.ArrayInitializerOrRvalue | parseVariableInitializer()VariableInitializer := ArrayInitializer | Expression |
Java.Statement | parseWhileStatement()WhileStatement := 'while' '(' Expression ')' Statement |
boolean | peekIdentifier() |
boolean | peekKeyword() |
boolean | peekKeyword(String keyword) |
boolean | peekKeyword(String[] keywords) |
boolean | peekOperator(String operator) |
boolean | peekOperator(String[] operators) |
String | readIdentifier() |
void | readKeyword(String keyword) |
String | readOperator() |
void | readOperator(String operator) |
void | setWarningHandler(WarningHandler optionalWarningHandler)
By default, warnings are discarded, but an application my install a
WarningHandler.
|
protected void | throwParseException(String message)
Convenience method for throwing a ParseException. |
AdditiveExpression := MultiplicativeExpression { ( '+' | '-' ) MultiplicativeExpression }
AndExpression := EqualityExpression { '&' EqualityExpression }
ArgumentList := Expression { ',' Expression }
Arguments := '(' [ ArgumentList ] ')'
ArrayInitializer := '{' [ VariableInitializer { ',' VariableInitializer } [ ',' ] '}'
AssignmentExpression := ConditionalExpression [ AssignmentOperator AssignmentExpression ] AssignmentOperator := '=' | '*=' | '/=' | '%=' | '+=' | '-=' | '<<=' | '>>=' | '>>>=' | '&=' | '^=' | '|='
'{' BlockStatements '}'
BlockStatement := { Identifier ':' } ( ( Modifiers Type | ModifiersOpt BasicType ) LocalVariableDeclarators ';' | 'class' ... | Statement | 'final' Type LocalVariableDeclarators ';' | Expression ';' | Expression LocalVariableDeclarators ';' (1) )(1) "Expression" must pose a type, and has optional trailing brackets.
BlockStatements := { BlockStatement }
BreakStatement := 'break' [ Identifier ] ';'
ClassBody := '{' { ClassBodyDeclaration } '}'
ClassBodyDeclaration := ';' | ModifiersOpt ( Block | // Instance (JLS2 8.6) or static initializer (JLS2 8.7) 'void' Identifier MethodDeclarationRest | 'class' ClassDeclarationRest | 'interface' InterfaceDeclarationRest | ConstructorDeclarator | Type Identifier ( MethodDeclarationRest | FieldDeclarationRest ';' ) )
ClassDeclarationRest := Identifier [ 'extends' ReferenceType ] [ 'implements' ReferenceTypeList ] ClassBody
CompilationUnit := [ PackageDeclaration ] { ImportDeclaration } { TypeDeclaration }
ConditionalAndExpression := InclusiveOrExpression { '&&' InclusiveOrExpression }
ConditionalExpression := ConditionalOrExpression [ '?' Expression ':' ConditionalExpression ]
ConditionalOrExpression := ConditionalAndExpression { '||' ConditionalAndExpression ]
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 := ';'
EqualityExpression := RelationalExpression { ( '==' | '!=' ) RelationalExpression }
ExclusiveOrExpression := AndExpression { '^' AndExpression }
Expression := AssignmentExpression
ExpressionList := Expression { ',' Expression }
ExpressionStatement := Expression ';'
FieldDeclarationRest := VariableDeclaratorRest { ',' VariableDeclarator }
FormalParameter := [ 'final' ] Type Identifier BracketsOpt
FormalParameters := '(' [ FormalParameter { ',' FormalParameter } ] ')'
ForStatement := 'for' '(' [ ForInit ] ';' [ Expression ] ';' [ ExpressionList ] ')' Statement
IfStatement := 'if' '(' Expression ')' Statement [ 'else' Statement ]
ImportDeclaration := 'import' ImportDeclarationBody ';'
ImportDeclarationBody := [ 'static' ] Identifier { '.' Identifier } [ '.' '*' ]
InclusiveOrExpression := ExclusiveOrExpression { '|' ExclusiveOrExpression }
InterfaceBody := '{' { ';' | ModifiersOpt ( 'void' Identifier MethodDeclarationRest | 'class' ClassDeclarationRest | 'interface' InterfaceDeclarationRest | Type Identifier ( MethodDeclarationRest | FieldDeclarationRest ) ) } '}'
InterfaceDeclarationRest := Identifier [ 'extends' ReferenceTypeList ] InterfaceBody
LabeledStatement := Identifier ':' Statement
LocalVariableDeclarators := VariableDeclarator { ',' VariableDeclarator }
MethodBody := Block
MethodDeclarationRest := FormalParameters { '[' ']' } [ 'throws' ReferenceTypeList ] ( ';' | MethodBody )
ModifiersOpt := { 'public' | 'protected' | 'private' | 'static' | 'abstract' | 'final' | 'native' | 'synchronized' | 'transient' | 'volatile' | 'strictfp'
MultiplicativeExpression := UnaryExpression { ( '*' | '/' | '%' ) UnaryExpression }
PackageDeclaration := 'package' QualifiedIdentifier ';'
PackageMemberTypeDeclaration := ModifiersOpt 'class' ClassDeclarationRest | ModifiersOpt 'interface' InterfaceDeclarationRest
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 BasicType { '[]' } | // Type BasicType { '[]' } '.' 'class' | // ClassLiteral 15.8.2 'void' '.' 'class' // ClassLiteral 15.8.2 CastExpression := '(' PrimitiveType { '[]' } ')' UnaryExpression | '(' Expression ')' UnaryExpression NewClassInstance := 'new' ReferenceType Arguments NewAnonymousClassInstance := 'new' ReferenceType Arguments [ ClassBody ] NewArray := 'new' Type DimExprs { '[]' } NewInitializedArray := 'new' ArrayType ArrayInitializer
ReferenceType := QualifiedIdentifier
ReferenceTypeList := ReferenceType { ',' ReferenceType }
RelationalExpression := ShiftExpression { ( ( '<' | '>' | '<=' | '>=' ) ShiftExpression ) | ( 'instanceof' ReferenceType ) }
ReturnStatement := 'return' [ Expression ] ';'
Selector := '.' Identifier | // FieldAccess 15.11.1 '.' Identifier Arguments | // MethodInvocation '.' 'this' // QualifiedThis 15.8.4 '.' 'super' Arguments // Qualified superclass constructor invocation (JLS 8.8.5.1) '.' 'super' '.' Identifier | // SuperclassFieldReference (JLS 15.11.2) '.' 'super' '.' Identifier Arguments | // SuperclassMethodInvocation (JLS 15.12.4.9) '.' 'new' Identifier Arguments [ ClassBody ] | // QualifiedClassInstanceCreationExpression 15.9 '.' 'class' '[' Expression ']' // ArrayAccessExpression 15.13
ShiftExpression := AdditiveExpression { ( '<<' | '>>' | '>>>' ) AdditiveExpression }
Statement := LabeledStatement | Block | IfStatement | ForStatement | WhileStatement | DoStatement | TryStatement | 'switch' ... | 'synchronized' ... | ReturnStatement | ThrowStatement | BreakStatement | ContinueStatement | EmptyStatement | ExpressionStatement
SwitchStatement := 'switch' '(' Expression ')' '{' { SwitchLabels BlockStatements } '}' SwitchLabels := SwitchLabels { SwitchLabels } SwitchLabel := 'case' Expression ':' | 'default' ':'
SynchronizedStatement := 'synchronized' '(' expression ')' Block
ThrowStatement := 'throw' Expression ';'
TryStatement := 'try' Block Catches [ Finally ] | 'try' Block Finally Catches := CatchClause { CatchClause } CatchClause := 'catch' '(' FormalParameter ')' Block Finally := 'finally' Block
Type := ( 'byte' | 'short' | 'char' | 'int' | 'long' | 'float' | 'double' | 'boolean' | ReferenceType ) { '[' ']' }
UnaryExpression := { PrefixOperator } Primary { Selector } { PostfixOperator } PrefixOperator := '++' | '--' | '+' | '-' | '~' | '!' PostfixOperator := '++' | '--'
VariableDeclarator := Identifier VariableDeclaratorRest
VariableDeclaratorRest := { '[' ']' } [ '=' VariableInitializer ]Used by field declarations and local variable declarations.
VariableInitializer := ArrayInitializer | Expression
WhileStatement := 'while' '(' Expression ')' Statement
Notice that there is no Parser.setErrorHandler()
method, but parse errors
always throw a ParseException. 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: optionalWarningHandler null
to indicate that no warnings be issued