@startuml
package Lexer {
    interface Tokenizeable
    package Lexer/Arrow {
        abstract class ArrowTokenizer implements Tokenizeable
        class LeftArrowTokenizer extends ArrowTokenizer {
            + publicProperty : array
            # protectedProperty : string
            - privateProperty : string
        }
    }
    package Lexer/CurlyBracket {
        abstract class CurlyBracketTokenizer
        class OpenCurlyBracketToken
        
        CurlyBracketTokenizer..|>Tokenizeable
        CurlyBracketTokenizer<|--OpenCurlyBracketToken
    }
    enum Enum {
      CASE1
      CASE2
      CASE3
    }

    NoneDefinitionClass ..|> Tokenizeable
}
@enduml