@startuml
skinparam linetype ortho
class Generated
class Generator
class MaybeNode
MaybeNode --> Generated
MaybeNode --> Generator
class MaybeString
class EmptyNode
EmptyNode --> Generated
EmptyNode --> Generator
EmptyNode --> MaybeNode
EmptyNode --> EmptyGenerated
class PresentNode
PresentNode --> Generated
PresentNode --> Generator
PresentNode --> Node
PresentNode --> MaybeNode
PresentNode --> PresentGenerated
class EmptyString
EmptyString --> MaybeString
class PresentString
PresentString --> MaybeString
class MapNode
MapNode --> MaybeString
MapNode --> Node
MapNode --> EmptyString
MapNode --> PresentString
MapNode --> HashMap
MapNode --> Map
class Node
Node --> MaybeString
class EmptyGenerated
EmptyGenerated --> Generated
class PresentGenerated
PresentGenerated --> Generated
class InfixRule
InfixRule --> MaybeNode
InfixRule --> Rule
InfixRule --> EmptyNode
class PrefixRule
PrefixRule --> Rule
PrefixRule --> MaybeNode
PrefixRule --> EmptyNode
class StringRule
StringRule --> MaybeNode
StringRule --> Rule
StringRule --> MapNode
StringRule --> PresentNode
class SuffixRule
SuffixRule --> Rule
SuffixRule --> MaybeNode
SuffixRule --> EmptyNode
class Rule
Rule --> MaybeNode
class State
State --> ArrayList
State --> List
class Main
Main --> Generated
Main --> Node
Main --> State
Main --> InfixRule
Main --> PrefixRule
Main --> StringRule
Main --> SuffixRule
Main --> IOException
Main --> Files
Main --> Path
Main --> Paths
Main --> List
@enduml