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