Alnum o──{'0'..'9','A'..'Z','a'..'z'}──o Alpha o──{'A'..'Z','a'..'z'}──o Blank o──{'\t',' '}──o Cntrl o──{'\x00'..'\x1f','\x7f'}──o Digit o──{'0'..'9'}──o Graph o──{'!'..'~'}──o Lower o──{'a'..'z'}──o Print o──{' '..'~'}──o Space o──{'\t'..'\r',' '}──o Upper o──{'A'..'Z'}──o Xdigit o──{'0'..'9','A'..'F','a'..'f'}──o ╭──────────»───────────╮ ╭───────────»───────────╮ ╭──────────»──────────╮ CompilationUnit o──[Spacing]─»┴─[PackageDeclaration]─┴»┴┬─[ImportDeclaration]─┬┴»┴┬─[TypeDeclaration]─┬┴»─[EOT]──o ╰──────────«──────────╯ ╰─────────«─────────╯ ╭───────»────────╮ PackageDeclaration o─┴┬─[Annotation]─┬┴»─[PACKAGE]─»─[QualifiedIdentifier]─»─[SEMI]──o ╰──────«───────╯ ╭────»─────╮ ╭───────»────────╮ ImportDeclaration o──[IMPORT]─»┴─[STATIC]─┴»─[QualifiedIdentifier]─»┴─[DOT]─»─[STAR]─┴»─[SEMI]──o ╭──────»───────╮ TypeDeclaration o──┬┴┬─[Modifier]─┬┴»─┬─[ClassDeclaration]──────────┬─┬──o │ ╰─────«──────╯ ├─[EnumDeclaration]───────────┤ │ │ ├─[InterfaceDeclaration]──────┤ │ │ ╰─[AnnotationTypeDeclaration]─╯ │ ╰─[SEMI]───────────────────────────────────────────╯ ╭────────»─────────╮ ╭────────────»────────────╮ ╭───────────────»────────────────╮ ClassDeclaration o──[CLASS]─»─[Identifier]─»┴─[TypeParameters]─┴»┴─[EXTENDS]─»─[ClassType]─┴»┴─[IMPLEMENTS]─»─[ClassTypeList]─┴»─[ClassBody]──o ╭────────────»─────────────╮ ClassBody o──[LWING]─»┴┬─[ClassBodyDeclaration]─┬┴»─[RWING]──o ╰───────────«────────────╯ ClassBodyDeclaration o──┬─[SEMI]────────────────────────┬──o │╭────»─────╮ │ ├┴─[STATIC]─┴»─[Block]──────────┤ │╭──────»───────╮ │ ╰┴┬─[Modifier]─┬┴»─[MemberDecl]─╯ ╰─────«──────╯ MemberDecl o──┬─[TypeParameters]─»─[GenericMethodOrConstructorRest]─┬──o ├─[Type]─»─[Identifier]─»─[MethodDeclaratorRest]──────┤ ├─[Type]─»─[VariableDeclarators]─»─[SEMI]─────────────┤ ├─[VOID]─»─[Identifier]─»─[VoidMethodDeclaratorRest]──┤ ├─[Identifier]─»─[ConstructorDeclaratorRest]──────────┤ ├─[InterfaceDeclaration]──────────────────────────────┤ ├─[ClassDeclaration]──────────────────────────────────┤ ├─[EnumDeclaration]───────────────────────────────────┤ ╰─[AnnotationTypeDeclaration]─────────────────────────╯ GenericMethodOrConstructorRest o──┬─┬─[Type]─┬─»─[Identifier]─»─[MethodDeclaratorRest]─┬──o │ ╰─[VOID]─╯ │ ╰─[Identifier]─»─[ConstructorDeclaratorRest]─────────╯ ╭────»────╮ ╭─────────────»──────────────╮ MethodDeclaratorRest o──[FormalParameters]─»┴┬─[Dim]─┬┴»┴─[THROWS]─»─[ClassTypeList]─┴»─┬─[MethodBody]─┬──o ╰───«───╯ ╰─[SEMI]───────╯ ╭─────────────»──────────────╮ VoidMethodDeclaratorRest o──[FormalParameters]─»┴─[THROWS]─»─[ClassTypeList]─┴»─┬─[MethodBody]─┬──o ╰─[SEMI]───────╯ ╭─────────────»──────────────╮ ConstructorDeclaratorRest o──[FormalParameters]─»┴─[THROWS]─»─[ClassTypeList]─┴»─[MethodBody]──o MethodBody o──[Block]──o ╭────────»─────────╮ ╭──────────────»──────────────╮ InterfaceDeclaration o──[INTERFACE]─»─[Identifier]─»┴─[TypeParameters]─┴»┴─[EXTENDS]─»─[ClassTypeList]─┴»─[InterfaceBody]──o ╭──────────────»───────────────╮ InterfaceBody o──[LWING]─»┴┬─[InterfaceBodyDeclaration]─┬┴»─[RWING]──o ╰─────────────«──────────────╯ ╭──────»───────╮ InterfaceBodyDeclaration o──┬┴┬─[Modifier]─┬┴»─[InterfaceMemberDecl]─┬──o │ ╰─────«──────╯ │ ╰─[SEMI]─────────────────────────────────╯ InterfaceMemberDecl o──┬─[InterfaceMethodOrFieldDecl]────────────────────────────────┬──o ├─[InterfaceGenericMethodDecl]────────────────────────────────┤ ├─[VOID]─»─[Identifier]─»─[VoidInterfaceMethodDeclaratorRest]─┤ ├─[InterfaceDeclaration]──────────────────────────────────────┤ ├─[AnnotationTypeDeclaration]─────────────────────────────────┤ ├─[ClassDeclaration]──────────────────────────────────────────┤ ╰─[EnumDeclaration]───────────────────────────────────────────╯ InterfaceMethodOrFieldDecl o──[Type]─»─[Identifier]─»─[InterfaceMethodOrFieldRest]──o InterfaceMethodOrFieldRest o──┬─[ConstantDeclaratorsRest]─»─[SEMI]─┬──o ╰─[InterfaceMethodDeclaratorRest]────╯ ╭────»────╮ ╭─────────────»──────────────╮ InterfaceMethodDeclaratorRest o──[FormalParameters]─»┴┬─[Dim]─┬┴»┴─[THROWS]─»─[ClassTypeList]─┴»─[SEMI]──o ╰───«───╯ InterfaceGenericMethodDecl o──[TypeParameters]─»─┬─[Type]─┬─»─[Identifier]─»─[InterfaceMethodDeclaratorRest]──o ╰─[VOID]─╯ ╭─────────────»──────────────╮ VoidInterfaceMethodDeclaratorRest o──[FormalParameters]─»┴─[THROWS]─»─[ClassTypeList]─┴»─[SEMI]──o ╭────────────────»─────────────────╮ ConstantDeclaratorsRest o──[ConstantDeclaratorRest]─»┴┬─[COMMA]─»─[ConstantDeclarator]─┬┴─o ╰───────────────«────────────────╯ ConstantDeclarator o──[Identifier]─»─[ConstantDeclaratorRest]──o ╭────»────╮ ConstantDeclaratorRest o─┴┬─[Dim]─┬┴»─[EQU]─»─[VariableInitializer]──o ╰───«───╯ ╭───────────────»────────────────╮ EnumDeclaration o──[ENUM]─»─[Identifier]─»┴─[IMPLEMENTS]─»─[ClassTypeList]─┴»─[EnumBody]──o ╭────────»────────╮ ╭────»────╮ ╭───────────»────────────╮ EnumBody o──[LWING]─»┴─[EnumConstants]─┴»┴─[COMMA]─┴»┴─[EnumBodyDeclarations]─┴»─[RWING]──o ╭─────────────»──────────────╮ EnumConstants o──[EnumConstant]─»┴┬─[COMMA]─»─[EnumConstant]─┬┴─o ╰────────────«─────────────╯ ╭───────»────────╮ ╭──────»──────╮ ╭──────»──────╮ EnumConstant o─┴┬─[Annotation]─┬┴»─[Identifier]─»┴─[Arguments]─┴»┴─[ClassBody]─┴─o ╰──────«───────╯ ╭────────────»─────────────╮ EnumBodyDeclarations o──[SEMI]─»┴┬─[ClassBodyDeclaration]─┬┴─o ╰───────────«────────────╯ ╭─────────»──────────╮ LocalVariableDeclarationStatement o─┴┬─┬─[FINAL]──────┬─┬┴»─[Type]─»─[VariableDeclarators]─»─[SEMI]──o │ ╰─[Annotation]─╯ │ ╰────────«─────────╯ ╭────────────────»─────────────────╮ VariableDeclarators o──[VariableDeclarator]─»┴┬─[COMMA]─»─[VariableDeclarator]─┬┴─o ╰───────────────«────────────────╯ ╭────»────╮ ╭───────────────»───────────────╮ VariableDeclarator o──[Identifier]─»┴┬─[Dim]─┬┴»┴─[EQU]─»─[VariableInitializer]─┴─o ╰───«───╯ ╭───────────»───────────╮ FormalParameters o──[LPAR]─»┴─[FormalParameterList]─┴»─[RPAR]──o ╭─────────»──────────╮ FormalParameter o─┴┬─┬─[FINAL]──────┬─┬┴»─[Type]─»─[VariableDeclaratorId]──o │ ╰─[Annotation]─╯ │ ╰────────«─────────╯ ╭─────────»──────────╮ LastFormalParameter o─┴┬─┬─[FINAL]──────┬─┬┴»─[Type]─»─[ELLIPSIS]─»─[VariableDeclaratorId]──o │ ╰─[Annotation]─╯ │ ╰────────«─────────╯ ╭───────────────»───────────────╮ ╭────────────────»────────────────╮ FormalParameterList o──┬─[FormalParameter]─»┴┬─[COMMA]─»─[FormalParameter]─┬┴»┴─[COMMA]─»─[LastFormalParameter]─┴┬──o │ ╰──────────────«──────────────╯ │ ╰─[LastFormalParameter]───────────────────────────────────────────────────────────────────╯ ╭────»────╮ VariableDeclaratorId o──[Identifier]─»┴┬─[Dim]─┬┴─o ╰───«───╯ Block o──[LWING]─»─[BlockStatements]─»─[RWING]──o ╭─────────»──────────╮ BlockStatements o─┴┬─[BlockStatement]─┬┴─o ╰────────«─────────╯ BlockStatement o──┬─[LocalVariableDeclarationStatement]─────┬──o │╭──────»───────╮ │ ├┴┬─[Modifier]─┬┴»─┬─[ClassDeclaration]─┬─┤ │ ╰─────«──────╯ ╰─[EnumDeclaration]──╯ │ ╰─[Statement]─────────────────────────────╯ Statement o──┬─[Block]────────────────────────────────────────────────────────────────────────────────────────────────┬──o │ ╭───────────»────────────╮ │ ├─[ASSERT]─»─[Expression]─»┴─[COLON]─»─[Expression]─┴»─[SEMI]────────────────────────────────────────────┤ │ ╭──────────»───────────╮ │ ├─[IF]─»─[ParExpression]─»─[Statement]─»┴─[ELSE]─»─[Statement]─┴─────────────────────────────────────────┤ │ ╭─────»─────╮ ╭──────»───────╮ ╭──────»──────╮ │ ├─[FOR]─»─[LPAR]─»┴─[ForInit]─┴»─[SEMI]─»┴─[Expression]─┴»─[SEMI]─»┴─[ForUpdate]─┴»─[RPAR]─»─[Statement]─┤ ├─[FOR]─»─[LPAR]─»─[FormalParameter]─»─[COLON]─»─[Expression]─»─[RPAR]─»─[Statement]─────────────────────┤ ├─[WHILE]─»─[ParExpression]─»─[Statement]────────────────────────────────────────────────────────────────┤ ├─[DO]─»─[Statement]─»─[WHILE]─»─[ParExpression]─»─[SEMI]────────────────────────────────────────────────┤ │ ╭─────»─────╮ │ ├─[TRY]─»─[Block]─»─┬┬─[Catch]─┬»┴─[Finally]─┴┬──────────────────────────────────────────────────────────┤ │ │╰────«────╯ │ │ │ ╰─[Finally]───────────────╯ │ ├─[SWITCH]─»─[ParExpression]─»─[LWING]─»─[SwitchBlockStatementGroups]─»─[RWING]──────────────────────────┤ ├─[SYNCHRONIZED]─»─[ParExpression]─»─[Block]─────────────────────────────────────────────────────────────┤ │ ╭──────»───────╮ │ ├─[RETURN]─»┴─[Expression]─┴»─[SEMI]─────────────────────────────────────────────────────────────────────┤ ├─[THROW]─»─[Expression]─»─[SEMI]────────────────────────────────────────────────────────────────────────┤ │ ╭──────»───────╮ │ ├─[BREAK]─»┴─[Identifier]─┴»─[SEMI]──────────────────────────────────────────────────────────────────────┤ │ ╭──────»───────╮ │ ├─[CONTINUE]─»┴─[Identifier]─┴»─[SEMI]───────────────────────────────────────────────────────────────────┤ ├─[SEMI]─────────────────────────────────────────────────────────────────────────────────────────────────┤ ├─[StatementExpression]─»─[SEMI]─────────────────────────────────────────────────────────────────────────┤ ╰─[Identifier]─»─[COLON]─»─[Statement]───────────────────────────────────────────────────────────────────╯ Catch o──[CATCH]─»─[LPAR]─»─[FormalParameter]─»─[RPAR]─»─[Block]──o Finally o──[FINALLY]─»─[Block]──o ╭───────────────»───────────────╮ SwitchBlockStatementGroups o─┴┬─[SwitchBlockStatementGroup]─┬┴─o ╰──────────────«──────────────╯ SwitchBlockStatementGroup o──[SwitchLabel]─»─[BlockStatements]──o SwitchLabel o──┬─[CASE]─»─[ConstantExpression]─»─[COLON]─┬──o ├─[CASE]─»─[EnumConstantName]─»─[COLON]───┤ ╰─[DEFAULT]─»─[COLON]─────────────────────╯ ╭─────────»──────────╮ ForInit o──┬┴┬─┬─[FINAL]──────┬─┬┴»─[Type]─»─[VariableDeclarators]───────┬──o │ │ ╰─[Annotation]─╯ │ │ │ ╰────────«─────────╯ │ │ ╭─────────────────»─────────────────╮│ ╰─[StatementExpression]─»┴┬─[COMMA]─»─[StatementExpression]─┬┴╯ ╰────────────────«────────────────╯ ╭─────────────────»─────────────────╮ ForUpdate o──[StatementExpression]─»┴┬─[COMMA]─»─[StatementExpression]─┬┴─o ╰────────────────«────────────────╯ EnumConstantName o──[Identifier]──o StatementExpression o──[Expression]──o ConstantExpression o──[Expression]──o ╭────────────────────────»─────────────────────────╮ Expression o──[ConditionalExpression]─»┴┬─[AssignmentOperator]─»─[ConditionalExpression]─┬┴─o ╰───────────────────────«────────────────────────╯ AssignmentOperator o──┬─[EQU]──────┬──o ├─[PLUSEQU]──┤ ├─[MINUSEQU]─┤ ├─[STAREQU]──┤ ├─[DIVEQU]───┤ ├─[ANDEQU]───┤ ├─[OREQU]────┤ ├─[HATEQU]───┤ ├─[MODEQU]───┤ ├─[SLEQU]────┤ ├─[SREQU]────┤ ╰─[BSREQU]───╯ ╭───────────────────────────────»────────────────────────────────╮ ConditionalExpression o──[ConditionalOrExpression]─»┴┬─[QUERY]─»─[Expression]─»─[COLON]─»─[ConditionalOrExpression]─┬┴─o ╰──────────────────────────────«───────────────────────────────╯ ╭───────────────────»───────────────────╮ ConditionalOrExpression o──[ConditionalAndExpression]─»┴┬─[OROR]─»─[ConditionalAndExpression]─┬┴─o ╰──────────────────«──────────────────╯ ╭──────────────────»───────────────────╮ ConditionalAndExpression o──[InclusiveOrExpression]─»┴┬─[ANDAND]─»─[InclusiveOrExpression]─┬┴─o ╰─────────────────«──────────────────╯ ╭────────────────»─────────────────╮ InclusiveOrExpression o──[ExclusiveOrExpression]─»┴┬─[OR]─»─[ExclusiveOrExpression]─┬┴─o ╰───────────────«────────────────╯ ╭─────────────»─────────────╮ ExclusiveOrExpression o──[AndExpression]─»┴┬─[HAT]─»─[AndExpression]─┬┴─o ╰────────────«────────────╯ ╭───────────────»────────────────╮ AndExpression o──[EqualityExpression]─»┴┬─[AND]─»─[EqualityExpression]─┬┴─o ╰──────────────«───────────────╯ ╭─────────────────────»─────────────────────╮ EqualityExpression o──[RelationalExpression]─»┴┬─┬─[EQUAL]────┬─»─[RelationalExpression]─┬┴─o │ ╰─[NOTEQUAL]─╯ │ ╰────────────────────«────────────────────╯ ╭──────────────────»───────────────────╮ RelationalExpression o──[ShiftExpression]─»┴┬─┬─┬─[LE]─┬─»─[ShiftExpression]───┬─┬┴─o │ │ ├─[GE]─┤ │ │ │ │ ├─[LT]─┤ │ │ │ │ ╰─[GT]─╯ │ │ │ ╰─[INSTANCEOF]─»─[ReferenceType]─╯ │ ╰─────────────────«──────────────────╯ ╭─────────────────»──────────────────╮ ShiftExpression o──[AdditiveExpression]─»┴┬─┬─[SL]──┬─»─[AdditiveExpression]─┬┴─o │ ├─[SR]──┤ │ │ ╰─[BSR]─╯ │ ╰────────────────«─────────────────╯ ╭─────────────────────»──────────────────────╮ AdditiveExpression o──[MultiplicativeExpression]─»┴┬─┬─[PLUS]──┬─»─[MultiplicativeExpression]─┬┴─o │ ╰─[MINUS]─╯ │ ╰────────────────────«─────────────────────╯ ╭────────────────»─────────────────╮ MultiplicativeExpression o──[UnaryExpression]─»┴┬─┬─[STAR]─┬─»─[UnaryExpression]─┬┴─o │ ├─[DIV]──┤ │ │ ╰─[MOD]──╯ │ ╰───────────────«────────────────╯ UnaryExpression o──┬─[PrefixOp]─»─[UnaryExpression]───────────────┬──o ├─[LPAR]─»─[Type]─»─[RPAR]─»─[UnaryExpression]─┤ │ ╭──────»───────╮ ╭───────»───────╮│ ╰─[Primary]─»┴┬─[Selector]─┬┴»┴┬─[PostfixOp]─┬┴╯ ╰─────«──────╯ ╰──────«──────╯ Primary o──┬─[ParExpression]────────────────────────────────────────────────────┬──o ├─[NonWildcardTypeArguments]─»─┬─[ExplicitGenericInvocationSuffix]─┬─┤ │ ╰─[THIS]─»─[Arguments]──────────────╯ │ │ ╭──────»──────╮ │ ├─[THIS]─»┴─[Arguments]─┴────────────────────────────────────────────┤ ├─[SUPER]─»─[SuperSuffix]────────────────────────────────────────────┤ ├─[Literal]──────────────────────────────────────────────────────────┤ ├─[NEW]─»─[Creator]──────────────────────────────────────────────────┤ │ ╭─────────»──────────╮ │ ├─[QualifiedIdentifier]─»┴─[IdentifierSuffix]─┴──────────────────────┤ │ ╭────»────╮ │ ├─[BasicType]─»┴┬─[Dim]─┬┴»─[DOT]─»─[CLASS]──────────────────────────┤ │ ╰───«───╯ │ ╰─[VOID]─»─[DOT]─»─[CLASS]───────────────────────────────────────────╯ ╭────»────╮ IdentifierSuffix o──┬─[LBRK]─»─┬─[RBRK]─»┴┬─[Dim]─┬┴»─[DOT]─»─[CLASS]─┬─────────────────┬──o │ │ ╰───«───╯ │ │ │ ╰─[Expression]─»─[RBRK]────────────────╯ │ ├─[Arguments]───────────────────────────────────────────────────────┤ ╰─[DOT]─»─┬─[CLASS]───────────────────────────────────────────────┬─╯ ├─[ExplicitGenericInvocation]───────────────────────────┤ ├─[THIS]────────────────────────────────────────────────┤ ├─[SUPER]─»─[Arguments]─────────────────────────────────┤ │ ╭─────────────»──────────────╮ │ ╰─[NEW]─»┴─[NonWildcardTypeArguments]─┴»─[InnerCreator]─╯ ExplicitGenericInvocation o──[NonWildcardTypeArguments]─»─[ExplicitGenericInvocationSuffix]──o ╭──────────────»──────────────╮ NonWildcardTypeArguments o──[LPOINT]─»─[ReferenceType]─»┴┬─[COMMA]─»─[ReferenceType]─┬┴»─[RPOINT]──o ╰─────────────«─────────────╯ ExplicitGenericInvocationSuffix o──┬─[SUPER]─»─[SuperSuffix]────┬──o ╰─[Identifier]─»─[Arguments]─╯ PrefixOp o──┬─[INC]───┬──o ├─[DEC]───┤ ├─[BANG]──┤ ├─[TILDA]─┤ ├─[PLUS]──┤ ╰─[MINUS]─╯ PostfixOp o──┬─[INC]─┬──o ╰─[DEC]─╯ ╭──────»──────╮ Selector o──┬─[DOT]─»─[Identifier]─»┴─[Arguments]─┴─────────────────────────┬──o ├─[DOT]─»─[ExplicitGenericInvocation]───────────────────────────┤ ├─[DOT]─»─[THIS]────────────────────────────────────────────────┤ ├─[DOT]─»─[SUPER]─»─[SuperSuffix]───────────────────────────────┤ │ ╭─────────────»──────────────╮ │ ├─[DOT]─»─[NEW]─»┴─[NonWildcardTypeArguments]─┴»─[InnerCreator]─┤ ╰─[DimExpr]─────────────────────────────────────────────────────╯ SuperSuffix o──┬─[Arguments]─────────────────────────────────────────────────────────┬──o │ ╭─────────────»──────────────╮ ╭──────»──────╮│ ╰─[DOT]─»┴─[NonWildcardTypeArguments]─┴»─[Identifier]─»┴─[Arguments]─┴╯ ━━━━━━━━━━━━━━━ BasicType o──┬─"byte"────┬─»─[LetterOrDigit]─»─[Spacing]──o ├─"short"───┤ ├─"char"────┤ ├─"int"─────┤ ├─"long"────┤ ├─"float"───┤ ├─"double"──┤ ╰─"boolean"─╯ ╭─────────────────────»─────────────────────╮ │ ╭────────────»─────────────╮│ Arguments o──[LPAR]─»┴─[Expression]─»┴┬─[COMMA]─»─[Expression]─┬┴┴»─[RPAR]──o ╰───────────«────────────╯ ╭─────────────»──────────────╮ Creator o──┬┴─[NonWildcardTypeArguments]─┴»─[CreatedName]─»─[ClassCreatorRest]───┬──o │╭─────────────»──────────────╮ │ ╰┴─[NonWildcardTypeArguments]─┴»─┬─[ClassType]─┬─»─[ArrayCreatorRest]─╯ ╰─[BasicType]─╯ ╭───────────────────────────»───────────────────────────╮ ╭─────────────»──────────────╮ │ ╭─────────────»──────────────╮ │ CreatedName o──[Identifier]─»┴─[NonWildcardTypeArguments]─┴»┴┬─[DOT]─»─[Identifier]─»┴─[NonWildcardTypeArguments]─┴┬┴─o ╰──────────────────────────«──────────────────────────╯ InnerCreator o──[Identifier]─»─[ClassCreatorRest]──o ╭────»────╮ ArrayCreatorRest o──[LBRK]─»─┬─[RBRK]─»┴┬─[Dim]─┬┴»─[ArrayInitializer]───────────┬──o │ ╰───«───╯ │ │ ╭──────»──────╮ ╭────»────╮│ ╰─[Expression]─»─[RBRK]─»┴┬─[DimExpr]─┬┴»┴┬─[Dim]─┬┴╯ ╰─────«─────╯ ╰───«───╯ ╭──────»──────╮ ClassCreatorRest o──[Arguments]─»┴─[ClassBody]─┴─o ╭──────────────────────────────»──────────────────────────────╮ │ ╭─────────────────»─────────────────╮│ ╭────»────╮ ArrayInitializer o──[LWING]─»┴─[VariableInitializer]─»┴┬─[COMMA]─»─[VariableInitializer]─┬┴┴»┴─[COMMA]─┴»─[RWING]──o ╰────────────────«────────────────╯ VariableInitializer o──┬─[ArrayInitializer]─┬──o ╰─[Expression]───────╯ ParExpression o──[LPAR]─»─[Expression]─»─[RPAR]──o ╭───────────»────────────╮ QualifiedIdentifier o──[Identifier]─»┴┬─[DOT]─»─[Identifier]─┬┴─o ╰──────────«───────────╯ Dim o──[LBRK]─»─[RBRK]──o DimExpr o──[LBRK]─»─[Expression]─»─[RBRK]──o ╭────»────╮ Type o──┬─[BasicType]─┬─»┴┬─[Dim]─┬┴─o ╰─[ClassType]─╯ ╰───«───╯ ReferenceType o──┬─[BasicType]─»┬─[Dim]─┬──┬──o │ ╰───«───╯ │ │ ╭────»────╮│ ╰─[ClassType]─»┴┬─[Dim]─┬┴╯ ╰───«───╯ ╭─────────────────────»──────────────────────╮ ╭────────»────────╮ │ ╭────────»────────╮ │ ClassType o──[Identifier]─»┴─[TypeArguments]─┴»┴┬─[DOT]─»─[Identifier]─»┴─[TypeArguments]─┴┬┴─o ╰────────────────────«─────────────────────╯ ╭────────────»────────────╮ ClassTypeList o──[ClassType]─»┴┬─[COMMA]─»─[ClassType]─┬┴─o ╰───────────«───────────╯ ╭─────────────»──────────────╮ TypeArguments o──[LPOINT]─»─[TypeArgument]─»┴┬─[COMMA]─»─[TypeArgument]─┬┴»─[RPOINT]──o ╰────────────«─────────────╯ TypeArgument o──┬─[ReferenceType]─────────────────────────────┬──o │ ╭────────────────»────────────────╮│ ╰─[QUERY]─»┴─┬─[EXTENDS]─┬─»─[ReferenceType]─┴╯ ╰─[SUPER]───╯ ╭──────────────»──────────────╮ TypeParameters o──[LPOINT]─»─[TypeParameter]─»┴┬─[COMMA]─»─[TypeParameter]─┬┴»─[RPOINT]──o ╰─────────────«─────────────╯ ╭──────────»──────────╮ TypeParameter o──[Identifier]─»┴─[EXTENDS]─»─[Bound]─┴─o ╭───────────»───────────╮ Bound o──[ClassType]─»┴┬─[AND]─»─[ClassType]─┬┴─o ╰──────────«──────────╯ Modifier o──┬─[Annotation]─────────────────────────────────────┬──o │ ━━━━━━━━━━━━━━━ │ ╰─┬─"public"───────┬─»─[LetterOrDigit]─»─[Spacing]─╯ ├─"protected"────┤ ├─"private"──────┤ ├─"static"───────┤ ├─"abstract"─────┤ ├─"final"────────┤ ├─"native"───────┤ ├─"synchronized"─┤ ├─"transient"────┤ ├─"volatile"─────┤ ╰─"strictfp"─────╯ AnnotationTypeDeclaration o──[AT]─»─[INTERFACE]─»─[Identifier]─»─[AnnotationTypeBody]──o ╭──────────────────»───────────────────╮ AnnotationTypeBody o──[LWING]─»┴┬─[AnnotationTypeElementDeclaration]─┬┴»─[RWING]──o ╰─────────────────«──────────────────╯ ╭──────»───────╮ AnnotationTypeElementDeclaration o──┬┴┬─[Modifier]─┬┴»─[AnnotationTypeElementRest]─┬──o │ ╰─────«──────╯ │ ╰─[SEMI]───────────────────────────────────────╯ AnnotationTypeElementRest o──┬─[Type]─»─[AnnotationMethodOrConstantRest]─»─[SEMI]─┬──o ├─[ClassDeclaration]─────────────────────────────────┤ ├─[EnumDeclaration]──────────────────────────────────┤ ├─[InterfaceDeclaration]─────────────────────────────┤ ╰─[AnnotationTypeDeclaration]────────────────────────╯ AnnotationMethodOrConstantRest o──┬─[AnnotationMethodRest]───┬──o ╰─[AnnotationConstantRest]─╯ ╭───────»────────╮ AnnotationMethodRest o──[Identifier]─»─[LPAR]─»─[RPAR]─»┴─[DefaultValue]─┴─o AnnotationConstantRest o──[VariableDeclarators]──o DefaultValue o──[DEFAULT]─»─[ElementValue]──o Annotation o──┬─[NormalAnnotation]────────┬──o ├─[SingleElementAnnotation]─┤ ╰─[MarkerAnnotation]────────╯ ╭──────────»──────────╮ NormalAnnotation o──[AT]─»─[QualifiedIdentifier]─»─[LPAR]─»┴─[ElementValuePairs]─┴»─[RPAR]──o SingleElementAnnotation o──[AT]─»─[QualifiedIdentifier]─»─[LPAR]─»─[ElementValue]─»─[RPAR]──o MarkerAnnotation o──[AT]─»─[QualifiedIdentifier]──o ╭───────────────»────────────────╮ ElementValuePairs o──[ElementValuePair]─»┴┬─[COMMA]─»─[ElementValuePair]─┬┴─o ╰──────────────«───────────────╯ ElementValuePair o──[Identifier]─»─[EQU]─»─[ElementValue]──o ElementValue o──┬─[ConditionalExpression]────────┬──o ├─[Annotation]───────────────────┤ ╰─[ElementValueArrayInitializer]─╯ ╭────────»────────╮ ╭────»────╮ ElementValueArrayInitializer o──[LWING]─»┴─[ElementValues]─┴»┴─[COMMA]─┴»─[RWING]──o ╭─────────────»──────────────╮ ElementValues o──[ElementValue]─»┴┬─[COMMA]─»─[ElementValue]─┬┴─o ╰────────────«─────────────╯ ╭───────────────────────»────────────────────────╮ Spacing o─┴┬─┬┬─{'\t'..'\n','\x0c'..'\r',' '}─┬─────────┬─┬┴─o │ │╰───────────────«───────────────╯ │ │ │ │ ╭─────»──────╮ │ │ │ │ │ ━━━━ │ │ │ │ ├─"/*"─»┴┬─"*/"─»─1─┬┴»─"*/"───────────────┤ │ │ │ ╰────«─────╯ │ │ │ │ ╭─────────»─────────╮ │ │ │ │ │ ━━━━━━━━━━━ │ │ │ │ ╰─"//"─»┴┬─{'\n','\r'}─»─1─┬┴»─{'\n','\r'}─╯ │ │ ╰────────«────────╯ │ ╰──────────────────────«───────────────────────╯ ━━━━━━━━━ ╭─────────»─────────╮ Identifier o──[Keyword]─»─[Letter]─»┴┬─[LetterOrDigit]─┬┴»─[Spacing]──o ╰────────«────────╯ Letter o──┬─{'a'..'z'}─┬──o ├─{'A'..'Z'}─┤ ╰─{'$','_'}──╯ LetterOrDigit o──┬─{'a'..'z'}─┬──o ├─{'A'..'Z'}─┤ ├─{'0'..'9'}─┤ ╰─{'$','_'}──╯ ━━━━━━━━━━━━━━━ Keyword o──┬─"abstract"─────┬─»─[LetterOrDigit]──o ├─"assert"───────┤ ├─"boolean"──────┤ ├─"break"────────┤ ├─"byte"─────────┤ ├─"case"─────────┤ ├─"catch"────────┤ ├─"char"─────────┤ ├─"class"────────┤ ├─"const"────────┤ ├─"continue"─────┤ ├─"default"──────┤ ├─"double"───────┤ ├─"do"───────────┤ ├─"else"─────────┤ ├─"enum"─────────┤ ├─"extends"──────┤ ├─"false"────────┤ ├─"finally"──────┤ ├─"final"────────┤ ├─"float"────────┤ ├─"for"──────────┤ ├─"goto"─────────┤ ├─"if"───────────┤ ├─"implements"───┤ ├─"import"───────┤ ├─"interface"────┤ ├─"int"──────────┤ ├─"instanceof"───┤ ├─"long"─────────┤ ├─"native"───────┤ ├─"new"──────────┤ ├─"null"─────────┤ ├─"package"──────┤ ├─"private"──────┤ ├─"protected"────┤ ├─"public"───────┤ ├─"return"───────┤ ├─"short"────────┤ ├─"static"───────┤ ├─"strictfp"─────┤ ├─"super"────────┤ ├─"switch"───────┤ ├─"synchronized"─┤ ├─"this"─────────┤ ├─"throws"───────┤ ├─"throw"────────┤ ├─"transient"────┤ ├─"true"─────────┤ ├─"try"──────────┤ ├─"void"─────────┤ ├─"volatile"─────┤ ╰─"while"────────╯ ━━━━━━━━━━━━━━━ ASSERT o──"assert"─»─[LetterOrDigit]─»─[Spacing]──o ━━━━━━━━━━━━━━━ BREAK o──"break"─»─[LetterOrDigit]─»─[Spacing]──o ━━━━━━━━━━━━━━━ CASE o──"case"─»─[LetterOrDigit]─»─[Spacing]──o ━━━━━━━━━━━━━━━ CATCH o──"catch"─»─[LetterOrDigit]─»─[Spacing]──o ━━━━━━━━━━━━━━━ CLASS o──"class"─»─[LetterOrDigit]─»─[Spacing]──o ━━━━━━━━━━━━━━━ CONTINUE o──"continue"─»─[LetterOrDigit]─»─[Spacing]──o ━━━━━━━━━━━━━━━ DEFAULT o──"default"─»─[LetterOrDigit]─»─[Spacing]──o ━━━━━━━━━━━━━━━ DO o──"do"─»─[LetterOrDigit]─»─[Spacing]──o ━━━━━━━━━━━━━━━ ELSE o──"else"─»─[LetterOrDigit]─»─[Spacing]──o ━━━━━━━━━━━━━━━ ENUM o──"enum"─»─[LetterOrDigit]─»─[Spacing]──o ━━━━━━━━━━━━━━━ EXTENDS o──"extends"─»─[LetterOrDigit]─»─[Spacing]──o ━━━━━━━━━━━━━━━ FINALLY o──"finally"─»─[LetterOrDigit]─»─[Spacing]──o ━━━━━━━━━━━━━━━ FINAL o──"final"─»─[LetterOrDigit]─»─[Spacing]──o ━━━━━━━━━━━━━━━ FOR o──"for"─»─[LetterOrDigit]─»─[Spacing]──o ━━━━━━━━━━━━━━━ IF o──"if"─»─[LetterOrDigit]─»─[Spacing]──o ━━━━━━━━━━━━━━━ IMPLEMENTS o──"implements"─»─[LetterOrDigit]─»─[Spacing]──o ━━━━━━━━━━━━━━━ IMPORT o──"import"─»─[LetterOrDigit]─»─[Spacing]──o ━━━━━━━━━━━━━━━ INTERFACE o──"interface"─»─[LetterOrDigit]─»─[Spacing]──o ━━━━━━━━━━━━━━━ INSTANCEOF o──"instanceof"─»─[LetterOrDigit]─»─[Spacing]──o ━━━━━━━━━━━━━━━ NEW o──"new"─»─[LetterOrDigit]─»─[Spacing]──o ━━━━━━━━━━━━━━━ PACKAGE o──"package"─»─[LetterOrDigit]─»─[Spacing]──o ━━━━━━━━━━━━━━━ RETURN o──"return"─»─[LetterOrDigit]─»─[Spacing]──o ━━━━━━━━━━━━━━━ STATIC o──"static"─»─[LetterOrDigit]─»─[Spacing]──o ━━━━━━━━━━━━━━━ SUPER o──"super"─»─[LetterOrDigit]─»─[Spacing]──o ━━━━━━━━━━━━━━━ SWITCH o──"switch"─»─[LetterOrDigit]─»─[Spacing]──o ━━━━━━━━━━━━━━━ SYNCHRONIZED o──"synchronized"─»─[LetterOrDigit]─»─[Spacing]──o ━━━━━━━━━━━━━━━ THIS o──"this"─»─[LetterOrDigit]─»─[Spacing]──o ━━━━━━━━━━━━━━━ THROWS o──"throws"─»─[LetterOrDigit]─»─[Spacing]──o ━━━━━━━━━━━━━━━ THROW o──"throw"─»─[LetterOrDigit]─»─[Spacing]──o ━━━━━━━━━━━━━━━ TRY o──"try"─»─[LetterOrDigit]─»─[Spacing]──o ━━━━━━━━━━━━━━━ VOID o──"void"─»─[LetterOrDigit]─»─[Spacing]──o ━━━━━━━━━━━━━━━ WHILE o──"while"─»─[LetterOrDigit]─»─[Spacing]──o Literal o──┬─[FloatLiteral]────────────┬─»─[Spacing]──o ├─[IntegerLiteral]──────────┤ ├─[CharLiteral]─────────────┤ ├─[StringLiteral]───────────┤ │ ━━━━━━━━━━━━━━━ │ ├─"true"─»─[LetterOrDigit]──┤ │ ━━━━━━━━━━━━━━━ │ ├─"false"─»─[LetterOrDigit]─┤ │ ━━━━━━━━━━━━━━━ │ ╰─"null"─»─[LetterOrDigit]──╯ ╭─────»─────╮ IntegerLiteral o──┬─[HexNumeral]─────┬─»┴─{'L','l'}─┴─o ├─[OctalNumeral]───┤ ╰─[DecimalNumeral]─╯ DecimalNumeral o──┬─"0"─────────────────────────┬──o │ ╭──────»───────╮│ ╰─{'1'..'9'}─»┴┬─{'0'..'9'}─┬┴╯ ╰─────«──────╯ HexNumeral o──┬─"0x"─┬─»┬─[HexDigit]─┬─o ╰─"0X"─╯ ╰─────«──────╯ HexDigit o──┬─{'a'..'f'}─┬──o ├─{'A'..'F'}─┤ ╰─{'0'..'9'}─╯ OctalNumeral o──"0"─»┬─{'0'..'7'}─┬─o ╰─────«──────╯ FloatLiteral o──┬─[HexFloat]─────┬──o ╰─[DecimalFloat]─╯ ╭─────»─────╮ ╭─────»──────╮ ╭─────────»─────────╮ DecimalFloat o──┬┬─[Digit]─┬»─"."─»┴┬─[Digit]─┬┴»┴─[Exponent]─┴»┴─{'D','F','d','f'}─┴┬──o │╰────«────╯ ╰────«────╯ │ │ ╭─────»──────╮ ╭─────────»─────────╮ │ ├─"."─»┬─[Digit]─┬»┴─[Exponent]─┴»┴─{'D','F','d','f'}─┴──────────────┤ │ ╰────«────╯ │ │ ╭─────────»─────────╮ │ ├┬─[Digit]─┬»─[Exponent]─»┴─{'D','F','d','f'}─┴──────────────────────┤ │╰────«────╯ │ │ ╭─────»──────╮ │ ╰┬─[Digit]─┬»┴─[Exponent]─┴»─{'D','F','d','f'}───────────────────────╯ ╰────«────╯ ╭───────»───────╮ Exponent o──{'E','e'}─»┴─{'+','-','\'}─┴»┬─[Digit]─┬─o ╰────«────╯ Digit o──{'0'..'9'}──o ╭─────────»─────────╮ HexFloat o──[HexSignificand]─»─[BinaryExponent]─»┴─{'D','F','d','f'}─┴─o ╭──────»───────╮ HexSignificand o──┬─┬─"0x"─┬─»┴┬─[HexDigit]─┬┴»─"."─»┬─[HexDigit]─┬┬──o │ ╰─"0X"─╯ ╰─────«──────╯ ╰─────«──────╯│ │ ╭──»──╮ │ ╰─[HexNumeral]─»┴─"."─┴──────────────────────────╯ ╭───────»───────╮ BinaryExponent o──{'P','p'}─»┴─{'+','-','\'}─┴»┬─[Digit]─┬─o ╰────«────╯ CharLiteral o──"'"─»─┬─[Escape]────────────────┬─»─"'"──o │ ━━━━━━━━━━━━━━━━━━━ │ ╰─{'\n','\r',''','\'}─»─1─╯ ╭───────────────»───────────────╮ StringLiteral o──"""─»┴┬─┬─[Escape]────────────────┬─┬┴»─"""──o │ │ ━━━━━━━━━━━━━━━━━━━ │ │ │ ╰─{'\n','\r','"','\'}─»─1─╯ │ ╰──────────────«──────────────╯ Escape o──"\"─»─┬─{'"',''','\','b','f','n','r','t'}─┬──o ├─[OctalEscape]─────────────────────┤ ╰─[UnicodeEscape]───────────────────╯ OctalEscape o──┬─{'0'..'3'}─»─{'0'..'7'}─»─{'0'..'7'}─┬──o ├─{'0'..'7'}─»─{'0'..'7'}──────────────┤ ╰─{'0'..'7'}───────────────────────────╯ UnicodeEscape o─┬─"u"─┬»─[HexDigit]─»─[HexDigit]─»─[HexDigit]─»─[HexDigit]──o ╰──«──╯ AT o──"@"─»─[Spacing]──o ━━━━━━━━━ AND o──"&"─»─{'&','='}─»─[Spacing]──o ANDAND o──"&&"─»─[Spacing]──o ANDEQU o──"&="─»─[Spacing]──o ━━━ BANG o──"!"─»─"="─»─[Spacing]──o ━━━ BSR o──">>>"─»─"="─»─[Spacing]──o BSREQU o──">>>="─»─[Spacing]──o COLON o──":"─»─[Spacing]──o COMMA o──","─»─[Spacing]──o DEC o──"--"─»─[Spacing]──o ━━━ DIV o──"/"─»─"="─»─[Spacing]──o DIVEQU o──"/="─»─[Spacing]──o DOT o──"."─»─[Spacing]──o ELLIPSIS o──"..."─»─[Spacing]──o ━━━ EQU o──"="─»─"="─»─[Spacing]──o EQUAL o──"=="─»─[Spacing]──o GE o──">="─»─[Spacing]──o ━━━━━━━━━━ GT o──">"─»─{'='..'>'}─»─[Spacing]──o ━━━ HAT o──"^"─»─"="─»─[Spacing]──o HATEQU o──"^="─»─[Spacing]──o INC o──"++"─»─[Spacing]──o LBRK o──"["─»─[Spacing]──o LE o──"<="─»─[Spacing]──o LPAR o──"("─»─[Spacing]──o LPOINT o──"<"─»─[Spacing]──o ━━━━━━━━━━ LT o──"<"─»─{'<'..'='}─»─[Spacing]──o LWING o──"{"─»─[Spacing]──o ━━━━━━━━━━━━━ MINUS o──"-"─»─{'-','=','\'}─»─[Spacing]──o MINUSEQU o──"-="─»─[Spacing]──o ━━━ MOD o──"%"─»─"="─»─[Spacing]──o MODEQU o──"%="─»─[Spacing]──o NOTEQUAL o──"!="─»─[Spacing]──o ━━━━━━━━━ OR o──"|"─»─{'=','|'}─»─[Spacing]──o OREQU o──"|="─»─[Spacing]──o OROR o──"||"─»─[Spacing]──o ━━━━━━━━━ PLUS o──"+"─»─{'+','='}─»─[Spacing]──o PLUSEQU o──"+="─»─[Spacing]──o QUERY o──"?"─»─[Spacing]──o RBRK o──"]"─»─[Spacing]──o RPAR o──")"─»─[Spacing]──o RPOINT o──">"─»─[Spacing]──o RWING o──"}"─»─[Spacing]──o SEMI o──";"─»─[Spacing]──o ━━━ SL o──"<<"─»─"="─»─[Spacing]──o SLEQU o──"<<="─»─[Spacing]──o ━━━━━━━━━━ SR o──">>"─»─{'='..'>'}─»─[Spacing]──o SREQU o──">>="─»─[Spacing]──o ━━━ STAR o──"*"─»─"="─»─[Spacing]──o STAREQU o──"*="─»─[Spacing]──o TILDA o──"~"─»─[Spacing]──o ━ EOT o──1──o